NAME

Maypole::Plugin::Transaction - Transaction handling for Maypole

SYNOPSIS

Simple transaction:

package MyApp;

use Maypole::Application qw(Transaction);

# You should AutoCommit by default
MyApp->setup( 'dbi:Pg:dbname=myapp', 'myuser', 'mypass',
    { AutoCommit => 1 } );

sub do_something : Exported {
    my ( $self, $r ) = @_;
    my $h = CGI::Untaint->new( %{ $r->{params} } );
    warn 'Transaction failed!'
        unless $r->transaction( sub { $self->create_from_cgi($h) } );
}

Advanced transaction with exception handling:

package MyApp;

use Maypole::Application qw(Transaction);
use Maypole::Constants;
use Exception::Class TransactionException =>
  { description => 'Transaction failed, so rolled back' };

# You should AutoCommit by default
MyApp->setup( 'dbi:Pg:dbname=myapp', 'myuser', 'mypass',
    { AutoCommit => 1 } );
MyApp->config->transaction_exception('TransactionException');

sub exception {
    my ( $r, $e ) = @_;
    if ( $e->isa('TransactionException') ) {
        warn "Transaction failed: $e";
        # Do something to correct the failure
        return OK;
    }
    return ERROR;
}

sub do_something : Exported {
    my ( $self, $r ) = @_;
    my $h = CGI::Untaint->new( %{ $r->{params} } );
    $r->transaction( sub { $self->create_from_cgi($h) } );
}

DESCRIPTION

Commit, Rollback and throwing Exceptions!

Note that you need Maypole 2.0 or newer to use this module!

transaction

my $status = $r->transaction( $coderef, $exception );

Returns true or false, the exception argument is optional.

AUTHOR

Sebastian Riedel, sri@oook.de

LICENSE

This library is free software. You can redistribute it and/or modify it under the same terms as perl itself.