Christian Heimes wrote at 2005-4-1 22:28 +0200: > ... >You want to bind some actions to the transaction system because you want >to execute some code at the end of the first phase of the 2 phase >commit.
I do not think that Florent wants to execute things at the end or in the first commit phase. Instead, he wants to execute something *BEFORE* this phase. >Hooking into the transaction machinery of ZODB is very easy. Write >your own DateManager implementing the IDateManager interface and >register it into the current transaction using get_transaction.register(DM). > >For your use case overwrite the tpc_vote() method of the data manager to >do the indexing at the boundary between the two phases. This will not work for Florent's use case, at least not in the current ZODB (for Zope 2.7). Reason: The transaction freezes the set of objects it processes in the commit *BEFORE* the first commit phase. Therefore, no "tpc_vote" is allowed to modify any persistent object. Failure to do so leads to extremely nasty persistency errors (the object is marked changed but no transaction knows about it -- no change to this object in the future will get persisted until a restart). >Jens Vagenpohl's mail host and Chris McD's blob have example code for you. But they do not change persistent objects (at least, I hope so). -- Dieter _______________________________________________ Zope-Dev maillist - Zope-Dev@zope.org http://mail.zope.org/mailman/listinfo/zope-dev ** No cross posts or HTML encoding! ** (Related lists - http://mail.zope.org/mailman/listinfo/zope-announce http://mail.zope.org/mailman/listinfo/zope )