You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jetspeed-dev@portals.apache.org by at...@apache.org on 2005/06/29 22:49:02 UTC
svn commit: r202423 -
/portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java
Author: ate
Date: Wed Jun 29 13:49:01 2005
New Revision: 202423
URL: http://svn.apache.org/viewcvs?rev=202423&view=rev
Log:
Added a first version of a write through cache for Preference nodes to prevent unneeded db hits.
Modified:
portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java
Modified: portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java?rev=202423&r1=202422&r2=202423&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java (original)
+++ portals/jetspeed-2/trunk/components/prefs/src/java/org/apache/jetspeed/prefs/impl/PersistenceBrokerPreferencesProvider.java Wed Jun 29 13:49:01 2005
@@ -15,7 +15,9 @@
*/
package org.apache.jetspeed.prefs.impl;
+import java.io.Serializable;
import java.util.Collection;
+import java.util.HashMap;
import org.apache.jetspeed.components.dao.InitablePersistenceBrokerDaoSupport;
import org.apache.jetspeed.page.document.NodeNotFoundException;
@@ -44,6 +46,84 @@
public class PersistenceBrokerPreferencesProvider extends InitablePersistenceBrokerDaoSupport implements PreferencesProvider
{
+ private static class NodeCache implements Serializable
+ {
+ Node node;
+ String fullpath;
+ int type;
+ boolean childrenLoaded;
+ Collection children;
+
+ public NodeCache(Node node)
+ {
+ this.node = node;
+ this.fullpath = node.getFullPath();
+ this.type = node.getNodeType();
+ }
+
+ public NodeCache(String fullpath, int type)
+ {
+ this.fullpath = fullpath;
+ this.type = type;
+ }
+
+ public boolean isChildrenLoaded()
+ {
+ return childrenLoaded;
+ }
+
+ public void setChildrenLoaded(boolean childrenLoaded)
+ {
+ this.childrenLoaded = childrenLoaded;
+ }
+
+ public String getFullpath()
+ {
+ return fullpath;
+ }
+
+ public Node getNode()
+ {
+ return node;
+ }
+
+ public void setNode(Node node)
+ {
+ this.node = node;
+ }
+
+ public int getType()
+ {
+ return type;
+ }
+
+ public Collection getChildren()
+ {
+ return children;
+ }
+
+ public void setChildren(Collection children)
+ {
+ this.children = children;
+ }
+
+ public boolean equals(Object obj)
+ {
+ if ( obj != null && obj instanceof NodeCache )
+ {
+ NodeCache other = (NodeCache)obj;
+ return fullpath.equals(other.fullpath) && type == other.type;
+ }
+ return false;
+ }
+
+ public int hashCode()
+ {
+ return fullpath.hashCode() + type;
+ }
+ }
+
+ private HashMap nodeMap = new HashMap();
private boolean enablePropertyManager;
/**
@@ -76,6 +156,13 @@
*/
public Node getNode( String fullPath, int nodeType ) throws NodeDoesNotExistException
{
+ NodeCache key = new NodeCache(fullPath, nodeType);
+ NodeCache hit = (NodeCache)nodeMap.get(key);
+ if ( hit != null )
+ {
+ return hit.getNode();
+ }
+
Criteria c = new Criteria();
c.addEqualTo("fullPath", fullPath);
c.addEqualTo("nodeType", new Integer(nodeType));
@@ -84,6 +171,8 @@
Node nodeObj = (Node) getPersistenceBrokerTemplate().getObjectByQuery(query);
if (null != nodeObj)
{
+ key.setNode(nodeObj);
+ nodeMap.put(key, key);
return nodeObj;
}
else
@@ -152,6 +241,8 @@
try
{
getPersistenceBrokerTemplate().store(nodeObj);
+ NodeCache key = new NodeCache(nodeObj);
+ nodeMap.put(key,key);
return nodeObj;
}
catch (Exception e)
@@ -174,19 +265,40 @@
*/
public Collection getChildren( Node parentNode )
{
+ NodeCache key = new NodeCache(parentNode);
+ NodeCache hit = (NodeCache)nodeMap.get(key);
+ if ( hit == null )
+ {
+ key.setNode(parentNode);
+ nodeMap.put(key,key);
+ hit = key;
+ }
+ if ( hit.isChildrenLoaded() )
+ {
+ return hit.getChildren();
+ }
+
Criteria c = new Criteria();
c.addEqualTo("parentNodeId", new Long(parentNode.getNodeId()));
Query query = QueryFactory.newQuery(NodeImpl.class, c);
- return getPersistenceBrokerTemplate().getCollectionByQuery(query);
+ Collection children = getPersistenceBrokerTemplate().getCollectionByQuery(query);
+ hit.setChildren(children);
+ // null or not
+ hit.setChildrenLoaded(true);
+ return children;
}
public void storeNode( Node node )
{
+ NodeCache key = new NodeCache(node);
+ nodeMap.remove(key);
getPersistenceBrokerTemplate().store(node);
}
public void removeNode( Node node )
{
+ NodeCache key = new NodeCache(node);
+ nodeMap.remove(key);
getPersistenceBrokerTemplate().delete(node);
}
@@ -202,9 +314,4 @@
{
return this.enablePropertyManager;
}
-
-
-
-
-
}
---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org