I may be missing the point, but wouldn't you want to have the transaction logic/rollback happen before the DESTROY? How are you informing the callers that the transaction failed? Or are you using rollback to enforce commits for the callers in their logic?