[Jboss-cvs] JBossAS SVN: r55526 - projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Aug 11 11:16:28 EDT 2006


Author: adrian at jboss.org
Date: 2006-08-11 11:16:26 -0400 (Fri, 11 Aug 2006)
New Revision: 55526

Modified:
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
Log:
[JBAS-1841] - Make the controller lock more fine grained
such the lock is not held during context callouts.

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2006-08-11 15:16:04 UTC (rev 55525)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2006-08-11 15:16:26 UTC (rev 55526)
@@ -21,7 +21,6 @@
 */
 package org.jboss.kernel.plugins.dependency;
 
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -89,7 +88,7 @@
          return null;
    }
 
-   public synchronized ControllerContext getContext(Object name, ControllerState state)
+   public ControllerContext getContext(Object name, ControllerState state)
    {
       ControllerContext context = super.getContext(name, state);
       if (context != null)
@@ -108,58 +107,72 @@
       return null;
    }
 
-   public synchronized void addSupplies(KernelControllerContext context)
+   public void addSupplies(KernelControllerContext context)
    {
       BeanMetaData metaData = context.getBeanMetaData();
-      Set supplies = metaData.getSupplies();
+      Set<SupplyMetaData> supplies = metaData.getSupplies();
       if (supplies != null)
       {
          boolean trace = log.isTraceEnabled();
 
          if (supplies.isEmpty() == false)
          {
-            for (Iterator i = supplies.iterator(); i.hasNext();)
+            lockWrite();
+            try
             {
-               SupplyMetaData supplied = (SupplyMetaData) i.next();
-               Object supply = supplied.getSupply();
-               List<KernelControllerContext> list = suppliers.get(supply);
-               if (list == null)
+               for (SupplyMetaData supplied : supplies)
                {
-                  list = CollectionsFactory.createCopyOnWriteList();
-                  suppliers.put(supply, list);
+                  Object supply = supplied.getSupply();
+                  List<KernelControllerContext> list = suppliers.get(supply);
+                  if (list == null)
+                  {
+                     list = CollectionsFactory.createCopyOnWriteList();
+                     suppliers.put(supply, list);
+                  }
+                  list.add(context);
+                  if (trace)
+                     log.trace("Suppliers of " + supply + ": " + list);
                }
-               list.add(context);
-               if (trace)
-                  log.trace("Suppliers of " + supply + ": " + list);
             }
+            finally
+            {
+               unlockWrite();
+            }
          }
       }
    }
 
-   public synchronized void removeSupplies(KernelControllerContext context)
+   public void removeSupplies(KernelControllerContext context)
    {
       BeanMetaData metaData = context.getBeanMetaData();
-      Set supplies = metaData.getSupplies();
+      Set<SupplyMetaData> supplies = metaData.getSupplies();
       if (supplies != null)
       {
          boolean trace = log.isTraceEnabled();
 
          if (supplies.isEmpty() == false)
          {
-            for (Iterator i = supplies.iterator(); i.hasNext();)
+            lockWrite();
+            try
             {
-               SupplyMetaData supplied = (SupplyMetaData) i.next();
-               Object supply = supplied.getSupply();
-               List<KernelControllerContext> list = suppliers.get(supply);
-               if (list != null)
+               for (SupplyMetaData supplied : supplies)
                {
-                  list.remove(context);
-                  if (list.isEmpty())
-                     suppliers.remove(supply);
-                  if (trace)
-                     log.trace("Suppliers of " + supply  + ": " + list);
+                  Object supply = supplied.getSupply();
+                  List<KernelControllerContext> list = suppliers.get(supply);
+                  if (list != null)
+                  {
+                     list.remove(context);
+                     if (list.isEmpty())
+                        suppliers.remove(supply);
+                     if (trace)
+                        log.trace("Suppliers of " + supply  + ": " + list);
+                  }
                }
             }
+            finally
+            {
+               unlockWrite();
+            }
          }
       }
    }




More information about the jboss-cvs-commits mailing list