diff --git a/build.xml b/build.xml
index 1c2624df..9c0d5886 100644
--- a/build.xml
+++ b/build.xml
@@ -102,8 +102,8 @@
getStatistics();
}
diff --git a/src/helma/objectmodel/db/NodeManager.java b/src/helma/objectmodel/db/NodeManager.java
index d57536fb..83187981 100644
--- a/src/helma/objectmodel/db/NodeManager.java
+++ b/src/helma/objectmodel/db/NodeManager.java
@@ -56,7 +56,7 @@ public final class NodeManager {
}
/**
- * Initialize the NodeManager for the given dbHome and
+ * Initialize the NodeManager for the given dbHome and
* application properties. An embedded database will be
* created in dbHome if one doesn't already exist.
*/
@@ -112,7 +112,7 @@ public final class NodeManager {
}
/**
- * Shut down this node manager. This is called when the application
+ * Shut down this node manager. This is called when the application
* using this node manager is stopped.
*/
public void shutdown() throws DatabaseException {
@@ -295,7 +295,7 @@ public final class NodeManager {
synchronized (cache) {
Node old = (Node) cache.put(node.getKey(), node);
- if (old != node && old != null && !old.isNullNode() &&
+ if (old != node && old != null && !old.isNullNode() &&
old.getState() != Node.INVALID) {
cache.put(node.getKey(), old);
cache.put(key, old);
@@ -432,14 +432,14 @@ public final class NodeManager {
/**
* Insert a node into a different (relational) database than its default one.
*/
- public void exportNode(Node node, DbSource dbs)
+ public void exportNode(Node node, DbSource dbs)
throws SQLException, ClassNotFoundException {
if (node == null) {
throw new IllegalArgumentException("Node can't be null in exportNode");
}
-
+
DbMapping dbm = node.getDbMapping();
-
+
if (dbs == null) {
throw new IllegalArgumentException("DbSource can't be null in exportNode");
} else if ((dbm == null) || !dbm.isRelational()) {
@@ -448,7 +448,7 @@ public final class NodeManager {
insertRelationalNode(node, dbm, dbs.getConnection());
}
}
-
+
/**
* Insert a node into a different (relational) database than its default one.
*/
@@ -493,7 +493,7 @@ public final class NodeManager {
for (int i = 0; i < columns.length; i++) {
DbColumn col = columns[i];
- if (!col.isMapped())
+ if (!col.isMapped())
continue;
if (col.isIdField()) {
setStatementValue(stmt, columnNumber, node.getID(), col);
@@ -502,7 +502,7 @@ public final class NodeManager {
} else {
Relation rel = col.getRelation();
Property p = rel == null ? null : node.getProperty(rel.getPropName());
-
+
if (p != null) {
setStatementValue(stmt, columnNumber, p, col.getType());
} else if (col.isNameField()) {
@@ -544,7 +544,7 @@ public final class NodeManager {
app.logError("Error invoking onPersist()", x);
}
}
-
+
/**
* Updates a modified node in the embedded db or an external relational database, depending
* on its database mapping.
@@ -554,7 +554,7 @@ public final class NodeManager {
*/
public boolean updateNode(IDatabase db, ITransaction txn, Node node)
throws IOException, SQLException, ClassNotFoundException {
-
+
invokeOnPersist(node);
DbMapping dbm = node.getDbMapping();
boolean markMappingAsUpdated = false;
@@ -1023,7 +1023,7 @@ public final class NodeManager {
return retval;
}
-
+
protected List collectMissingKeys(SubnodeList list, int start, int length) {
List retval = null;
for (int i = start; i < start + length; i++) {
@@ -1318,7 +1318,7 @@ public final class NodeManager {
DbColumn[] columns = dbm.getColumns();
Relation[] joins = dbm.getJoins();
-
+
StringBuffer b = dbm.getSelect(null).append("WHERE ");
dbm.appendCondition(b, idfield, kstr);
dbm.addJoinConstraints(b, " AND ");
@@ -1718,21 +1718,28 @@ public final class NodeManager {
}
}
- /**
- * Add a listener that is notified each time a transaction commits
+ /**
+ * Returns a map with statistics about the cache
+ */
+ public Map getCacheStatistics() {
+ return cache.getStatistics();
+ }
+
+ /**
+ * Add a listener that is notified each time a transaction commits
* that adds, modifies or deletes any Nodes.
*/
public void addNodeChangeListener(NodeChangeListener listener) {
listeners.add(listener);
}
-
- /**
- * Remove a previously added NodeChangeListener.
+
+ /**
+ * Remove a previously added NodeChangeListener.
*/
public void removeNodeChangeListener(NodeChangeListener listener) {
listeners.remove(listener);
}
-
+
/**
* Let transactors know if they should collect and fire NodeChangeListener
* events
@@ -1740,7 +1747,7 @@ public final class NodeManager {
protected boolean hasNodeChangeListeners() {
return listeners.size() > 0;
}
-
+
/**
* Called by transactors after committing.
*/
@@ -1757,7 +1764,7 @@ public final class NodeManager {
}
}
}
-
+
private void setStatementValue(PreparedStatement stmt, int columnNumber, String value, DbColumn col)
throws SQLException {
if (value == null) {
@@ -1780,7 +1787,7 @@ public final class NodeManager {
stmt.setBoolean(stmtNumber, p.getBooleanValue());
break;
-
+
case Types.TINYINT:
case Types.BIGINT:
case Types.SMALLINT:
@@ -1833,7 +1840,7 @@ public final class NodeManager {
String val = p.getStringValue();
Reader isr = new StringReader (val);
stmt.setCharacterStream (stmtNumber,isr, val.length());
-
+
break;
case Types.CHAR:
diff --git a/src/helma/util/CacheMap.java b/src/helma/util/CacheMap.java
index fba8e516..ebdb6c12 100644
--- a/src/helma/util/CacheMap.java
+++ b/src/helma/util/CacheMap.java
@@ -277,7 +277,7 @@ public class CacheMap implements ObjectCache {
return true;
}
- /// Called when the application using this cache is stopped. We
+ /// Called when the application using this cache is stopped. We
// simply clear out our cache contents.
public synchronized void shutdown() {
clear();
@@ -331,6 +331,12 @@ public class CacheMap implements ObjectCache {
return new HashMap(capacity, loadFactor);
}
+ public Map getStatistics() {
+ Map stats = new HashMap();
+ stats.put("size", size());
+ stats.put("threshold", threshold);
+ return stats;
+ }
}