[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