[jboss-cvs] JBossAS SVN: r63940 - in projects/microcontainer/trunk: dependency/src/main/org/jboss/dependency/spi and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Jul 10 09:54:05 EDT 2007


Author: alesj
Date: 2007-07-10 09:54:04 -0400 (Tue, 10 Jul 2007)
New Revision: 63940

Modified:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java
   projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/deployer/kernel/DeploymentAliasMetaDataDeployer.java
   projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/AliasDeployerUnitTestCase.java
Log:
Alias as true dependency.

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-07-10 12:39:09 UTC (rev 63939)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java	2007-07-10 13:54:04 UTC (rev 63940)
@@ -27,6 +27,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.HashMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.CopyOnWriteArraySet;
@@ -35,11 +36,13 @@
 import org.jboss.dependency.spi.CallbackItem;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerContextActions;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyInfo;
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.dependency.spi.LifecycleCallbackItem;
+import org.jboss.dependency.plugins.action.ControllerContextAction;
 import org.jboss.util.JBossObject;
 
 /**
@@ -389,49 +392,17 @@
       return uninstall(name, 0);
    }
 
-   public void addAlias(Object alias, Object original)
+   public void addAlias(Object alias, Object original) throws Throwable
    {
-      Object jmxAlias = JMXObjectNameFix.needsAnAlias(alias);
-      if (jmxAlias != null)
-         alias = jmxAlias;
-
-      Object jmxOriginal = JMXObjectNameFix.needsAnAlias(original);
-      if (jmxOriginal != null)
-         original = jmxOriginal;
-
-      lockWrite();
-      try
-      {
-         ControllerContext context = getRegisteredControllerContext(original, true);
-         // todo - do we need to add it to context.aliases?
-         registerControllerContext(alias, context);
-         if (log.isTraceEnabled())
-            log.trace("Added alias " + alias + " for context " + context);
-         // try to resolve existing beans with new alias
-         resolveContexts(log.isTraceEnabled());
-      }
-      finally
-      {
-         unlockWrite();
-      }
+      Map<ControllerState, ControllerContextAction> map = new HashMap<ControllerState, ControllerContextAction>();
+      map.put(ControllerState.INSTALLED, new AliasControllerContextAction());
+      ControllerContextActions actions = new AbstractControllerContextActions(map);
+      install(new AliasControllerContext(alias, original, actions));
    }
 
    public void removeAlias(Object alias)
    {
-      lockWrite();
-      try
-      {
-         Object jmxAlias = JMXObjectNameFix.needsAnAlias(alias);
-         if (jmxAlias != null)
-            alias = jmxAlias;
-         unregisterControllerContext(alias);
-         if (log.isTraceEnabled())
-            log.trace("Removed alias " + alias);
-      }
-      finally
-      {
-         unlockWrite();
-      }
+      uninstall(alias + "_Alias");
    }
 
    // todo - some better way to find context's by name
@@ -1538,4 +1509,84 @@
          throw new IllegalArgumentException("Null name");
       allContexts.remove(name);
    }
+
+   // --- alias dependency
+
+   private class AliasControllerContext extends AbstractControllerContext
+   {
+      private Object alias;
+      private Object original;
+
+      public AliasControllerContext(Object alias, Object original, ControllerContextActions actions)
+      {
+         super(alias + "_Alias", actions);
+         this.alias = alias;
+         this.original = original;
+         DependencyInfo info = getDependencyInfo();
+         info.addIDependOn(new AbstractDependencyItem(alias, original, ControllerState.INSTALLED, ControllerState.INSTANTIATED));
+      }
+
+      public Object getAlias()
+      {
+         return alias;
+      }
+
+      public Object getOriginal()
+      {
+         return original;
+      }
+   }
+
+   private class AliasControllerContextAction implements ControllerContextAction
+   {
+      public void install(ControllerContext context) throws Throwable
+      {
+         AliasControllerContext acc = (AliasControllerContext)context;
+         Object alias = acc.getAlias();
+         Object jmxAlias = JMXObjectNameFix.needsAnAlias(alias);
+         if (jmxAlias != null)
+            alias = jmxAlias;
+
+         Object original = acc.getOriginal();
+         Object jmxOriginal = JMXObjectNameFix.needsAnAlias(original);
+         if (jmxOriginal != null)
+            original = jmxOriginal;
+
+         lockWrite();
+         try
+         {
+            ControllerContext lookup = getRegisteredControllerContext(original, true);
+            // todo - do we need to add it to context.aliases?
+            registerControllerContext(alias, lookup);
+            if (log.isTraceEnabled())
+               log.trace("Added alias " + alias + " for context " + context);
+            // try to resolve existing beans with new alias
+            resolveContexts(log.isTraceEnabled());
+         }
+         finally
+         {
+            unlockWrite();
+         }
+      }
+
+      public void uninstall(ControllerContext context)
+      {
+         lockWrite();
+         try
+         {
+            AliasControllerContext acc = (AliasControllerContext)context;
+            Object alias = acc.getAlias();
+            Object jmxAlias = JMXObjectNameFix.needsAnAlias(alias);
+            if (jmxAlias != null)
+               alias = jmxAlias;
+            unregisterControllerContext(alias);
+            if (log.isTraceEnabled())
+               log.trace("Removed alias " + alias);
+         }
+         finally
+         {
+            unlockWrite();
+         }
+      }
+   }
 }

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java	2007-07-10 12:39:09 UTC (rev 63939)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/Controller.java	2007-07-10 13:54:04 UTC (rev 63940)
@@ -77,17 +77,14 @@
     *
     * @param alias the alias to add
     * @param original original name
-    * @throws IllegalArgumentException for null parameters
-    * @throws IllegalStateException    if the context must exist is true and the context does not exist
-    *                                  if the context is already registered with that name
+    * @throws Throwable for any error
     */
