[jboss-cvs] JBossAS SVN: r68209 - in trunk/tomcat/src: resources and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Dec 12 18:24:13 EST 2007


Author: bstansberry at jboss.com
Date: 2007-12-12 18:24:13 -0500 (Wed, 12 Dec 2007)
New Revision: 68209

Modified:
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java
   trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheService.java
   trunk/tomcat/src/resources/jbossweb-cluster-beans.xml
Log:
[JBAS-5027] Support object passivation with FIELD granularity clustered webapps

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java	2007-12-12 23:20:07 UTC (rev 68208)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheManager.java	2007-12-12 23:24:13 UTC (rev 68209)
@@ -45,8 +45,13 @@
 import org.apache.catalina.Valve;
 import org.apache.catalina.core.ContainerBase;
 import org.jboss.cache.CacheException;
+import org.jboss.cache.config.EvictionPolicyConfig;
+import org.jboss.cache.eviction.LRUConfiguration;
+import org.jboss.cache.eviction.LRUPolicy;
 import org.jboss.cache.pojo.PojoCache;
+import org.jboss.ejb3.cache.tree.AbortableLRUPolicy;
 import org.jboss.metadata.web.jboss.JBossWebMetaData;
+import org.jboss.metadata.web.jboss.PassivationConfig;
 import org.jboss.metadata.web.jboss.ReplicationConfig;
 import org.jboss.metadata.web.jboss.ReplicationGranularity;
 import org.jboss.metadata.web.jboss.ReplicationTrigger;
@@ -129,6 +134,20 @@
     */
    private Boolean replicationFieldBatchMode_;
    
+   /**
+    * Max time (milliseconds) a FIELD granularity object can be idle
+    * before it's should be passivated if passivation is enabled.
+    * Setting to < 1 means it's ignored.
+    */
+   protected int passivationMaxObjectIdleTime_ = -1;
+   
+   /**
+    * Max number of FIELD granularity objects that can be cached before
+    * the LRU objects are passivated.
+    * Setting to < 1 means it's ignored.
+    */
+   protected int passivationMaxObjects_ = -1;
+   
    /** Class loader for this web app. */
    private ClassLoader tcl_;
    
@@ -181,6 +200,17 @@
       Integer snapshotInt = repCfg.getSnapshotInterval();
       setSnapshotInterval(snapshotInt == null ? 0 : snapshotInt.intValue()); 
       
