[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