[Zope-dev] The Application object
Shane Hathaway
shane@digicool.com
Mon, 17 Jul 2000 13:23:46 -0400
"Jeff K. Hoffman" wrote:
> Do I need to commit or abort even if I don't make changes to the
> application object? The only thing I need it for is to get to the
> Control_Panel; I am instantiating ZClass instances in the constructor of a
> Python class, i.e.:
>
> class MyClass:
>
> def __init__(self, id, title=''):
> import Zope
> app = Zope.app()
>
> ob = app.Control_Panel.Products.MyProduct.MyZClass('newId')
> ob.id = 'newId'
>
> self._setObject('newId', ob)
>
> # Do I need a get_transaction().abort() here? Will that not abort
> # the wrong transaction?
>
> app._p_jar.close()
>
Hmm... you're creating an object in a separate connection (I would call
get_transaction().abort() just to be on the safe side...) then copying
that object over to the existing connection. This will probably work,
but I wouldn't be surprised to see thorny bugs appear.
If you could instead get a handle to the existing connection, you'd be
following standard practice. You probably have a manage_addMyClass()
method, don't you? The "self" argument provided to that method is
already connected to the database. self.getPhysicalRoot() will give
you the equivalent of the app object. Then just change your
constructor this way:
> def __init__(self, app, id, title=''):
> ob = app.Control_Panel.Products.MyProduct.MyZClass('newId')
> ob.id = 'newId'
>
> self._setObject('newId', ob)
Best of luck!
Shane