-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi, Dieter Maurer wrote:
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.
That was the initial idea in our case.
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).
I've been implementing a IndexationManager hook doing the job for CPS but I get the error your talking about... Thanks Dieter for the explanation. Your mail just arrived when I was trying to understand the persistency problems :( I got POSKeyError, Unauthorized (at catalog level while indexing and trying to get object attributs) or KeyError (Connection.setState()) exceptions randomly as well. Is there a way to hook before the first transaction commit phase ? J. - -- Julien Anguenot | Nuxeo R&D (Paris, France) CPS Plateform : http://www.cps-project.org mail: anguenot at nuxeo.com; tel: +33 (0) 6 72 57 57 66 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.6 (GNU/Linux) Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org iD8DBQFCUFReGhoG8MxZ/pIRAi2jAJ4hXTAJhqJB8czSkQpVCCBEKzWXtACfXA/m S4JfeBF+TWweLWPSoxobPEE= =8zPL -----END PGP SIGNATURE-----