Whatever you are doing, you are doing the "wrong thing".
You are instantiating persistent objects and not storing them in the ZODB. This is going to cause your ZODB to grow, so you might as well store them.
Otherwise you need to make non-persistent versions of the objects you are trying to 'cache' and use those instead.
-- Andrew Milton akm@theinternet.com.au
Not exactly. I am instantiating non persistent objects that do have a reference to persistence objects in the form of an attribute, and then trying to cache those non persistent objects. Do the fact that these non persistent objects store a reference to persistent ones turn them into persistent ? I am curious to know. Anyway, I tried the volatile attribute thing (http://wiki.zope.org/ZODB/VolatileAttributes) and first tests look fine. This is how I did the trick : =================== ZODBLivinObject.py =================== from OFS.SimpleItem import SimpleItem from NonZODBObject import NonZODBObject class ZODBLivingObject(SimpleItem) : """ Hello, I live in the ZODB. """ meta_type = "ZODBish" def __init__(self): """ """ self.id = "ZODBish" self.title = "ZODBish" def sayHi(self): """ """ # NonZODBObject stores a reference of self, a ZODB-living object. nonZODBish = NonZODBObject(self) # This line breaks everything. Comment it and every thing will be just right. # self.REQUEST.SESSION.set('breakish',nonZODBish) self.setNonZODBish(nonZODBish) # This can be seen in the console if runzope print "it's me",nonZODBish.context return nonZODBish.context def setNonZODBish(self,p_nonZODBish): """ """ setattr(self,'_v_NonZODBish',p_nonZODBish) def getNonZODBish(self): """ """ if not hasattr(self,"_v_NonZODBish"): self.setNonZODBish(None) return self._v_NonZODBish And then I use the setNonZODBish et getNonZODBish methods to set and access the cached value.