On Jan 26, 2006, at 9:27 AM, Perrin Harkins wrote:

ady more optimization than I would do. I just roll back at the end of every request. If there's nothing to roll back, it shouldn't take long. However, if you catch your execptions, you'll know when you've had one, and can roll back then. See below.
I already have a mechanism in place...
This might make some people here cringe, but...
I created a DB class that kind of works like a singleton and 'resets' a connection to the logging db, reading db and writing db handles, and passes along the current handle for each connection when asked each db handle is a member of another class that has the usually connect/disconnect/params
        It also allows for 3 levels of 'transactions' :
                Page
                Object
                Shared Object ( non transactional )
instead of starting a transaction on the DB, i start it on the DB specifiying a page , object or shared object This way, on a page, i can chain multiple object transactions -- and fail the whole set if/when a component transaction dies. The shared objects are a different class that don't call any transaction start/ end and will not start unless the db handle is in an active transaction

it was a crazy quick hack i thought of a while back to let me make certain things transaction safe on their own, but then recycle them into other uses. Its often unnecessary , but its there and keeps a count of my transaction status




You want to wrap your code in an eval block, catch the exceptions, and print a stack trace (or just log the stack trace if you're in production). You can use Carp for this, or Devel::StackTrace. There are some docs on exception handling: http://perl.apache.org/docs/general/perl_reference/ perl_reference.html#Exception_Handling_for_mod_perl
Thanks a ton!  Thats exactly what I was looking for.

Reply via email to