One more thought --- On Wed, 21 Dec 2005, Chris McDonough wrote:
The structure of the method is simple enough: there is a large <dtml-let> block which populates local variables with data from the session variables
<dtml-let foobar="getSessionVariable('foobar')" ...
with the body of the <dtml-let> containing 300 lines or so of dtml, control code, sql queries, and occasional dtml-let blocks to hold query results and computed values.
If this is the same getSessionVariable as you reported before (a Python Script), note that each call that you make to it has overhead. It might be better to create a single Python script to return all of the values that you need from the session rather than calling this over and over again. If that doesn't work, it might be even better to just do SESSION.get('foobar') instead of calling a Python Script for every value. ... Write conflicts happen for a transaction. In Zope, there is one transaction per request.
There are two distinct sections to the navigation_box transaction. One where the session variables are read and a second where they are used. To minimize conflicts, the what is now a single tranaction should be split into two separate transactions. Any thought as to how to do that? If navigation_box were broken into two separate methods, say nav_box1 and nav_box2, how does nav_box1 commit itself and then transfer control and data (a session variable snapshot) to nav_box2 as a new transaction? I would guess that if nav_box1 redirects to nav_box2 a new transaction is initiated and the old one committed. Is that correct? And is there a better way to get the same effect?