Due to the issues I had with the TreeCacheView class, I wrote a command line implementation of TreeCacheListener. In doing so, I happened upon a quirk. It turns out that TreeCacheListener instances are not notified when the remove(fqn, key) method is invoked on remote instances. I have not tested with a listener that is local to the cache, but in looking at the code, I think that the result might be the same.
Using the JBossCache 1.1 tagged version of TreeCache I tracked the actual removal (on a remote instance from the remove invocation) to line 2517. In the latest revision, the line is 2576. The method containing these lines of code never issues a nodeModified event to the listeners, however it is a bit more complicated because the method does issue nodeRemoved events. They are suppressed for the context of this call due to a boolean parameter on the method itself. Should invocations of remove(fqn, key) cause nodeModification events? It seems like they should, but the presence of the other (suppressed) events confuses me. I supposed this method is used for both the removal of nodes and of values from a node's map. Am I reading this correctly? For reference, the JBossCache 1.1 tagged version of TreeCache's _remove method is below. Line 2517 is the line containing old_value=n.remove(key). | public Object _remove(GlobalTransaction tx, Fqn fqn, Object key, | boolean create_undo_ops, boolean sendNodeEvent) | throws LockingException, TimeoutException { | Node n=null; | MethodCall undo_op=null; | Object old_value=null; | | if(log.isDebugEnabled()) | log.debug("_remove(" + tx + ", \"" + fqn + "\", " + key + ")"); | | try { | // Find the node. This will lock it (if <tt>locking</tt> is true) and | // add the temporarily created parent nodes to the TX's node list if tx != null) | n=findNode(fqn, true, locking, tx, NODE_WRITE); | if(n == null) { | log.error("_remove(): node " + fqn + " not found"); | return null; | } | old_value=n.remove(key); | | // create a compensating method call (reverting the effect of | // this modification) and put it into the TX's undo list. | if(tx != null && create_undo_ops && old_value != null) { | undo_op=new MethodCall(put_key_val_method, | new Object[]{tx, fqn, key, old_value, | new Boolean(false)}); | // 1. put undo-op in TX' undo-operations list (needed to rollback TX) | tx_table.addUndoOperation(tx, undo_op); | } | | if(sendNodeEvent) | notifyNodeRemoved(fqn); | return old_value; | } | finally { // we always unlock when no TX is present (lock-update-unlock) | if(tx == null && locking == true) | releaseLocks(tx, fqn); | } | } | View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3854386#3854386 Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3854386 ------------------------------------------------------- This SF.Net email is sponsored by: Sybase ASE Linux Express Edition - download now for FREE LinuxWorld Reader's Choice Award Winner for best database on Linux. http://ads.osdn.com/?ad_id=5588&alloc_id=12065&op=click _______________________________________________ JBoss-Development mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/jboss-development