[jboss-jira] [JBoss JIRA] Created: (JBCACHE-760) TreeCacheListener in PojoCache gets nodeModify events for invalid objects
Nitzan Niv (JIRA)
jira-events at jboss.com
Tue Sep 5 06:44:29 EDT 2006
TreeCacheListener in PojoCache gets nodeModify events for invalid objects
--------------------------------------------------------------------------
Key: JBCACHE-760
URL: http://jira.jboss.com/jira/browse/JBCACHE-760
Project: JBoss Cache
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: PojoCache
Affects Versions: 1.4.0.SP1
Reporter: Nitzan Niv
Assigned To: Manik Surtani
In PojoCache with a registered event listener, when inserting a collection (Map, List) to the cache, the listener gets events for the creation and then the modification of the collection object. On a nodeModify() event (with pre==false), if you call the cache's getObject with the received fqn you get the following runtime exception (which did not occur on 1.3.0SP2 in a similar scenario).
I believe the modification event is raised before the collection is "really" inserted into the cache, so the fqn points to an invalid object.
java.lang.RuntimeException: TreeCacheAopDelegate._getObject(): null AOPInstance.
at org.jboss.cache.aop.TreeCacheAopDelegate._getObjectInternal(TreeCacheAopDelegate.java:122)
at org.jboss.cache.aop.TreeCacheAopDelegate._getObject(TreeCacheAopDelegate.java:92)
at org.jboss.cache.aop.PojoCache._getObject(PojoCache.java:722)
at org.jboss.cache.aop.PojoCache.getObject(PojoCache.java:416)
at org.jboss.cache.notifications.TreeCacheAopListenerTest$EventLog.nodeModify(TreeCacheAopListenerTest.java:268)
at org.jboss.cache.TreeCache.notifyNodeModify(TreeCache.java:5832)
at org.jboss.cache.TreeCache._put(TreeCache.java:4425)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:324)
at org.jgroups.blocks.MethodCall.invoke(MethodCall.java:321)
at org.jboss.cache.interceptors.CallInterceptor.invoke(CallInterceptor.java:52)
at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
at org.jboss.cache.interceptors.PessimisticLockInterceptor.invoke(PessimisticLockInterceptor.java:80)
at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
at org.jboss.cache.interceptors.UnlockInterceptor.invoke(UnlockInterceptor.java:32)
at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
at org.jboss.cache.interceptors.TxInterceptor.handleNonTxMethod(TxInterceptor.java:345)
at org.jboss.cache.interceptors.TxInterceptor.invoke(TxInterceptor.java:156)
at org.jboss.cache.interceptors.Interceptor.invoke(Interceptor.java:68)
at org.jboss.cache.interceptors.CacheMgmtInterceptor.invoke(CacheMgmtInterceptor.java:157)
at org.jboss.cache.TreeCache.invokeMethod(TreeCache.java:5520)
at org.jboss.cache.TreeCache.put(TreeCache.java:3678)
at org.jboss.cache.TreeCache.put(TreeCache.java:3349)
at org.jboss.cache.aop.InternalDelegate.put(InternalDelegate.java:133)
at org.jboss.cache.aop.InternalDelegate.putAopClazz(InternalDelegate.java:273)
at org.jboss.cache.aop.CollectionClassHandler.collectionObjectPut(CollectionClassHandler.java:115)
at org.jboss.cache.aop.TreeCacheAopDelegate._putObject(TreeCacheAopDelegate.java:213)
at org.jboss.cache.aop.PojoCache._putObject(PojoCache.java:731)
at org.jboss.cache.aop.PojoCache.putObject(PojoCache.java:462)
at org.jboss.cache.aop.PojoCache.putObject(PojoCache.java:423)
To recreate the problem I use a test case similar to TreeCacheListenerTest but with a PojoCache. The test is:
public void testNodeCreatedAndModifiedMapEvent() throws Exception {
EventLog el = new EventLog(cache);
cache.addTreeCacheListener(el);
Map data = new HashMap();
data.put("key", "value");
cache.putObject("/hello/world", data);
...
}
and the relevant listener code:
public void nodeModify(Fqn fqn, boolean pre, boolean isLocal) {
events.add("modify "+
(pre? "about to modify " : "Modified ") +
(isLocal? "local " : "remote ") + fqn);
if(this.cache != null && !pre) {
try {
cache.getObject(fqn);
}
catch (Exception e) {
events.add(e);
e.printStackTrace(System.err);
}
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the jboss-jira
mailing list