Martijn Faassen wrote:
Hey Laurence,

Laurence Rowe wrote:
[snip]
We'll have to stick with scoped sesssions because of threading, but the engine as local utility pattern should still work.

#myapplication/__init__.py
Session = scoped_session(sessionmaker(bind=LookupEngine('my-engine')...))
engine = EngineUtility(url='sqlite:///')
provideUtility(engine, IConnectable, 'my-engine') # but normally a local utility registration

#myapplication/foo.py
from myapplication import Session
session = Session()

Here one still needs to instantiate the session each time you use it. Couldn't you simply do:

#myapplication/__init__.py
... [what you had]
session = Session()

# myapplication/foo.py
from myapplication import session

or wouldn't that be possible?

No. It would be similar to doing:

txn = transaction.get()

(if we imagined for a moment that transactions were recyclable objects)

Individual sessions are not thread safe. The point of a scoped session is that you get a different session depending on which thread you are in.


One (perhaps the only) advantage I can see with looking up the scoped session as a utility is that it gives the integrator control over whether to use one or two phase commit, as this is set in the session configuration. Normally one would prefer one-phase commit as it is faster, but if an integrator arranged for two applications to be modified in a single transaction she would want to configure two-phase commit.

How common would it be that the integrator would do this without the code itself needing to be changed for other reasons then too? A WSGI setup, perhaps?

How long is a piece of string ;-) Elsewhere in this thread I have an imaginary departmental address book, one instance of the app per department. In this example the integrator would not have to change anything in the Address Book app. But then they want to create another app that allows them to search and replace across all address books. For this to work correctly they should reconfigure the address book app to use multiple two phase commit.

I imagine we could arrange something where we allow both. Provide the engine as local utility scenario, but let people register sessions as local utilities should they want to.

Maybe this should be configured somewhere else than a local utility. I wander how Pylons does it.

Laurence

_______________________________________________
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 )

Reply via email to