+      if (passivationMode_)
+      {
+         PassivationConfig pConfig = webMetaData.getPassivationConfig();
+         Integer max = pConfig.getObjectMaxIdleTime();
+         if (max != null)
+            passivationMaxObjectIdleTime_ = max.intValue();
+         max = pConfig.getMaxObjects();
+         if (max != null)
+            passivationMaxObjects_ = max.intValue();
+      }
+      
       log_.debug("init(): replicationGranularity_ is " + replicationGranularity_ +
          " and replicationFieldBatchMode is " + replicationFieldBatchMode_ +
          " and useJK is " + useJK_ +
@@ -299,7 +329,7 @@
     */
    public void setUseJK(boolean useJK)
    {
-      this.useJK_ = useJK;
+      this.useJK_ = Boolean.valueOf(useJK);
    }
 
    /**
@@ -495,6 +525,27 @@
       return passivationMinIdleTime_;
    }
 
+   public int getPassivationMaxObjectIdleTime()
+   {
+      return passivationMaxObjectIdleTime_;
+   }
+
+   public void setPassivationMaxObjectIdleTime(int passivationMaxObjectIdleTime)
+   {
+      this.passivationMaxObjectIdleTime_ = passivationMaxObjectIdleTime;
+   }
+
+   public int getPassivationMaxObjects()
+   {
+      return passivationMaxObjects_;
+   }
+
+   public void setPassivationMaxObjects(int passivationMaxObjects)
+   {
+      this.passivationMaxObjects_ = passivationMaxObjects;
+   }  
+   
+
    // Manager-methods -------------------------------------
 
    /**

Modified: trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheService.java
===================================================================
--- trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheService.java	2007-12-12 23:20:07 UTC (rev 68208)
+++ trunk/tomcat/src/main/org/jboss/web/tomcat/service/session/JBossCacheService.java	2007-12-12 23:24:13 UTC (rev 68209)
@@ -54,9 +54,13 @@
 import org.jboss.cache.pojo.jmx.PojoCacheJmxWrapperMBean;
 import org.jboss.cache.buddyreplication.BuddyManager;
 import org.jboss.cache.config.CacheLoaderConfig;
+import org.jboss.cache.config.EvictionPolicyConfig;
+import org.jboss.cache.eviction.LRUConfiguration;
+import org.jboss.cache.eviction.LRUPolicy;
 import org.jboss.cache.transaction.BatchModeTransactionManager;
 import org.jboss.invocation.MarshalledValue;
 import org.jboss.logging.Logger;
+import org.jboss.metadata.web.jboss.ReplicationGranularity;
 import org.jboss.mx.util.MBeanProxyExt;
 import org.jboss.serial.io.MarshalledObject;
 
@@ -232,6 +236,8 @@
          log_.debug("Passivation is enabled");
          PassivationListener pl = new PassivationListener(manager_, hostName_, webAppPath_);
          plainCache_.addCacheListener(pl);
+         
+         initializeFieldGranularityEviction();
       }
       else
       {
@@ -1230,5 +1236,29 @@
       }
       
    }
+   
+   private void initializeFieldGranularityEviction()
+   {
+      if (manager_.getReplicationGranularity() == ReplicationGranularity.FIELD)            
+      {
+         int maxNodes = Math.max(0, manager_.getPassivationMaxObjects());
+         int maxIdle = Math.max(0, manager_.getPassivationMaxObjectIdleTime());
+         if (maxNodes > 0 || maxIdle > 0)
+         {
+            EvictionPolicyConfig epc = getEvictionPolicyConfig(maxIdle, maxNodes);         
+            Region region = plainCache_.getRegion(getWebappFqn(), true);
+            region.setEvictionPolicy(epc);
+         }
+      }
+   }
+   
+   private EvictionPolicyConfig getEvictionPolicyConfig(int timeToLiveSeconds, int maxNodes)
+   {
+      LRUConfiguration epc = new LRUConfiguration();
+      epc.setEvictionPolicyClass(LRUPolicy.class.getName());
+      epc.setTimeToLiveSeconds(timeToLiveSeconds);
+      epc.setMaxNodes(maxNodes);
+      return epc;
+   }
 
 }

Modified: trunk/tomcat/src/resources/jbossweb-cluster-beans.xml
===================================================================
--- trunk/tomcat/src/resources/jbossweb-cluster-beans.xml	2007-12-12 23:20:07 UTC (rev 68208)
+++ trunk/tomcat/src/resources/jbossweb-cluster-beans.xml	2007-12-12 23:24:13 UTC (rev 68209)
@@ -70,6 +70,34 @@
                 </property>
       	</bean>
       </property>
+     
+      <!-- Enable eviction for use by FIELD granularity webapps. Can be
+           removed if FIELD granularity is not used -->
+      <property name="evictionConfig">
+          <bean name="TomcatClusteringEvictionConfig" class="org.jboss.cache.config.EvictionConfig">
+            <property name="defaultEvictionPolicyClass">org.jboss.cache.eviction.LRUPolicy</property>
+            <property name="wakeupIntervalSeconds">5</property>
+            <property name="evictionRegionConfigs">
+               <list>
+                  <!-- Default region will never timeout. Do not change this -->
+                  <bean name="TomcatClusteringDefaultEvictionRegionConfig" 
+                        class="org.jboss.cache.config.EvictionRegionConfig">
+                     <property name="regionName">/_default_</property>
+                     <property name="evictionPolicyConfig">
+                        <bean name="TomcatClusteringDefaultLRUConfig" 
+                              class="org.jboss.cache.eviction.LRUConfiguration">
+                              <property name="maxNodes">0</property>
+                              <property name="timeToLiveSeconds">0</property>
+                           </bean>
+                        </property>
+                  </bean>
+                  <!-- JBossWeb integration code may programatically create other
+                       regions as webapps are deployed -->
+               </list>
+         </property>
+         </bean>
+      </property>
+      
    </bean>
     
    <!-- Now we use the above configuration to construct the cache itself -->




More information about the jboss-cvs-commits mailing list