[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