extended invalidate() method:
object.invalidate (key) searches for a child object with the given primary key or accessname and evicts this object from the cache. if the object isn't loaded nothing is done.
This commit is contained in:
parent
8f519432b8
commit
6b8d8b426c
3 changed files with 34 additions and 6 deletions
|
@ -437,6 +437,24 @@ public final class Node implements INode, Serializable {
|
||||||
nmgr.evictNode (this);
|
nmgr.evictNode (this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check for a child mapping and evict the object specified by key from the cache
|
||||||
|
*/
|
||||||
|
public void invalidateNode (String key) {
|
||||||
|
// This doesn't make sense for transient nodes
|
||||||
|
if (state == TRANSIENT || state == NEW)
|
||||||
|
return;
|
||||||
|
checkWriteLock (); // ?? necessary ??
|
||||||
|
Relation rel = getDbMapping ().getSubnodeRelation ();
|
||||||
|
if (rel != null) {
|
||||||
|
if (rel.usesPrimaryKey()) {
|
||||||
|
nmgr.evictKey (new DbKey (getDbMapping().getSubnodeMapping(), key));
|
||||||
|
} else {
|
||||||
|
nmgr.evictKey (new SyntheticKey (getKey(), key));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the ID of this Node. This is the primary database key and used as part of the
|
* Get the ID of this Node. This is the primary database key and used as part of the
|
||||||
|
|
|
@ -177,6 +177,21 @@ public class ESNode extends ObjectPrototype {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Invalidate the node itself or a subnode
|
||||||
|
*/
|
||||||
|
public boolean invalidate (ESValue args[]) {
|
||||||
|
if (node instanceof helma.objectmodel.db.Node) {
|
||||||
|
if (args.length == 0) {
|
||||||
|
((helma.objectmodel.db.Node) node).invalidate ();
|
||||||
|
} else {
|
||||||
|
((helma.objectmodel.db.Node) node).invalidateNode (args[0].toString ());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if node is contained in subnodes
|
* Check if node is contained in subnodes
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -236,12 +236,7 @@ public final class HopExtension {
|
||||||
}
|
}
|
||||||
public ESValue callFunction (ESObject thisObject, ESValue[] arguments) throws EcmaScriptException {
|
public ESValue callFunction (ESObject thisObject, ESValue[] arguments) throws EcmaScriptException {
|
||||||
ESNode esn = (ESNode) thisObject;
|
ESNode esn = (ESNode) thisObject;
|
||||||
INode node = esn.getNode ();
|
return ESBoolean.makeBoolean (esn.invalidate (arguments));
|
||||||
if (node instanceof helma.objectmodel.db.Node) {
|
|
||||||
((helma.objectmodel.db.Node) node).invalidate ();
|
|
||||||
esn.checkNode ();
|
|
||||||
}
|
|
||||||
return ESBoolean.makeBoolean (true);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue