[TransWarp] __getitem__ on DM requires active transaction

Phillip J. Eby pje at telecommunity.com
Mon Dec 23 13:08:07 EST 2002


At 02:02 PM 12/23/02 +0200, Roch'e Compaan wrote:
>On Mon, Dec 23, 2002 at 12:33:34PM -0500, Phillip J. Eby wrote:
> > At 06:59 PM 12/23/02 +0200, Roch? Compaan wrote:
> >
> > >What if I want to retrieve an object from a DataManager and I am not in
> > >a transaction? Surely one doesn't have to be in a transaction if you
> > >simply want to retrieve an object?
> >
> > In your DM subclass, set:
> >
> > resetStatesAfterTxn = False
>
>I actually want the cache to be flushed between transactions - I just
>didn't think object retrieval required a transaction and it seems quite
>tedious to manually start a transaction whenever I want to
>retrieve something whereas "save", "new" and "delete" operations can
>automatically start a transactions.

No, they don't.  If you want transactions, you have to start them.  PEAK 
requires you to be explicit on this point in order to avoid programmer error.

Pretty much, if you're dealing with 'peak.storage' and you're not using 
unflushed data managers, you must begin a transaction.  It's not 
particularly tedious; the shortest general spelling is simply:

storage.begin(yourDataManager)

or if you have only one transaction for the whole application, just:

storage.begin()

Anyway, since there is no way to flush the cache between transactions 
unless the data manager has joined a transaction, and a transaction must 
exist to be joined, how can a data manager ensure that it will be able to 
clear its cache without a current transaction?




More information about the PEAK mailing list