-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Florent Guillaume wrote: > Jim Washington wrote: > >> Spelunking a bit in the code, >> zope.app.rdb.ZopeDatabaseAdapter.isConnected() looks at whether >> _v_connection is present, not whether the connection is actually >> alive. If we fix this here, isConnected() perhaps should handle the >> case where the connection might be reaped by the back end db. > > > Frankly anything that uses _v_ attributes is asking for trouble because > it relies on low level behaviour of the ZODB and persistence mechanisms. > They can disappear at unpredictable times. Avoid them.
There *is* a reasonable pattern for using them, with the following caveat: the value you are caching must depend *only* on other attribtues of the *same* persistent object *or* its non-persistent subobjects (i.e., the values are pickled / ghostified as part of the same ZODB record). In this case, the following works entirely as expected: class Foo(SomePersistentBaseClass): _v_cache_an_expensive_operation = None def getExpensiveResult(self): if self._v_cache_an_expensive_operation is None: self._v_cache_an_expensive_operation = _expensive() return self._v_cache_an_expensive_operation This pattern is reliable because the volatile will be wiped if *any* of the attributes of its object are modified, at the point that the transaction (or subtransaction) commits / reaches a savepoint. If '_expensive' depends on *any other persistent object*, you lose (eventually, anyway). Tres. - -- =================================================================== Tres Seaver +1 202-558-7113 [EMAIL PROTECTED] Palladion Software "Excellence by Design" http://palladion.com -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.1 (GNU/Linux) Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org iD8DBQFDn3gV+gerLs4ltQ4RAmekAKCf8ByFHX9beo51HUYOYyIoAm6eswCfRkLi czMxyJZPhaKMgq6K1lJup6g= =gkrJ -----END PGP SIGNATURE----- _______________________________________________ Zope3-dev mailing list Zope3-dev@zope.org Unsub: http://mail.zope.org/mailman/options/zope3-dev/archive%40mail-archive.com