[Dbix-class] how to implement Transactions (over different db
tables) in a Catalyst project
kakimoto at tpg.com.au
kakimoto at tpg.com.au
Mon Jul 6 22:44:13 GMT 2009
hi, everyone,
I finally looked at the updated doc for txn_do and transactions have
been implemented correctly in my application.
Nevertheless, I do have a few questions (at the bottom).
sub save_complete_records
{
...
eval
{
$c->model('myAppDB')->schema->txn_do( sub
{
...
$c->forward(
'/subscriptions/_save_address',
[
{ 'policy_id' => $policy_id, }
]
);
...
}
if ($@)
{
$c->log->debug(' Exception manually trapped here : ' . $@ );
$c->model('myAppDB')->schema->txn_rollback or die "Cannot ROLL
BACK - Address module";
$c->log->debug(' manually rolled back' );
$c->error(
q{ An error has occured with the listing. If this problem } .
q{persists please contact our helpdesk at
helpdesk at insuranceline.}.
q{com.nz.}
);
}
}
To test, I purposedly entered a very long string for one of the database
attributes to make the transaction fail.
I have the following questions:
1) I looked at the terminal with all the debug messages. I noticed that
the exception was caught and eventhough the roll back was done, I do not
see the print outs from the liens within the "if ($@)" (exception
handling) section above. Why is that?
2) I noticed that whilst the rollback was successful. the sequence do
not get rolled back. IS this desired behaviour of DBIx::Class?
To illustrate, before the exception was caught, an entry was made in
my User_Subscriptions database table. The ID was printed out and I took
note of it.
When the operation was complete, I queried my User_Subscriptions
database table (using psql for postgresql for an entry of the noted ID).
No entry of the noted ID was returned.
I went back to the webpage and entered the form with valid attributes
and yes, all necessary objects were created in the database backend and
the sequence
in the User_Subscriptions database table had increased by 1.
Any ideas?
thank you :)
k. akimoto
More information about the DBIx-Class
mailing list