diff --git a/src/helma/objectmodel/db/Node.java b/src/helma/objectmodel/db/Node.java index 148165fd..7ac96a79 100644 --- a/src/helma/objectmodel/db/Node.java +++ b/src/helma/objectmodel/db/Node.java @@ -435,9 +435,9 @@ public final class Node implements INode, Serializable { Relation rel = getDbMapping ().getSubnodeRelation (); if (rel != null) { if (rel.usesPrimaryKey()) { - nmgr.evictKey (new DbKey (getDbMapping().getSubnodeMapping(), key)); + nmgr.evictNodeByKey (new DbKey (getDbMapping().getSubnodeMapping(), key)); } else { - nmgr.evictKey (new SyntheticKey (getKey(), key)); + nmgr.evictNodeByKey (new SyntheticKey (getKey(), key)); } } } diff --git a/src/helma/objectmodel/db/NodeManager.java b/src/helma/objectmodel/db/NodeManager.java index f9cb1440..3d5f1495 100644 --- a/src/helma/objectmodel/db/NodeManager.java +++ b/src/helma/objectmodel/db/NodeManager.java @@ -360,8 +360,8 @@ public final class NodeManager { } /** - * Remove a node from the node cache. If at a later time it is accessed again, it will be - * refetched from the database. + * Remove a node from the node cache. If at a later time it is accessed again, + * it will be refetched from the database. */ public void evictNode (Node node) { node.setState (INode.INVALID); @@ -369,7 +369,21 @@ public final class NodeManager { } /** - * Used when a key stops being valid for a node. + * Remove a node from the node cache. If at a later time it is accessed again, + * it will be refetched from the database. + */ + public void evictNodeByKey (Key key) { + Node n = (Node) cache.remove (key); + if (n != null) { + n.setState (INode.INVALID); + if (!(key instanceof DbKey)) + cache.remove (n.getKey ()); + } + } + + /** + * Used when a key stops being valid for a node. The cached node itself + * remains valid, if it is present in the cache by other keys. */ public void evictKey (Key key) { cache.remove (key); diff --git a/src/helma/objectmodel/db/WrappedNodeManager.java b/src/helma/objectmodel/db/WrappedNodeManager.java index 5a425bac..0499b821 100644 --- a/src/helma/objectmodel/db/WrappedNodeManager.java +++ b/src/helma/objectmodel/db/WrappedNodeManager.java @@ -110,6 +110,10 @@ import java.util.Vector; nmgr.evictNode (node); } + public void evictNodeByKey (Key key) { + nmgr.evictNodeByKey (key); + } + public void evictKey (Key key) { nmgr.evictKey (key); }