[jboss-cvs] JBossAS SVN: r100775 - in projects/kernel/trunk/dependency/src: test/java/org/jboss/test/dependency/controller/benchmark and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Feb 9 14:19:29 EST 2010


Author: kabir.khan at jboss.com
Date: 2010-02-09 14:19:29 -0500 (Tue, 09 Feb 2010)
New Revision: 100775

Modified:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
   projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/AbstractSimpleBenchmark.java
   projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/SimpleBenchmarkWrongOrder.java
Log:
[JBKERNEL-92] Don't set/unset TCCL unless there actually are some callbacks in resolveCallbacks()

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2010-02-09 19:17:39 UTC (rev 100774)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2010-02-09 19:19:29 UTC (rev 100775)
@@ -1747,18 +1747,33 @@
    }
 
    /**
-    * Get calbacks from context.
+    * Get calbacks from context for the given state.
     *
     * @param context current context
+    * @param state the state
     * @param isInstallPhase install or uninstall phase
-    * @return callback items from dependency info
+    * @return callback items from dependency info or null if no items could be found
     */
-   protected Set<CallbackItem<?>> getDependencyCallbacks(ControllerContext context, boolean isInstallPhase)
+   protected Set<CallbackItem<?>> getDependencyCallbacksForState(ControllerContext context, ControllerState state, boolean isInstallPhase)
    {
       DependencyInfo di = context.getDependencyInfo();
       if (di != null)
       {
-         return isInstallPhase ? di.getInstallItems() : di.getUninstallItems();
+         Set<CallbackItem<?>> items = isInstallPhase ? di.getInstallItems() : di.getUninstallItems();
+         if (items == null || items.isEmpty())
+            return null;
+         
+         Set<CallbackItem<?>> result = null;
+         for (CallbackItem<?> item : items)
+         {
+            if (item.getWhenRequired().equals(state))
+            {
+               if (result == null)
+                  result = new HashSet<CallbackItem<?>>();
+               result.add(item);
+            }
+         }
+         return result;
       }
       return null;
    }
