[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