Question... Are you on 2.1.x or 2.2? Also, in your example, tpc_entered is not set because tpc_entered is only true if the transaction commit process (tpc = two-phase commit) has been started. At 11:53 AM 7/27/00 +0400, Jephte CLAIN wrote:
Ok, so ZPatterns.Transactional._unregistered method is called twice for a ZPatterns.Transactional object when an exception is raised and the ZPatterns.Transactional object has not be freed: once from the ZODB.Transaction.abort method, once from the ZODB.Transaction.__del__ method which call abort if objects to be aborted remain in the zodb transaction aware object The call is made twice for DataSkins and for TransientMapping (as far as I know, they are at the moment the only Transactional objects in zpatterns)
for example, try this DTML code in a specialist:
<dtml-with "getItem(key='whatever key you have in the specialist')"> <dtml-raise> </dtml-raise> </dtml-with>
without my patch, Zope should display 'uncatched exceptions in Transation object'
so what now? I'm lost. Is this normal or not? Is my patch sufficient (ignore attempts to abort the object twice by trapping exceptions in _unregister). What about Transactional.abort which check for tpc_entered? Why is tpc_entered never set to 0?