Hi again,

 
> Hi Mahler,

actually my first name is Thomas !

>     Thank you again Mahler. You saved me a lot of work :-)
>     Just a final question: if this behavior is already 
> implemented, why does
> the documentation (http://db.apache.org/ojb/objectcache.html) 
> say we need to
> remove the objects from the cache after the transaction 
> rollback? Is the
> documentation wrong or out of date?

The documentation is not wrong or out of date. It simply refers to
PersistenceBroker transactions.
for PersistenceBroker transactions the cache is not managed automatically!

I admit that the document may be misunderstodd as there is no clear
distinction between PB and ODMG API.

Sorry for the confusion

> 
> Thanks,
> Jair Jr
> 
> ----- Original Message -----
> From: "Mahler Thomas" <[EMAIL PROTECTED]>
> To: "'OJB Users List'" <[EMAIL PROTECTED]>
> Sent: Wednesday, October 29, 2003 9:44 AM
> Subject: RE: how to get objects locked by a transaction?
> 
> 
> > Hi Jair,
> >
> >
> > > Hi,
> > >     Thank you Mahler for your fast reply.
> > >     I understand that it is not possible to do it with the
> > > current OJB API.
> > >     I am asking you this because I need to remove from OJB
> > > cache the objects
> > > touched by a transaction when it is aborted.
> > >     Here is what I think could be a good idea to fix this
> > > issue: as noted in
> > > the OJB cache documentation
> > > (http://db.apache.org/ojb/objectcache.html), the
> > > OJB user must manually remove each object touched by the
> > > trasaction when
> > > using ObjectCacheDefaultImpl and the transaction is aborted
> > > because the
> > > objects may be corrupted. So why doesn't the implementation of the
> > > Transaction.abort method removes the touched objets from the
> > > cache? I think
> > > this should fix this issue, don't you?
> >
> > That's already implemented!
> > The ObjectENvelopeTable.rollback() method performs rollback 
> actions for
> all
> > registered objects.
> >
> >     public void rollback()
> >     {
> >         PersistenceBroker broker = transaction.getBroker();
> >         Iterator iter = mvOrderOfIds.iterator();
> >         while (iter.hasNext())
> >         {
> >             ObjectEnvelope mod = (ObjectEnvelope)
> > mhtObjectEnvelopes.get(iter.next());
> >             if (log.isDebugEnabled())
> >                 log.debug("rollback: " + mod);
> >             // if the Object has been modified has been modified by
> > transaction, mark object as dirty
> >             if (mod.hasChanged())
> >             {
> >
> > mod.setModificationState(mod.getModificationState().markDirty());
> >             }
> >             mod.getModificationState().rollback(mod, broker);
> >         }
> >     }
> >
> > The ModificationState.rollback(...) calls remove dirty 
> instances from the
> > cache.
> > For example the StateOldDirty.rollback method looks like follows:
> >     public void rollback(ObjectEnvelope mod, 
> PersistenceBroker broker)
> >     {
> >         this.removeFromCache(mod.getObject(), broker);
> >         // Call added to rollback the object itself so it 
> has the previous
> > values again when it is used further on.
> >         mod.rollback();
> >     }
> >
> > clean Objects (that is Objects not modified during the 
> transaction) will
> not
> > be removed from the cache!
> >
> >
> > >     Well, it's just an idea. In my system I am going to
> > > remove the objects
> > > from cache manually, but as there's no way to get only the
> > > objects touched
> > > by the transaction I'll have to clear the entire cache.
> >
> > I thinks that's not necessary, given my above explanation.
> >
> > cheers,
> > thomas
> >
> > > Thanks,
> > > Jair Jr
> > >
> > > ----- Original Message -----
> > > From: "Mahler Thomas" <[EMAIL PROTECTED]>
> > > To: "'OJB Users List'" <[EMAIL PROTECTED]>
> > > Sent: Tuesday, October 28, 2003 1:45 PM
> > > Subject: RE: how to get objects locked by a transaction?
> > >
> > >
> > > > Hello Jair,
> > > >
> > > > OJB ODMG stores each registered Objects in an
> > > o.a.ojb.odmg.ObjectEnvelope.
> > > > All ObjectEnvelopes are kept in an 
> o.a.ojb.odmg.ObjectEnvelopeTable.
> > > > ObjectEnvelopeTable has a public method
> > > > public Enumeration elements();
> > > >
> > > > which returns an Enumeration of all ObjectEnvelopes.
> > > >
> > > > The each OJB ODMG TransactionImpl maintains its own
> > > ObjectEnvelopeTable:
> > > >     /**
> > > >      * the internal table containing all Objects "touched"
> > > by this tx and
> > > > their
> > > >      * respective transactional state
> > > >      */
> > > >     private ObjectEnvelopeTable objectEnvelopeTable = null;
> > > >
> > > > Currently TransactionImpl does not provide public access to the
> > > > ObjectEnvelopeTable.
> > > > So I don't see a way to perform your task without changing
> > > OJB code...
> > > >
> > > > cheers,
> > > > Thomas
> > > >
> > > > > -----Original Message-----
> > > > > From: Jair da Silva Ferreira J�nior [mailto:[EMAIL PROTECTED]
> > > > > Sent: Tuesday, October 28, 2003 12:25 AM
> > > > > To: OJB Users List
> > > > > Subject: how to get objects locked by a transaction?
> > > > >
> > > > >
> > > > > Hello,
> > > > >     How can I safely get all objects locked by a transaction
> > > > > using ODMG or broker API?
> > > > >     I need this because I want to remove all objects locked
> > > > > by a transaction from the cache. Something like this:
> > > > >
> > > > >         .....
> > > > >         Iterator lockedObjects=getLockedObjects(transaction);
> > > > >         while(lockedObjects.hasNext()){
> > > > >             broker.removeFromCache(lockedObjects.next());
> > > > >         }
> > > > >         .....
> > > > >
> > > > > Thanks,
> > > > >     Jair Jr
> > > > >
> > > >
> > > >
> > > >
> > > 
> ---------------------------------------------------------------------
> > > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > > For additional commands, e-mail: [EMAIL PROTECTED]
> > > >
> > > >
> > > >
> > >
> > >
> > >
> > > 
> ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > > For additional commands, e-mail: [EMAIL PROTECTED]
> > >
> >
> >
> > 
> ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> >
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to