[jboss-cvs] JBossAS SVN: r105908 - projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Jun 9 17:34:27 EDT 2010
Author: alesj
Date: 2010-06-09 17:34:27 -0400 (Wed, 09 Jun 2010)
New Revision: 105908
Modified:
projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java
Log:
Make it pckg private, better synching, TODO on caching.
Modified: projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java
===================================================================
--- projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2010-06-09 21:33:00 UTC (rev 105907)
+++ projects/jboss-cl/trunk/classloader/src/main/java/org/jboss/classloader/spi/base/ClassLoaderInformation.java 2010-06-09 21:34:27 UTC (rev 105908)
@@ -22,10 +22,7 @@
package org.jboss.classloader.spi.base;
import java.net.URL;
-import java.util.Collections;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CopyOnWriteArrayList;
@@ -52,11 +49,11 @@
/** The order */
private int order;
- /** The delegates */
- private Map<ImportType, List<DelegateLoader>> delegates;
-
/** The exports of the classloader */
private BaseDelegateLoader exported;
+
+ /** The delegates */
+ private volatile Map<ImportType, List<DelegateLoader>> delegates;
/** The class cache */
private Map<String, Loader> classCache;
@@ -95,10 +92,10 @@
List<? extends DelegateLoader> delegates = policy.getDelegates();
if (delegates != null && delegates.isEmpty() == false)
{
- this.delegates = new ConcurrentHashMap<ImportType, List<DelegateLoader>>();
+ Map<ImportType, List<DelegateLoader>> temp = new HashMap<ImportType, List<DelegateLoader>>();
// prepare ALL
List<DelegateLoader> all = new CopyOnWriteArrayList<DelegateLoader>();
- this.delegates.put(ImportType.ALL, all);
+ temp.put(ImportType.ALL, all);
for (DelegateLoader delegate : delegates)
{
@@ -106,11 +103,11 @@
throw new IllegalStateException(policy + " null delegate in " + delegates);
ImportType importType = delegate.getImportType();
- List<DelegateLoader> loaders = this.delegates.get(importType);
+ List<DelegateLoader> loaders = temp.get(importType);
if (loaders == null)
{
loaders = new CopyOnWriteArrayList<DelegateLoader>();
- this.delegates.put(importType, loaders);
+ temp.put(importType, loaders);
}
loaders.add(delegate); // add to specific type
all.add(delegate); // add to all
@@ -122,6 +119,8 @@
if (delegatePolicy == null || delegatePolicy.isBlackListable() == false)
canBlackList = false;
}
+
+ this.delegates = Collections.synchronizedMap(temp);
}
if (canCache)
@@ -223,24 +222,33 @@
*
* @param loader the delegate loader
*/
- public void addDelegate(DelegateLoader loader)
+ void addDelegate(DelegateLoader loader)
{
+ if (delegates == null)
+ delegates = Collections.synchronizedMap(new HashMap<ImportType, List<DelegateLoader>>());
+
ImportType type = loader.getImportType();
- List<DelegateLoader> list = delegates.get(type);
- if (list == null)
+ //noinspection SynchronizeOnNonFinalField
+ synchronized (delegates)
{
- list = new CopyOnWriteArrayList<DelegateLoader>();
- delegates.put(type, list);
+ List<DelegateLoader> list = delegates.get(type);
+ if (list == null)
+ {
+ list = new CopyOnWriteArrayList<DelegateLoader>();
+ delegates.put(type, list);
+ }
+ list.add(0, loader); // add at the begining
+ // all
+ List<DelegateLoader> all = delegates.get(ImportType.ALL);
+ if (all == null)
+ {
+ all = new CopyOnWriteArrayList<DelegateLoader>();
+ delegates.put(ImportType.ALL, all);
+ }
+ all.add(loader);
}
- list.add(0, loader); // add at the begining
- // all
- List<DelegateLoader> all = delegates.get(ImportType.ALL);
- if (all == null)
- {
- all = new CopyOnWriteArrayList<DelegateLoader>();
- delegates.put(ImportType.ALL, all);
- }
- all.add(loader);
+
+ // TODO -- fix caching, blacklisting
}
/**
@@ -248,22 +256,31 @@
*
* @param loader the delegate loader
*/
- public void removeDelegate(DelegateLoader loader)
+ void removeDelegate(DelegateLoader loader)
{
+ if (delegates == null)
+ return;
+
ImportType type = loader.getImportType();
- List<DelegateLoader> list = delegates.get(type);
- if (list != null)
+ //noinspection SynchronizeOnNonFinalField
+ synchronized (delegates)
{
- if (list.remove(loader) && list.isEmpty())
- delegates.remove(type);
+ List<DelegateLoader> list = delegates.get(type);
+ if (list != null)
+ {
+ if (list.remove(loader) && list.isEmpty())
+ delegates.remove(type);
+ }
+ // all
+ List<DelegateLoader> all = delegates.get(ImportType.ALL);
+ if (all != null)
+ {
+ if (all.remove(loader) && all.isEmpty())
+ delegates.remove(ImportType.ALL);
+ }
}
- // all
- List<DelegateLoader> all = delegates.get(ImportType.ALL);
- if (all != null)
- {
- if (all.remove(loader) && all.isEmpty())
- delegates.remove(ImportType.ALL);
- }
+
+ // TODO -- reset caching, blacklisting
}
/**
More information about the jboss-cvs-commits
mailing list