-   void addAlias(Object alias, Object original);
+   void addAlias(Object alias, Object original) throws Throwable;
 
    /**
     * Remove alias.
     *
     * @param alias alias to remove
-    * @throws IllegalArgumentException for null parameters
     */
    void removeAlias(Object alias);
 

Modified: projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/deployer/kernel/DeploymentAliasMetaDataDeployer.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/deployer/kernel/DeploymentAliasMetaDataDeployer.java	2007-07-10 12:39:09 UTC (rev 63939)
+++ projects/microcontainer/trunk/deployers-vfs/src/main/org/jboss/deployers/vfs/deployer/kernel/DeploymentAliasMetaDataDeployer.java	2007-07-10 13:54:04 UTC (rev 63940)
@@ -58,7 +58,14 @@
    @Override
    public void deploy(DeploymentUnit unit, NamedAliasMetaData deployment) throws DeploymentException
    {
-      controller.addAlias(deployment.getAliasValue(), deployment.getName());
+      try
+      {
+         controller.addAlias(deployment.getAliasValue(), deployment.getName());
+      }
+      catch (Throwable t)
+      {
+         throw DeploymentException.rethrowAsDeploymentException("Error deploying alias: " + deployment.getName(), t);
+      }
    }
 
    @Override

Modified: projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/AliasDeployerUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/AliasDeployerUnitTestCase.java	2007-07-10 12:39:09 UTC (rev 63939)
+++ projects/microcontainer/trunk/deployers-vfs/src/tests/org/jboss/test/deployers/vfs/deployer/bean/test/AliasDeployerUnitTestCase.java	2007-07-10 13:54:04 UTC (rev 63940)
@@ -23,15 +23,14 @@
 
 import junit.framework.Test;
 import junit.framework.TestSuite;
+import org.jboss.dependency.spi.ControllerState;
 import org.jboss.deployers.vfs.deployer.kernel.AliasDeploymentDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.DeploymentAliasMetaDataDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.KernelDeploymentDeployer;
 import org.jboss.deployers.vfs.spi.client.VFSDeployment;
-import org.jboss.deployers.spi.DeploymentState;
 import org.jboss.kernel.Kernel;
-import org.jboss.dependency.spi.ControllerState;
 
 /**
  * AliasDeployerUnitTestCase.
@@ -100,7 +99,8 @@
    public void testAliasMissing() throws Exception
    {
       VFSDeployment context = createDeployment("/alias", "toplevel/aliases-beans.xml");
-      assertDeploy(context, DeploymentState.ERROR);
+      assertDeploy(context);
+      assertNotNull(controller.getContext("Injectee", ControllerState.INSTANTIATED));
       assertUndeploy(context);
       assertNull(controller.getContext("Test", null));
    }
@@ -122,7 +122,7 @@
       assertNull(controller.getContext("Test", null));
    }
 
-   public void testAliasDependency() throws Exception
+   public void testAliasDemand() throws Exception
    {
       VFSDeployment context = createDeployment("/alias", "toplevel/tomcat-beans.xml");
       assertDeploy(context);
@@ -141,4 +141,26 @@
       assertNull(controller.getContext("JBossWeb", null));
       assertNull(controller.getContext("ServiceX", null));
    }
+
+   public void testAliasDependency() throws Exception
+   {
+      VFSDeployment alias = createDeployment("/alias", "toplevel/servicex-beans.xml");
+      assertDeploy(alias);
+      assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED));
+
+      VFSDeployment context = createDeployment("/alias", "toplevel/tomcat-beans.xml");
+      assertDeploy(context);
+      assertNotNull(controller.getInstalledContext("Tomcat"));
+      assertNotNull(controller.getInstalledContext("JBossWeb"));
+      assertNotNull(controller.getInstalledContext("ServiceX"));
+
+      assertUndeploy(context);
+      assertNull(controller.getContext("Tomcat", null));
+      assertNull(controller.getContext("ServiceX", ControllerState.CREATE));
+      assertNotNull(controller.getContext("ServiceX", ControllerState.CONFIGURED));
+
+      assertUndeploy(alias);
+      assertNull(controller.getContext("JBossWeb", null));
+      assertNull(controller.getContext("ServiceX", null));
+   }
 }




More information about the jboss-cvs-commits mailing list