Dieter Maurer wrote:
I have put an enhancement proposal at
http://www.zope.org/Wikis/ZODB/VolatileAttributeLifetimeGarantee
It allows applications to declare that they need for
some (so called sticky) objects a garanteed lifetime for their
volatile attributes that extends until at least the next
transaction boundary.
This extension makes safe the use of volatile attributes for
the following cases:
* the storage of database connections in "Shared.DC.ZRDB.Connection"
* the former use of "_v_skindata" in "Products.CMFCore.Skinnable"
(now replaced by a much more complex, less efficient and not
completely correct solution)
* the use of "_v_is_cp" in "Archetypes.BaseObject"
(and other use of volatile attributes for control purposes).
This statement implies that the current use is unsafe.
Feedback is welcome -- either in the Wiki or here.
I'm a little uneasy about baking this policy so deeply into
the infrastructure. I wonder if the use case can be handled
another way.
A persistent object can override _p_deactivate. For example:
def _p_deactivate(self):
pass
prevents an object from being turned into a ghost unless it is
invalidated.
You could implement your sticky attribute at the application level:
def _p_deactivate(self):
if getattr(self, '_p_sticky', False):
return
Persistent._p_deactivate(self)
You could provide any policy you want, without making the policy part
of ZODB.
Jim
--
Jim Fulton mailto:[EMAIL PROTECTED] Python Powered!
CTO (540) 361-1714 http://www.python.org
Zope Corporation http://www.zope.com http://www.zope.org
_______________________________________________
For more information about ZODB, see the ZODB Wiki:
http://www.zope.org/Wikis/ZODB/
ZODB-Dev mailing list - ZODB-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zodb-dev