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.