Hi folks, Please forgive the cross-posting. The discussion of Transactions and ZODB has spilled over a number of mailing lists. Just be thankful I'm not copying in the cmf list! Here's what I've been working on recently: http://www.cat-box.net/steve/TransactionAgents-0.0.1.tar.gz Inside the archive file are three products. I'm using all three, and they work for me. You'll need Python 2.1 and Zope 2.4. As usual, here's a warning: Do not use this stuff on important systems. Do not rely on the API staying the same. Do not rely on any of this finding its way into ZPatterns or Zope or ZODB. The products are as follows: PlugIns: Exactly what I found just now in CVS at eby-sarna.com ZPatterns: I took exactly what I found just now in CVS at eby-sarna.com, fixed one showstopper bug (see my message to the ZPatterns list) made a few changes for it to play nicely with Zope 2.4, and altered the parts of ZPatterns that use transactions to use the TransactionAgents product. For kicks, the version.txt of this release is ZedPatterns-0-4-3p2-transactionagents TransactionAgents: A runtime patch to ZODB.Transaction.Transaction to implement four types of Agent. 1: The Rule Agent. Runs on a commit 2: The Indexing Agent. Runs on a commit, after the Rule Agents are done. (*) 3: The Boundary Agent. Runs when the outermost transaction is done (either aborted or commited). 4: The Post-Commit Agent. Runs in its own transaction after the outer transaction is successfully committed. (*) Things get interesting when you commit a subtransaction from a rule agent or an indexing agent. It works; see the test suite for an example of what happens it works. An important thing is that exceptions in Rule Agents and Indexing Agents are not caught, but propagate just like they would in normal methods. Exceptions raised in Boundary Agents and Post Commit Agents get swallowed and ignored (except for a warning to the log). This is important because running Rules and updating Indexes are usually a vital part of the transactional logic of an application. (Someone please translate that into plain language!). See also the test suite in the tests/ subdirectory. The comments and docstrings there should help to explain what is going on. For ZPatterns enthusiasts, here's the release notes for ZedPatterns-0-4-3p2-transactionagents: ---- 26 July 2001 Welcome to ZedPatterns-0-4-3p2-transactionagents. This is an experimental and unofficial release of ZPatterns, to test out new ideas, and clear a path to compatibility with Zope 2.4 and Python 2.1. I've included an unaltered copy of the PlugIns product, as it is required by ZPatterns. UnTar the contents of the archive directly in your Products directory. Changes from ZPatterns 0-4-3p2: * SkinScript works with Zope 2.4. * Fixed __set_attr__ bug involving _v_parent * Requires Python 2.1, Zope 2.4. * Requires TransactionAgents product. * Agents now run just before transactions get commited rather than during a tpc_commit. * New SkinScript for running a trigger as an IndexingAgent. It goes like this:: WHEN OBJECT CHANGED INDEX CALLING expression Indexing agents run after normal agents/triggers (called Rule Agents), although there are special rules for when a subtransaction is committed while an agent is running. See the TransactionAgents product's test suite for details. * ZPatterns doesn't go into an infinite loop if you commit a subtransaction from a trigger. * Support for list comprehensions in SkinScript. * Per-transaction cached _v_ attributes now last until the outermost transaction has finished. This will improve execution speed by a miniscule amount in some circumstances. ---- Credit where it's due... The ideas behind TransactionAgents were discussed by Phillip Eby and Shane Hathaway a couple of months ago on the Zope-Dev mailing list. I used Casey Duncan's Hotfixes HowTo as a guide to writing the runtime patch. I read up on test suites from Michel P and Chris McD's ZDG. Phillip Eby and Ty Sarna came up with the original ZPatterns product, maintain the difinitive version of it, and are the ultimate arbiters of taste and decency as to what features and patches make it into a real ZPatterns release. All bugs and mistakes in ZedPatterns and TransactionAgents are mine alone. Patches and feedback welcome. -- Steve Alexander Software Engineer Cat-Box limited