[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