Hi, Just a fix to the code of my previous email : you should not call admin.cancelUpdate(oid.toString()); in the catch block of the cache method (you should never go in this code, but if you do so, you have an exception : not in update state)
regards Jacques > -----Message d'origine----- > De : Armin Waibel [mailto:[EMAIL PROTECTED] > Envoy� : jeudi 12 mai 2005 16:38 > � : OJB Users List > Objet : Re: ObjectCacheInternal and OSCache / JGroups issue > > > Hi, > > Jacques Desmazieres wrote: > > > Based on all that I have been seeking a little bit deeper in the OSCache > > documentation. Actually, OSCache sends notifications (Events) > only on flush > > events. The putInCache method do not flush the cache, so no > event is sent. > > The ObjectCacheOSCacheInternalImpl should force OSCache to > flush the entry > > in order to generate an events. > > > > Based on that, there is a mistake in the sample code provided : > you have to > > add a call to remove(oid) just before calling putInCache (twice in the > > code). > > > > And now it works fine. Hope this could help anyone else. > > > > Thanks much! I will patch the sample code. > > regards > Armin > > > > Jacques Desmazieres > > > > > > Here is the code of my current implementation, based on your sample with > > just some fixes > > > > public class ObjectCacheOSCacheInternalImpl implements > ObjectCacheInternal > > { > > private static GeneralCacheAdministrator admin = new > > GeneralCacheAdministrator(); > > private static final int REFRESH_PERIOD = > > com.opensymphony.oscache.base.CacheEntry.INDEFINITE_EXPIRY; > > private Logger log = > > Logger.getLogger(ObjectCacheOSCacheInternalImpl.class); > > > > public ObjectCacheOSCacheInternalImpl(PersistenceBroker > broker, Properties > > prop) > > { > > } > > > > public void cache(Identity oid, Object obj) > > { > > try > > { > > remove(oid); > > admin.putInCache(oid.toString(), obj); > > } > > catch (Exception e) > > { > > admin.cancelUpdate(oid.toString()); > > log.error(" Error while try to > cache object: " + oid, e); > > } > > } > > > > public void doInternalCache(Identity oid, Object obj, int type) > > { > > cache(oid, obj); > > } > > > > public boolean cacheIfNew(Identity oid, Object obj) > > { > > boolean result = false; > > Cache cache = admin.getCache(); > > try > > { > > cache.getFromCache(oid.toString()); > > } > > catch (NeedsRefreshException e) > > { > > cache( oid, obj ); > > if (log.isDebugEnabled()) log.debug(" > retrieved from application > > cache"); > > } > > return result; > > } > > > > public Object lookup(Identity oid) > > { > > try > > { > > return admin.getFromCache(oid.toString(), > REFRESH_PERIOD); > > } > > catch (NeedsRefreshException e) > > { > > // not found in cache > > if (log.isDebugEnabled()) log.debug("Not > found in cache: " + oid); > > admin.cancelUpdate(oid.toString()); > > return null; > > } > > catch (Exception e) > > { > > log.error("Unexpected error when lookup > object from cache: " + oid, e); > > admin.cancelUpdate(oid.toString()); > > return null; > > } > > } > > > > public void remove(Identity oid) > > { > > try > > { > > admin.flushEntry(oid.toString()); > > } > > catch (Exception e) > > { > > throw new RuntimeCacheException("Unexpected > error when remove object from > > cache: " + oid, e); > > } > > } > > > > public void clear() > > { > > try > > { > > if (log.isDebugEnabled()) log.debug("Clear cache"); > > admin.flushAll(); > > } > > catch (Exception e) > > { > > throw new RuntimeCacheException("Unexpected > error while clear cache", e); > > } > > } > > } > > > > > > > > > > --------------------------------------------------------------------- > > 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]
