Florian,
you should definitely have a look at the package zc.async and/or lovely.remotetask. lovely.remotetask is in heavy use in our applications and contains a scheduler like the scheduler provided in zope.

Jürgen

Florian Lindner wrote:
Hello,
I have a function called by a scheduler. Since it operates outside of Zope context I need to create a connection to the ZODB in order to call a utility:

    db = getUtility(ZODB.interfaces.IDatabase)
    conn = db.open()
    root = conn.root().data['Application']
zope.app.component.hooks.setSite(root["cs"]) utils = getUtilitiesFor(INewsfeed)
    for i in utils:
        print "Utility called:", i[0]
        i[1].sendNotification()
conn.close()

This produces errors like:

Unhandled error in Deferred:
Traceback (most recent call last):
File "/home/florian/Zope3/src/twisted/internet/posixbase.py", line 220, in run
    self.mainLoop()
File "/home/florian/Zope3/src/twisted/internet/posixbase.py", line 228, in mainLoop
    self.runUntilCurrent()
File "/home/florian/Zope3/src/twisted/internet/base.py", line 561, in runUntilCurrent
    call.func(*call.args, **call.kw)
File "/home/florian/Zope3/src/twisted/internet/task.py", line 108, in __call__
    d = defer.maybeDeferred(self.f, *self.a, **self.kw)
--- <exception caught here> ---
File "/home/florian/Zope3/src/twisted/internet/defer.py", line 107, in maybeDeferred
    result = f(*args, **kw)
File "/home/florian/Desktop/zope/lib/python/CS/centershock/centershock.py", line 34, in releaseRefreshEvent
    conn.close()
  File "/home/florian/Zope3/src/ZODB/Connection.py", line 268, in close
    raise ConnectionStateError("Cannot close a connection joined to "
ZODB.POSException.ConnectionStateError: Cannot close a connection joined to a transaction

What is the right way to do it?

Thanks,

Florian

_______________________________________________
Zope3-users mailing list
Zope3-users@zope.org
http://mail.zope.org/mailman/listinfo/zope3-users

Reply via email to