[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