Hi > > Hi Thomas, > > Correct me please if I am wrong, ObjectEnvelopeTable and > related cache > cleaning on abort-transaction is an ODMG feature.
exactly! > The > PersistenceBroker > API does not offer this feature, so the documentation at > http://db.apache.org/ojb/objectcache.html is correct (maybe a > little out > of date), exactly! > it is also possible to just call > pBroker.removeFromCache( obj > ) to do the same job in a more compact way :) exactly! Thomas > cheers > danilo > > > > > 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 > > > --------------------------------------------------------------------- > 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]
