[jboss-cvs] JBossAS SVN: r93938 - branches/JBPAPP_4_2_0_GA_CP/jmx/src/main/org/jboss/mx/loading.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Sep 22 19:49:43 EDT 2009


Author: jason.greene at jboss.com
Date: 2009-09-22 19:49:43 -0400 (Tue, 22 Sep 2009)
New Revision: 93938

Modified:
   branches/JBPAPP_4_2_0_GA_CP/jmx/src/main/org/jboss/mx/loading/RepositoryClassLoader.java
Log:
JBPAPP-1474 Add a LRU blacklist mode


Modified: branches/JBPAPP_4_2_0_GA_CP/jmx/src/main/org/jboss/mx/loading/RepositoryClassLoader.java
===================================================================
--- branches/JBPAPP_4_2_0_GA_CP/jmx/src/main/org/jboss/mx/loading/RepositoryClassLoader.java	2009-09-22 22:01:49 UTC (rev 93937)
+++ branches/JBPAPP_4_2_0_GA_CP/jmx/src/main/org/jboss/mx/loading/RepositoryClassLoader.java	2009-09-22 23:49:43 UTC (rev 93938)
@@ -32,10 +32,14 @@
 import java.security.Policy;
 import java.security.ProtectionDomain;
 import java.security.cert.Certificate;
+import java.util.AbstractSet;
 import java.util.Enumeration;
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.Vector;
 import java.util.Collections;
+import java.util.LinkedHashMap;
+import java.util.Map;
 import java.util.Set;
 
 import javax.management.MalformedObjectNameException;
@@ -91,7 +95,6 @@
    private int loadClassDepth;
    
    // Static --------------------------------------------------------
-   
    // Constructors --------------------------------------------------
    
    /**
@@ -106,16 +109,33 @@
       this.parent = parent;
       // Check the blacklist mode
       String mode = ClassToStringAction.getProperty("org.jboss.mx.loading.blacklistMode", null);
-      if( mode == null || mode.equalsIgnoreCase("HashSet") )
+      
+      int max = 1000;
+      try
       {
+         String maxStr = ClassToStringAction.getProperty("org.jboss.mx.loading.blacklistMax", null);
+         if (maxStr != null)
+            max = Integer.parseInt(maxStr);
+      }
+      catch (NumberFormatException ne)
+      {
+      }
+
+      if( mode == null || mode.equalsIgnoreCase("HashSet"))
+      {
          classBlackList = Collections.synchronizedSet(new HashSet());
          resourceBlackList = Collections.synchronizedSet(new HashSet());
       }
-      else if( mode.equalsIgnoreCase("SoftSet") )
+      else if( mode.equalsIgnoreCase("SoftSet"))
       {
          classBlackList = Collections.synchronizedSet(new SoftSet());
          resourceBlackList = Collections.synchronizedSet(new SoftSet());
       }
+      else if (mode.equals("LRUSet"))
+      {
+         classBlackList = Collections.synchronizedSet(new LRUSet(max));
+         resourceBlackList = Collections.synchronizedSet(new LRUSet(max));
+      }
    }
    
    // Public --------------------------------------------------------
@@ -973,4 +993,52 @@
    }
 
    // Inner classes -------------------------------------------------
+   static class LRUSet extends AbstractSet
+   {
+      private static Object DUMMY = new Object();
+
+      private int max;
+
+      private Map map = new LinkedHashMap(16, .75f, true) {
+         protected boolean removeEldestEntry(Map.Entry eldest)
+         {
+            return size() > max;
+         }
+      };
+
+      public LRUSet(int max)
+      {
+         this.max = max;
+      }
+
+      public boolean add(Object o)
+      {
+         return map.put(o, DUMMY) == null;
+      }
+
+      public void clear()
+      {
+         map.clear();
+      }
+
+      public boolean contains(Object o)
+      {
+         return map.get(o) == DUMMY;
+      }
+
+      public boolean remove(Object o)
+      {
+         return map.remove(o) == DUMMY;
+      }
+
+      public int size()
+      {
+         return map.size();
+      }
+
+      public Iterator iterator()
+      {
+         return map.keySet().iterator();
+      }
+   }
 }




More information about the jboss-cvs-commits mailing list