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 rw...@apache.org on 2005/11/16 22:15:43 UTC

svn commit: r345127 - in /portals/jetspeed-2/trunk/components/page-manager/src: java/org/apache/jetspeed/page/impl/ test/

Author: rwatler
Date: Wed Nov 16 13:15:25 2005
New Revision: 345127

URL: http://svn.apache.org/viewcvs?rev=345127&view=rev
Log:
add expiring cache to DB PageManager, default expiration = 150 sec.

Modified:
    portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
    portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java
    portals/jetspeed-2/trunk/components/page-manager/src/test/database-page-manager.xml
    portals/jetspeed-2/trunk/components/page-manager/src/test/secure-database-page-manager.xml

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java?rev=345127&r1=345126&r2=345127&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManager.java Wed Nov 16 13:15:25 2005
@@ -77,6 +77,8 @@
 public class DatabasePageManager extends InitablePersistenceBrokerDaoSupport implements PageManager
 {
     private static final int DEFAULT_CACHE_SIZE = 128;
+    private static final int MIN_CACHE_EXPIRES_SECONDS = 30;
+    private static final int DEFAULT_CACHE_EXPIRES_SECONDS = 150;
 
     private static Map modelClasses = new HashMap();
     static
@@ -100,13 +102,27 @@
     
     private int cacheSize;
 
+    private int cacheExpiresSeconds;
+
     private DatabasePageManagerCache cache;
 
-    public DatabasePageManager(String repositoryPath, int cacheSize, boolean isPermissionsSecurity, boolean isConstraintsSecurity)
+    public DatabasePageManager(String repositoryPath, int cacheSize, int cacheExpiresSeconds, boolean isPermissionsSecurity, boolean isConstraintsSecurity)
     {
         super(repositoryPath);
         delegator = new DelegatingPageManager(isPermissionsSecurity, isConstraintsSecurity, modelClasses);
         this.cacheSize = Math.max(cacheSize, DEFAULT_CACHE_SIZE);
+        if (cacheExpiresSeconds < 0)
+        {
+            this.cacheExpiresSeconds = DEFAULT_CACHE_EXPIRES_SECONDS;
+        }
+        else if (cacheExpiresSeconds == 0)
+        {
+            this.cacheExpiresSeconds = 0;
+        }
+        else
+        {
+            this.cacheExpiresSeconds = Math.max(cacheExpiresSeconds, MIN_CACHE_EXPIRES_SECONDS);
+        }
         DatabasePageManagerCache.cacheInit(this);
     }
 
@@ -118,6 +134,16 @@
     public int getCacheSize()
     {
         return cacheSize;
+    }
+
+    /**
+     * getCacheExpiresSeconds
+     *
+     * @return configured cache expiration in seconds
+     */
+    public int getCacheExpiresSeconds()
+    {
+        return cacheExpiresSeconds;
     }
 
     /* (non-Javadoc)

Modified: portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java?rev=345127&r1=345126&r2=345127&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/java/org/apache/jetspeed/page/impl/DatabasePageManagerCache.java Wed Nov 16 13:15:25 2005
@@ -36,6 +36,7 @@
 {
     private static LRUMap cacheByOID;
     private static LRUMap cacheByPath;
+    private static int cacheExpiresSeconds;
     private static boolean constraintsEnabled;
     private static boolean permissionsEnabled;
 
@@ -52,6 +53,7 @@
         {
             cacheByOID = new LRUMap(pageManager.getCacheSize());
             cacheByPath = new LRUMap(pageManager.getCacheSize());
+            cacheExpiresSeconds = pageManager.getCacheExpiresSeconds();
             constraintsEnabled = pageManager.getConstraintsEnabled();
             permissionsEnabled = pageManager.getPermissionsEnabled();
         }
@@ -67,9 +69,7 @@
      */
     public synchronized static NodeImpl cacheLookup(String path)
     {
-        Identity oid = (Identity)cacheByPath.get(path);
-        NodeImpl node = (NodeImpl)cacheByOID.get(oid);
-        return node;
+        return (NodeImpl)cacheLookup((Identity)cacheByPath.get(path));
     }
 
     /**
@@ -83,7 +83,15 @@
      */
     public synchronized static void cacheAdd(Identity oid, Object obj)
     {
-        cacheByOID.put(oid, obj);
+        Entry entry = (Entry)cacheByOID.get(oid);
+        if (entry != null)
+        {
+            entry.put(obj);
+        }
+        else
+        {
+            cacheByOID.put(oid, new Entry(obj));
+        }
         if (obj instanceof NodeImpl)
         {
             NodeImpl node = (NodeImpl)obj;
@@ -114,7 +122,15 @@
      */
     public synchronized static Object cacheLookup(Identity oid)
     {
-        return cacheByOID.get(oid);
+        if (oid != null)
+        {
+            Entry entry = (Entry)cacheByOID.get(oid);
+            if (entry != null)
+            {
+                return entry.get();
+            }
+        }
+        return null;
     }
 
     /**
@@ -126,11 +142,14 @@
      */
     public synchronized static void cacheRemove(Identity oid)
     {
-        Object obj = cacheByOID.remove(oid);
-        if (obj instanceof NodeImpl)
+        Entry entry = (Entry)cacheByOID.remove(oid);
+        if (entry != null)
         {
-            NodeImpl node = (NodeImpl)obj;
-            cacheByPath.remove(node.getPath());
+            Object obj = entry.get();
+            if (obj instanceof NodeImpl)
+            {
+                cacheByPath.remove(((NodeImpl)obj).getPath());
+            }
         }
     }
 
@@ -145,11 +164,54 @@
         Iterator objectsIter = cacheByOID.values().iterator();
         while (objectsIter.hasNext())
         {
-            Object obj = objectsIter.next();
+            Object obj = ((Entry)objectsIter.next()).get();
             if (obj instanceof NodeImpl)
             {
                 ((NodeImpl)obj).resetCachedSecurityConstraints();
             }
+        }
+    }
+
+    /**
+     * Entry
+     *
+     * Cache entry class adding entry timestamp to track expiration
+     */
+    private static class Entry
+    {
+        public long timestamp;
+        public Object element;
+
+        public Entry(Object element)
+        {
+            put(element);
+            timestamp = System.currentTimeMillis();
+        }
+
+        public Object get()
+        {
+            if ((DatabasePageManagerCache.cacheExpiresSeconds > 0) && (element != null))
+            {
+                long now = System.currentTimeMillis();
+                if (((now - timestamp) / 1000) > DatabasePageManagerCache.cacheExpiresSeconds)
+                {
+                    element = null;
+                }
+                else
+                {
+                    timestamp = now;
+                }
+            }
+            return element;
+        }
+        
+        public void put(Object element)
+        {
+            if (DatabasePageManagerCache.cacheExpiresSeconds > 0)
+            {
+                timestamp = System.currentTimeMillis();
+            }
+            this.element = element;
         }
     }
 

Modified: portals/jetspeed-2/trunk/components/page-manager/src/test/database-page-manager.xml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/test/database-page-manager.xml?rev=345127&r1=345126&r2=345127&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/test/database-page-manager.xml (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/test/database-page-manager.xml Wed Nov 16 13:15:25 2005
@@ -24,12 +24,14 @@
           class="org.apache.jetspeed.page.impl.DatabasePageManager">
         <!-- OJB configuration file resource path -->
         <constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>       
-        <!-- folder/page/link cache size -->
+        <!-- folder/page/link cache size, default=128, min=128 -->
         <constructor-arg index="1"><value>128</value></constructor-arg>
-        <!-- permissions security enabled flag -->
-        <constructor-arg index="2"><value>false</value></constructor-arg>
-        <!-- constraints security enabled flag -->
+        <!-- folder/page/link cache expires seconds, default=150, infinite=0, min=30 -->
+        <constructor-arg index="2"><value>0</value></constructor-arg>
+        <!-- permissions security enabled flag, default=false -->
         <constructor-arg index="3"><value>false</value></constructor-arg>
+        <!-- constraints security enabled flag, default=true -->
+        <constructor-arg index="4"><value>false</value></constructor-arg>
     </bean>
 
     <!-- Transaction Proxying -->

Modified: portals/jetspeed-2/trunk/components/page-manager/src/test/secure-database-page-manager.xml
URL: http://svn.apache.org/viewcvs/portals/jetspeed-2/trunk/components/page-manager/src/test/secure-database-page-manager.xml?rev=345127&r1=345126&r2=345127&view=diff
==============================================================================
--- portals/jetspeed-2/trunk/components/page-manager/src/test/secure-database-page-manager.xml (original)
+++ portals/jetspeed-2/trunk/components/page-manager/src/test/secure-database-page-manager.xml Wed Nov 16 13:15:25 2005
@@ -24,12 +24,14 @@
           class="org.apache.jetspeed.page.impl.DatabasePageManager">
         <!-- OJB configuration file resource path -->
         <constructor-arg index="0"><value>JETSPEED-INF/ojb/page-manager-repository.xml</value></constructor-arg>       
-        <!-- folder/page/link cache size -->
+        <!-- folder/page/link cache size, default=128, min=128 -->
         <constructor-arg index="1"><value>128</value></constructor-arg>
-        <!-- permissions security enabled flag -->
-        <constructor-arg index="2"><value>false</value></constructor-arg>
-        <!-- constraints security enabled flag -->
-        <constructor-arg index="3"><value>true</value></constructor-arg>
+        <!-- folder/page/link cache expires seconds, default=150, infinite=0, min=30 -->
+        <constructor-arg index="2"><value>0</value></constructor-arg>
+        <!-- permissions security enabled flag, default=false -->
+        <constructor-arg index="3"><value>false</value></constructor-arg>
+        <!-- constraints security enabled flag, default=true -->
+        <constructor-arg index="4"><value>true</value></constructor-arg>
     </bean>
 
     <!-- Transaction Proxying -->



---------------------------------------------------------------------
To unsubscribe, e-mail: jetspeed-dev-unsubscribe@portals.apache.org
For additional commands, e-mail: jetspeed-dev-help@portals.apache.org