[jboss-cvs] JBossCache/src/org/jboss/cache/eviction ...
Brian Stansberry
brian.stansberry at jboss.com
Mon Oct 23 01:46:40 EDT 2006
User: bstansberry
Date: 06/10/23 01:46:40
Modified: src/org/jboss/cache/eviction RegionManager.java
Log:
[JBCACHE-809] Pojo-style configuration for use by Microcontainer
Revision Changes Path
1.24 +56 -138 JBossCache/src/org/jboss/cache/eviction/RegionManager.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: RegionManager.java
===================================================================
RCS file: /cvsroot/jboss/JBossCache/src/org/jboss/cache/eviction/RegionManager.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -b -r1.23 -r1.24
--- RegionManager.java 12 Oct 2006 23:03:58 -0000 1.23
+++ RegionManager.java 23 Oct 2006 05:46:40 -0000 1.24
@@ -13,16 +13,16 @@
import org.jboss.cache.CacheSPI;
import org.jboss.cache.Fqn;
import org.jboss.cache.TreeCache;
-import org.jboss.cache.config.ConfigurationException;
+import org.jboss.cache.config.EvictionConfig;
+import org.jboss.cache.config.EvictionConfig.EvictionRegionConfig;
import org.jboss.cache.optimistic.FqnComparator;
-import org.jboss.cache.xml.XmlHelper;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
import java.util.Map;
import java.util.Timer;
@@ -34,7 +34,7 @@
*
* @author Ben Wang 02-2004
* @author Daniel Huang (dhuang at jboss.org)
- * @version $Id: RegionManager.java,v 1.23 2006/10/12 23:03:58 msurtani Exp $
+ * @version $Id: RegionManager.java,v 1.24 2006/10/23 05:46:40 bstansberry Exp $
*/
public class RegionManager
{
@@ -53,7 +53,7 @@
private Timer evictionThread_;
private EvictionTimerTask evictionTimerTask_;
- private int evictionThreadWakeupIntervalSeconds_;
+ private EvictionConfig config_;
private TreeCache cache_;
/**
@@ -68,7 +68,7 @@
public int getEvictionThreadWakeupIntervalSeconds()
{
- return evictionThreadWakeupIntervalSeconds_;
+ return (config_ == null ? 0 : config_.getWakeupIntervalSeconds());
}
/**
@@ -116,25 +116,35 @@
}
}
- /**
- * Create a region based on fqn.
- *
- * @param fqn The region identifier.
- * @param regionConfig The XML configuration DOM Element for this region.
- * @throws RegionNameConflictException
- */
- public Region createRegion(String fqn, Element regionConfig)
- throws RegionNameConflictException
+ public Region createRegion(EvictionRegionConfig config) throws RegionNameConflictException
+ {
+ return createRegion(config.getRegionFqn(), config);
+ }
+
+ public Region createRegion(Fqn fqn, EvictionRegionConfig config) throws RegionNameConflictException
+ {
+ EvictionPolicy policy = null;
+ try
+ {
+ policy = (EvictionPolicy) loadClass(config.getEvictionPolicyClass()).newInstance();
+ }
+ catch (RuntimeException e)
{
- return createRegion(Fqn.fromString(fqn), regionConfig);
+ throw e;
+ }
+ catch (Exception e)
+ {
+ throw new RuntimeException("Failed to create EvictionPolicy " +
+ config.getEvictionPolicyClass(), e);
}
- public Region createRegion(Fqn fqn, Element regionConfig)
- throws RegionNameConflictException
+ policy.configure(cache_);
+ return createRegion(fqn, policy, config.getEvictionConfiguration());
+ }
+
+ public Region createRegion(String fqn, EvictionRegionConfig config) throws RegionNameConflictException
{
- EvictionPolicy policy = this.createEvictionPolicy(regionConfig);
- EvictionConfiguration config = this.configureEvictionPolicy(policy, regionConfig);
- return this.createRegion(fqn, policy, config);
+ return createRegion(Fqn.fromString(fqn), config);
}
public Region createRegion(String fqn, EvictionPolicy policy, EvictionConfiguration config) throws RegionNameConflictException
@@ -163,8 +173,10 @@
}
cache_ = cache;
+ config_ = cache_.getConfiguration().getEvictionConfig();
+
// done for API 1.2 backwards compatibility for EJB3 integration.
- String evictionClass = cache_.getConfiguration().getEvictionPolicyClass();
+ String evictionClass = config_.getDefaultEvictionPolicyClass();
if (evictionClass != null && evictionClass.length() != 0)
{
try
@@ -182,43 +194,29 @@
EvictionTreeCacheListener listener = new EvictionTreeCacheListener();
cache_.getNotifier().setEvictionPolicyListener(listener);
- Element elem = cache_.getConfiguration().getEvictionPolicyConfig();
- String temp = XmlHelper.getTagContents(elem,
- EvictionConfiguration.WAKEUP_INTERVAL_SECONDS, EvictionConfiguration.ATTR, EvictionConfiguration.NAME);
-
- if (temp == null)
+ List regions = config_.getEvictionRegionConfigs();
+ if (regions != null)
{
- evictionThreadWakeupIntervalSeconds_ = EvictionConfiguration.WAKEUP_DEFAULT;
- }
- else
- {
- evictionThreadWakeupIntervalSeconds_ = Integer.parseInt(temp);
- }
-
- if (evictionThreadWakeupIntervalSeconds_ <= 0)
- evictionThreadWakeupIntervalSeconds_ = EvictionConfiguration.WAKEUP_DEFAULT;
-
- NodeList list = elem.getElementsByTagName(EvictionConfiguration.REGION);
- for (int i = 0; i < list.getLength(); i++)
+ for (Iterator iter = regions.iterator(); iter.hasNext();)
{
- org.w3c.dom.Node node = list.item(i);
- if (node.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE)
- continue;
- Element element = (Element) node;
- String name = element.getAttribute(EvictionConfiguration.NAME);
+ EvictionRegionConfig erc = (EvictionRegionConfig) iter.next();
try
{
- this.createRegion(name, element);
+ createRegion(erc);
}
catch (RegionNameConflictException e)
{
throw new RuntimeException(
- "Illegal region name specified for eviction policy " + name
+ "Illegal region name specified for eviction policy " + erc.getRegionName()
+ " exception: " + e);
}
-
+ }
+ }
}
+ public EvictionConfig getEvictionConfig()
+ {
+ return config_;
}
/**
@@ -370,86 +368,6 @@
this.cache_ = cache;
}
- private EvictionConfiguration configureEvictionPolicy(EvictionPolicy policy, Element regionConfig)
- {
- try
- {
- EvictionConfiguration configuration =
- (EvictionConfiguration) policy.getEvictionConfigurationClass().newInstance();
- configuration.parseXMLConfig(regionConfig);
- return configuration;
- }
- catch (ConfigurationException e)
- {
- throw new RuntimeException("Error configuring Eviction Policy", e);
- }
- catch (Exception e)
- {
- throw new RuntimeException("Eviction configuration class is not properly loaded in classloader", e);
- }
- }
-
- private EvictionPolicy createEvictionPolicy(Element regionConfig)
- {
-
- // use the eviction policy class specified per region or use the one specified for the entire cache.
- // this maintains JBCache configuration backwards compatibility. The old style configuration
- // where there is only one Policy for all Regions will still work. We can also now support
- // a different policy per MarshRegion (new style configuration - version 1.3+).
- String evictionClass = regionConfig.getAttribute(EvictionConfiguration.REGION_POLICY_CLASS);
- if (evictionClass == null || evictionClass.length() == 0)
- {
- evictionClass = cache_.getConfiguration().getEvictionPolicyClass();
- // if it's still null... what do we configure?
- if (evictionClass == null || evictionClass.length() == 0)
- {
- throw new RuntimeException(
- "There is no Eviction Policy Class specified on the region or for the entire cache!");
- }
-
-// return this.policy_;
- }
-
- try
- {
- if (log_.isTraceEnabled())
- {
- log_.trace("Creating policy " + evictionClass);
- }
- EvictionPolicy policy = (EvictionPolicy) loadClass(evictionClass).newInstance();
- policy.configure(cache_);
- return policy;
- }
- catch (Exception e)
- {
- throw new RuntimeException("Eviction class is not properly loaded in classloader", e);
- }
- }
-
- public static boolean isUsingNewStyleConfiguration(Element evictionRegionConfigElem)
- {
- if (evictionRegionConfigElem == null)
- {
- return false;
- }
-
- NodeList list = evictionRegionConfigElem.getElementsByTagName(EvictionConfiguration.REGION);
- for (int i = 0; i < list.getLength(); i++)
- {
- org.w3c.dom.Node node = list.item(i);
- if (node.getNodeType() != org.w3c.dom.Node.ELEMENT_NODE)
- continue;
- Element element = (Element) node;
- String evictionClass = element.getAttribute(EvictionConfiguration.REGION_POLICY_CLASS);
- if (evictionClass != null && evictionClass.trim().length() > 0)
- {
- return true;
- }
- }
-
- return false;
- }
-
public String toString()
{
return super.toString() + " regions=" + regionMap_;
More information about the jboss-cvs-commits
mailing list