[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