[jboss-cvs] JBossAS SVN: r62480 - in projects/microcontainer/trunk: dependency/src/main/org/jboss/dependency/spi and 1 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Apr 23 08:31:01 EDT 2007
Author: alesj
Date: 2007-04-23 08:31:00 -0400 (Mon, 23 Apr 2007)
New Revision: 62480
Modified:
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java
projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/CallbackItem.java
projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java
Log:
Suppress callback exceptions, change uninstall order.
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractCallbackItem.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -53,7 +53,7 @@
this.dependentState = dependentState;
}
- public void ownerCallback(Controller controller) throws Throwable
+ public void ownerCallback(Controller controller, boolean isInstallPhase) throws Throwable
{
}
@@ -61,15 +61,16 @@
* Helper method.
*
* @param context changed context
+ * @param isInstallPhase install or uninstall phase
* @throws Throwable for any error
*/
- protected void changeCallback(ControllerContext context) throws Throwable
+ protected void changeCallback(ControllerContext context, boolean isInstallPhase) throws Throwable
{
}
- public void changeCallback(Controller controller, ControllerContext context) throws Throwable
+ public void changeCallback(Controller controller, ControllerContext context, boolean isInstallPhase) throws Throwable
{
- changeCallback(context);
+ changeCallback(context, isInstallPhase);
}
public T getIDependOn()
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -814,14 +814,14 @@
unlockWrite();
try
{
+ resolveCallbacks(context, fromState, false);
+
uninstall(context, fromState, toState);
Controller toController = context.getController();
Set<ControllerContext> toContexts = toController.getContextsByState(toState);
toContexts.add(context);
context.setState(toState);
-
- resolveCallbacks(context, fromState, false);
}
catch (Throwable t)
{
@@ -934,9 +934,8 @@
* @param execute do execute callback
* @param isInstallPhase install or uninstall phase
* @param type install or uninstall type
- * @throws Throwable for any error
*/
- protected void resolveCallbacks(Set<CallbackItem> callbacks, ControllerState state, boolean execute, boolean isInstallPhase, boolean type) throws Throwable
+ protected void resolveCallbacks(Set<CallbackItem> callbacks, ControllerState state, boolean execute, boolean isInstallPhase, boolean type)
{
if (callbacks != null && callbacks.isEmpty() == false)
{
@@ -953,7 +952,16 @@
removeCallback(callback.getIDependOn(), type, callback);
}
if (execute)
- callback.ownerCallback(this);
+ {
+ try
+ {
+ callback.ownerCallback(this, isInstallPhase);
+ }
+ catch (Throwable t)
+ {
+ log.warn("Broken callback: " + callback, t);
+ }
+ }
}
}
}
@@ -965,36 +973,52 @@
* @param context current context
* @param state current context state
* @param isInstallPhase install or uninstall phase
- * @throws Throwable for any error
*/
- protected void resolveCallbacks(ControllerContext context, ControllerState state, boolean isInstallPhase) throws Throwable
+ protected void resolveCallbacks(ControllerContext context, ControllerState state, boolean isInstallPhase)
{
- 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);
+ try
+ {
+ 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);
- // match callbacks by name
- Set<CallbackItem> existingCallbacks = getCallbacks(context.getName(), isInstallPhase);
- // match by classes
- Collection<Class<?>> classes = getClassesImplemented(context.getTarget());
- if (classes != null && classes.isEmpty() == false)
- {
- for (Class clazz : classes)
+ // match callbacks by name
+ Set<CallbackItem> existingCallbacks = getCallbacks(context.getName(), isInstallPhase);
+ // match by classes
+ Collection<Class<?>> classes = getClassesImplemented(context.getTarget());
+ if (classes != null && classes.isEmpty() == false)
{
- existingCallbacks.addAll(getCallbacks(clazz, isInstallPhase));
+ for (Class clazz : classes)
+ {
+ existingCallbacks.addAll(getCallbacks(clazz, isInstallPhase));
+ }
}
- }
- // Do the installs if we are at the required state
- if (existingCallbacks != null && existingCallbacks.isEmpty() == false)
- {
- 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()))
- callback.changeCallback(this, context);
+ for(CallbackItem callback : existingCallbacks)
+ {
+ if (state.equals(callback.getDependentState()))
+ {
+ try
+ {
+ callback.changeCallback(this, context, isInstallPhase);
+ }
+ catch (Throwable t)
+ {
+ log.warn("Broken callback: " + callback, t);
+ }
+ }
+ }
}
}
+ // let's make sure we suppress any exceptions
+ catch (Throwable t)
+ {
+ log.warn("Cannot resolve callbacks.", t);
+ }
}
/**
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AttributeCallbackItem.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -53,7 +53,7 @@
owner.set(attribute, target);
}
- protected void changeCallback(ControllerContext context) throws Throwable
+ protected void changeCallback(ControllerContext context, boolean isInstallPhase) throws Throwable
{
execute(context.getTarget());
}
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/OwnerCallbackItem.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -50,7 +50,14 @@
this.owner = owner;
}
- protected void addDependency(Controller controller, ControllerContext context)
+ /**
+ * Add dependency.
+ *
+ * @param controller the controller
+ * @param context changed context
+ * @param isInstallPhase install or uninstall phase
+ */
+ protected void addDependency(Controller controller, ControllerContext context, boolean isInstallPhase)
{
if (owner instanceof ControllerContext)
{
@@ -75,10 +82,10 @@
return null;
}
- public void changeCallback(Controller controller, ControllerContext context) throws Throwable
+ public void changeCallback(Controller controller, ControllerContext context, boolean isInstallPhase) throws Throwable
{
- super.changeCallback(controller, context);
- addDependency(controller, context);
+ super.changeCallback(controller, context, isInstallPhase);
+ addDependency(controller, context, isInstallPhase);
}
protected void toString(JBossStringBuilder buffer)
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/SingleCallbackItem.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -62,7 +62,7 @@
this.signature = signature;
}
- protected void changeCallback(ControllerContext context) throws Throwable
+ protected void changeCallback(ControllerContext context, boolean isInstallPhase) throws Throwable
{
Object target = context.getTarget();
if (target != null)
@@ -71,6 +71,8 @@
signature = target.getClass().getName();
owner.invoke(method, new Object[]{target}, new String[]{signature});
}
+ else
+ log.warn("Null target, cannot invoke non-static method: " + this);
}
protected void toString(JBossStringBuilder buffer)
Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/CallbackItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/CallbackItem.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/CallbackItem.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -57,16 +57,18 @@
* Execute callback when item added to controller.
*
* @param controller the controller
+ * @param isInstallPhase install or uninstall
* @throws Throwable for any error
*/
- void ownerCallback(Controller controller) throws Throwable;
+ void ownerCallback(Controller controller, boolean isInstallPhase) throws Throwable;
/**
* Execute callback with current changed context.
*
* @param controller the controller
* @param context the new context
+ * @param isInstallPhase install or uninstall
* @throws Throwable for any error
*/
- void changeCallback(Controller controller, ControllerContext context) throws Throwable;
+ void changeCallback(Controller controller, ControllerContext context, boolean isInstallPhase) throws Throwable;
}
Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java 2007-04-23 07:04:35 UTC (rev 62479)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java 2007-04-23 12:31:00 UTC (rev 62480)
@@ -57,7 +57,7 @@
*/
protected abstract T getCollectionParameterHolder();
- public void ownerCallback(Controller controller) throws Throwable
+ protected T fillHolder(Controller controller) throws Throwable
{
if (controller instanceof KernelController)
{
@@ -71,17 +71,23 @@
holder.add(context.getTarget());
}
}
- execute(holder);
+ return holder;
}
else
- {
- log.warn("Cannot execute Collection call back - controller not KernelController instance.");
- }
+ throw new IllegalArgumentException("Cannot execute Collection call back - controller not KernelController instance.");
}
- public void changeCallback(Controller controller, ControllerContext context) throws Throwable
+ public void ownerCallback(Controller controller, boolean isInstallPhase) throws Throwable
{
- ownerCallback(controller);
- addDependency(controller, context);
+ execute(fillHolder(controller));
}
+
+ public void changeCallback(Controller controller, ControllerContext context, boolean isInstallPhase) throws Throwable
+ {
+ T holder = fillHolder(controller);
+ if (isInstallPhase == false)
+ holder.remove(context.getTarget());
+ execute(holder);
+ addDependency(controller, context, isInstallPhase);
+ }
}
More information about the jboss-cvs-commits
mailing list