[jboss-svn-commits] JBoss Portal SVN: r5650 - in trunk/core/src/main/org/jboss/portal/core/impl/model: instance portal

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Tue Nov 14 12:07:44 EST 2006


Author: julien at jboss.com
Date: 2006-11-14 12:07:41 -0500 (Tue, 14 Nov 2006)
New Revision: 5650

Modified:
   trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
   trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PersistentPortalObjectContainer.java
Log:
preliminary work on a natural-id -> pk cache, for now uses an unbounded concurrent reader hashmap

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java	2006-11-14 16:34:42 UTC (rev 5649)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/instance/PersistentInstanceContainer.java	2006-11-14 17:07:41 UTC (rev 5650)
@@ -67,6 +67,8 @@
 import java.util.List;
 import java.util.Set;
 
+import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+
 /**
  * Instance Container that is persistent
  *
@@ -126,12 +128,16 @@
       }
    };
 
+   /** . */
+   protected ConcurrentReaderHashMap cache;
+
    public PersistentInstanceContainer()
    {
       ctx = new ContainerContext(this);
 
       //
       contextualizer = new ObjectContextualizer(ctx);
+      cache = new ConcurrentReaderHashMap();
    }
 
    public boolean isCloneOnCreate()
@@ -462,10 +468,23 @@
 
    private InstanceDefinitionImpl lookup(Session session, String id)
    {
-      Criteria criteria = session.createCriteria(InstanceDefinitionImpl.class);
-      criteria.add(Restrictions.naturalId().set("instanceId", id));
-      criteria.setCacheable(true);
-      return (InstanceDefinitionImpl)criteria.uniqueResult();
+      Long pk = (Long)cache.get(id);
+      if (pk == null)
+      {
+         Criteria criteria = session.createCriteria(InstanceDefinitionImpl.class);
+         criteria.add(Restrictions.naturalId().set("instanceId", id));
+         criteria.setCacheable(true);
+         InstanceDefinitionImpl instanceDefinition = (InstanceDefinitionImpl)criteria.uniqueResult();
+         if (instanceDefinition != null)
+         {
+            cache.put(id, instanceDefinition.getKey());
+         }
+         return instanceDefinition;
+      }
+      else
+      {
+         return (InstanceDefinitionImpl)session.get(InstanceDefinitionImpl.class, pk);
+      }
    }
 
    //**********************************************************************

Modified: trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PersistentPortalObjectContainer.java
===================================================================
--- trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PersistentPortalObjectContainer.java	2006-11-14 16:34:42 UTC (rev 5649)
+++ trunk/core/src/main/org/jboss/portal/core/impl/model/portal/PersistentPortalObjectContainer.java	2006-11-14 17:07:41 UTC (rev 5650)
@@ -36,6 +36,8 @@
 
 import javax.naming.InitialContext;
 
+import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
+
 /**
  * @author <a href="mailto:julien at jboss.org">Julien Viet</a>
  * @version $Revision$
@@ -70,6 +72,9 @@
    /** . */
    protected ObjectContextualizer contextualizer;
 
+   /** . */
+   protected ConcurrentReaderHashMap cache;
+
    public PersistentPortalObjectContainer()
    {
       ctx = new ContainerContext()
@@ -105,6 +110,7 @@
 
       //
       contextualizer = new ObjectContextualizer(ctx);
+      cache = new ConcurrentReaderHashMap();
    }
 
    public JBossAuthorizationDomainRegistry getAuthorizationDomainRegistry()
@@ -227,23 +233,39 @@
 
    private ObjectNode getObjectNode(Session session, String path)
    {
-      if (path.length() == 0)
+      Long pk = (Long)cache.get(path);
+      if (pk == null)
       {
-         // For oracle where an empty path is treated as null so we need to add that here
-         // See also org.jboss.portal.core.hibernate.OracleString
-         Query query = session.createQuery(LOOKUP_QUERY_FOR_NULL_PATH);
-         query.setParameter("path", path);
-         query.setCacheable(true);
-         Object objectNode = query.uniqueResult();
-         return (ObjectNode)objectNode;
+         if (path.length() == 0)
+         {
+            // For oracle where an empty path is treated as null so we need to add that here
+            // See also org.jboss.portal.core.hibernate.OracleString
+            Query query = session.createQuery(LOOKUP_QUERY_FOR_NULL_PATH);
+            query.setParameter("path", path);
+            query.setCacheable(true);
+            ObjectNode objectNode = (ObjectNode)query.uniqueResult();
+            if (objectNode != null)
+            {
+               cache.put(path, objectNode.getKey());
+            }
+            return objectNode;
+         }
+         else
+         {
+            Criteria criteria = session.createCriteria(ObjectNode.class);
+            criteria.add(Restrictions.naturalId().set("path", path));
+            criteria.setCacheable(true);
+            ObjectNode objectNode = (ObjectNode)criteria.uniqueResult();
+            if (objectNode != null)
+            {
+               cache.put(path, objectNode.getKey());
+            }
+            return objectNode;
+         }
       }
       else
       {
-         Criteria criteria = session.createCriteria(ObjectNode.class);
-         criteria.add(Restrictions.naturalId().set("path", path));
-         criteria.setCacheable(true);
-         Object objectNode = criteria.uniqueResult();
-         return (ObjectNode)objectNode;
+         return (ObjectNode)session.get(ObjectNode.class, pk);
       }
    }
 }




More information about the jboss-svn-commits mailing list