@@ -1788,11 +1803,12 @@
    /**
     * Resolve callbacks.
     *
-    * @param callbacks the callbacks
+    * @param callbacks the callbacks for the given state
     * @param state current context state
     * @param execute do execute callback
     * @param isInstallPhase install or uninstall phase
     * @param type install or uninstall type
+    * @throws IllegalStateException if the callbacks do not have the current context state
     */
    protected void resolveCallbacks(Set<CallbackItem<?>> callbacks, ControllerState state, boolean execute, boolean isInstallPhase, boolean type)
    {
@@ -1800,27 +1816,27 @@
       {
          for (CallbackItem<?> callback : callbacks)
          {
-            if (callback.getWhenRequired().equals(state))
+            if (callback.getWhenRequired().equals(state) == false)
+               throw new IllegalArgumentException(callback + " does not have the required state " + state);
+            
+            if (isInstallPhase)
             {
-               if (isInstallPhase)
+               addCallback(callback.getIDependOn(), type, callback);
+            }
+            else
+            {
+               removeCallback(callback.getIDependOn(), type, callback);
+            }
+            if (execute)
+            {
+               try
                {
-                  addCallback(callback.getIDependOn(), type, callback);
+                  callback.ownerCallback(this, isInstallPhase);
                }
-               else
+               catch (Throwable t)
                {
-                  removeCallback(callback.getIDependOn(), type, callback);
+                  log.warn("Broken callback: " + callback, t);
                }
-               if (execute)
-               {
-                  try
-                  {
-                     callback.ownerCallback(this, isInstallPhase);
-                  }
-                  catch (Throwable t)
-                  {
-                     log.warn("Broken callback: " + callback, t);
-                  }
-               }
             }
          }
       }
@@ -1838,19 +1854,17 @@
       ClassLoader previous = null;
       try
       {
-         previous = SecurityActions.setContextClassLoader(context);
          // existing owner callbacks
-         Set<CallbackItem<?>> installs = getDependencyCallbacks(context, true);
-         resolveCallbacks(installs, state, isInstallPhase, isInstallPhase, true);
-         Set<CallbackItem<?>> uninstalls = getDependencyCallbacks(context, false);
-         resolveCallbacks(uninstalls, state, isInstallPhase == false, isInstallPhase, false);
+         Set<CallbackItem<?>> installs = getDependencyCallbacksForState(context, state, true);
+         Set<CallbackItem<?>> uninstalls = getDependencyCallbacksForState(context, state, false);
 
          // change callbacks, applied only if context is autowire candidate
+         Set<CallbackItem<?>> existingCallbacks = null;
          DependencyInfo dependencyInfo = context.getDependencyInfo();
          if (dependencyInfo != null && dependencyInfo.isAutowireCandidate())
          {
             // match callbacks by name
-            Set<CallbackItem<?>> existingCallbacks = new HashSet<CallbackItem<?>>();
+            existingCallbacks = new HashSet<CallbackItem<?>>();
             existingCallbacks.addAll(getCallbacks(context.getName(), isInstallPhase));
             // match by classes
             Collection<Class<?>> classes = getExposedClasses(context);
@@ -1861,22 +1875,36 @@
                   existingCallbacks.addAll(getCallbacks(clazz, isInstallPhase));
                }
             }
-
-            // Do the installs if we are at the required state
-            if (existingCallbacks != null && existingCallbacks.isEmpty() == false)
+            
+            if (existingCallbacks.isEmpty())
+               existingCallbacks = null;
+         }
+         
+         if (installs != null || uninstalls != null || existingCallbacks != null)
+         {
+            previous = SecurityActions.setContextClassLoader(context);
+            if (installs != null)
+               resolveCallbacks(installs, state, isInstallPhase, isInstallPhase, true);
+            if (uninstalls != null)
+               resolveCallbacks(uninstalls, state, isInstallPhase == false, isInstallPhase, false);
+            if (existingCallbacks != null)
             {
-               for(CallbackItem<?> callback : existingCallbacks)
+               // Do the installs if we are at the required state
+               if (existingCallbacks != null && existingCallbacks.isEmpty() == false)
                {
-                  if (state.equals(callback.getDependentState()))
+                  for(CallbackItem<?> callback : existingCallbacks)
                   {
-                     try
+                     if (state.equals(callback.getDependentState()))
                      {
-                        callback.changeCallback(this, context, isInstallPhase);
+                        try
+                        {
+                           callback.changeCallback(this, context, isInstallPhase);
+                        }
+                        catch (Throwable t)
+                        {
+                           log.warn("Broken callback: " + callback, t);
+                        }
                      }
-                     catch (Throwable t)
-                     {
-                        log.warn("Broken callback: " + callback, t);
-                     }
                   }
                }
             }
@@ -1893,7 +1921,7 @@
             SecurityActions.resetContextClassLoader(previous);
       }
    }
-
+   
    /**
     * Handle install lifecycle callbacks.
     *

Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/AbstractSimpleBenchmark.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/AbstractSimpleBenchmark.java	2010-02-09 19:17:39 UTC (rev 100774)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/AbstractSimpleBenchmark.java	2010-02-09 19:19:29 UTC (rev 100775)
@@ -34,7 +34,7 @@
  */
 public abstract class AbstractSimpleBenchmark extends AbstractDependencyTest
 {
-   protected final int iterations = 2000;
+   protected int iterations = 2000;
    
    public AbstractSimpleBenchmark(String name)
    {

Modified: projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/SimpleBenchmarkWrongOrder.java
===================================================================
--- projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/SimpleBenchmarkWrongOrder.java	2010-02-09 19:17:39 UTC (rev 100774)
+++ projects/kernel/trunk/dependency/src/test/java/org/jboss/test/dependency/controller/benchmark/SimpleBenchmarkWrongOrder.java	2010-02-09 19:19:29 UTC (rev 100775)
@@ -40,6 +40,7 @@
    public SimpleBenchmarkWrongOrder(String name)
    {
       super(name);
+      iterations = 500;
    }
 
    protected List<ControllerContext> setupContexts()




More information about the jboss-cvs-commits mailing list