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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Apr 3 11:03:28 EDT 2007


Author: adrian at jboss.org
Date: 2007-04-03 11:03:28 -0400 (Tue, 03 Apr 2007)
New Revision: 62039

Added:
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/MockControllerContextActions.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasDependencyTestCase.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasUnitTestCase.java
Modified:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractControllerContext.java
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/ControllerContext.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestControllerContext.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestDelegate.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/ControllerTestSuite.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java
   projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/registry/AbstractKernelRegistryEntry.java
Log:
[JBMICROCONT-171] - Static aliases defined by the ControllerContext

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-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractController.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -118,13 +118,13 @@
    //      4) Error handling?
    public void addControllerContext(ControllerContext context)
    {
-      registerControllerContext(context.getName(), context);
+      registerControllerContext(context);
    }
 
    // TODO This api looks broken and unsafe see above
    public void removeControllerContext(ControllerContext context)
    {
-      unregisterControllerContext(context.getName());
+      unregisterControllerContext(context);
    }
 
    public Set<AbstractController> getControllers()
@@ -289,7 +289,7 @@
 
             try
             {
-               unregisterControllerContext(name);
+               unregisterControllerContext(context);
             }
             catch (Throwable t)
             {
@@ -329,8 +329,20 @@
       {
          Object name = context.getName();
 
+         // Check the name is not already registered
          if (getRegisterControllerContext(name, false) != null)
             throw new IllegalStateException(name + " is already installed.");
+         
+         // Check any alias is not already registered
+         Set<Object> aliases = context.getAliases();
+         if (aliases != null && aliases.isEmpty() == false)
+         {
+            for (Object alias : aliases)
+            {
+               if (getRegisterControllerContext(alias, false) != null)
+                  throw new IllegalStateException(alias + " an alias of " + name + " is already installed.");
+            }
+         }
 
          if (ControllerMode.AUTOMATIC.equals(context.getMode()))
             context.setRequiredState(ControllerState.INSTALLED);
@@ -357,7 +369,7 @@
          {
             try
             {
-               registerControllerContext(name, context);
+               registerControllerContext(context);
             }
             catch (Throwable t)
             {
@@ -915,10 +927,115 @@
    }
 
    /**
-    * Register a context<p>
+    * Register a context and all its aliases<p>
     * 
     * This method must be invoked with the write lock taken
     * 
+    * @param context the context to register
+    * @throws IllegalArgumentException for null parameters
+    * @throws IllegalStateException if the context is already registered with that name or alias
+    */
+   protected void registerControllerContext(ControllerContext context)
+   {
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+
+      Set<Object> aliases = context.getAliases();
+      
+      // Register the context
+      Object name = context.getName();
+      registerControllerContext(name, context);
+
+      // Register the aliases
+      if (aliases != null && aliases.isEmpty() == false)
+      {
+         int ok = 0;
+         try
+         {
+            for (Object alias : aliases)
+            {
+               registerControllerContext(alias, context);
+               ++ok;
+            }
+         }
+         finally
+         {
+            // It didn't work
+            if (ok != aliases.size() && ok > 0)
+            {
+               // Unregister the aliases we added
+               for (Object alias : aliases)
+               {
+                  if (ok-- == 0)
+                     break;
+                  try
+                  {
+                     unregisterControllerContext(alias);
+                  }
+                  catch (Throwable ignored)
+                  {
+                     log.debug("Error unregistering alias: " + alias, ignored);
+                  }
+               }
+               
+               // Unregister the context
+               try
+               {
+                  unregisterControllerContext(name);
+               }
+               catch (Throwable ignored)
+               {
+                  log.debug("Error unregistering context with name: " + name, ignored);
+               }
+            }
+         }
+      }
+   }
+
+   /**
+    * Unregister a context and all its aliases<p>
+    * 
+    * This method must be invoked with the write lock taken
+    * 
+    * @param context the context
+    * @throws IllegalArgumentException for null parameters
+    * @throws IllegalStateException if the context is not registered
+    */
+   protected void unregisterControllerContext(ControllerContext context)
+   {
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+
+      Set<Object> aliases = context.getAliases();
+      
+      // Unregister the context
+      Object name = context.getName();
+      unregisterControllerContext(name);
+
+      // Unegister the aliases
+      if (aliases != null && aliases.isEmpty() == false)
+      {
+         for (Object alias : aliases)
+         {
+            try
+            {
+               unregisterControllerContext(alias);
+            }
+            catch (Throwable ignored)
+            {
+               log.debug("Error unregistering alias: " + alias, ignored);
+            }
+         }
+      }
+   }
+
+   /**
+    * Register a context<p>
+    * 
+    * This method must be invoked with the write lock taken<p>
+    * 
+    * NOTE: You probably want to use the {@link #registerControllerContext(ControllerContext)}
+    * 
     * @param name the name with which to register it
     * @param context the context to register
     * @throws IllegalArgumentException for null parameters
@@ -940,8 +1057,10 @@
    /**
     * Unregister a context<p>
     * 
-    * This method must be invoked with the write lock taken
+    * This method must be invoked with the write lock taken<p>
     * 
+    * NOTE: You probably want to use the {@link #unregisterControllerContext(ControllerContext)}
+    * 
     * @param name the name it was registered with
     * @throws IllegalArgumentException for null parameters
     */

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractControllerContext.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractControllerContext.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractControllerContext.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -23,6 +23,7 @@
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.Set;
 
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
@@ -44,6 +45,9 @@
    /** The name */
    private Object name;
 
+   /** The aliases */
+   private Set<Object> aliases;
+   
    /** The target */
    private Object target;
 
@@ -76,7 +80,7 @@
     */
    public AbstractControllerContext(Object name, ControllerContextActions actions)
    {
-      this(name, actions, null, null);
+      this(name, null, actions, null, null);
    }
 
    /**
@@ -88,7 +92,7 @@
     */
    public AbstractControllerContext(Object name, ControllerContextActions actions, DependencyInfo dependencies)
    {
-      this(name, actions, dependencies, null);
+      this(name, null, actions, dependencies, null);
    }
 
    /**
@@ -101,6 +105,20 @@
     */
    public AbstractControllerContext(Object name, ControllerContextActions actions, DependencyInfo dependencies, Object target)
    {
+      this(name, null, actions, dependencies, target);
+   }
+
+   /**
+    * Create a new AbstractControllerContext.
+    * 
+    * @param name the name
+    * @param aliases the aliases
+    * @param actions the actions
+    * @param dependencies the dependencies
+    * @param target the target
+    */
+   public AbstractControllerContext(Object name, Set<Object> aliases, ControllerContextActions actions, DependencyInfo dependencies, Object target)
+   {
       if (name == null)
          throw new IllegalArgumentException("Null name");
       if (actions == null)
@@ -113,6 +131,7 @@
       else
         this.dependencies = dependencies;
       this.target = target;
+      this.aliases = aliases;
    }
 
    /**
@@ -145,6 +164,23 @@
       this.name = name;
    }
    
+   public Set<Object> getAliases()
+   {
+      return aliases;
+   }
+   
+   /**
+    * Set the aliases<p>
+    * 
+    * Aliases in this list only take effect if they are set before installation on the controller
+    * 
+    * @param aliases the aliases
+    */
+   public void setAliases(Set<Object> aliases)
+   {
+      this.aliases = aliases;
+   }
+
    public ControllerState getState()
    {
       return state;
@@ -243,6 +279,8 @@
    public void toString(JBossStringBuilder buffer)
    {
       buffer.append("name=").append(name);
+      if (aliases != null)
+         buffer.append(" aliases=").append(aliases);
       buffer.append(" target=").append(target);
       if (error != null || state.equals(ControllerState.ERROR) == false)
          buffer.append(" state=").append(state.getStateString());
@@ -266,6 +304,8 @@
    public void toShortString(JBossStringBuilder buffer)
    {
       buffer.append("name=").append(name);
+      if (aliases != null)
+         buffer.append(" aliases=").append(aliases);
       if (error != null || state.equals(ControllerState.ERROR) == false)
          buffer.append(" state=").append(state.getStateString());
       if (ControllerMode.AUTOMATIC.equals(mode) == false)

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/ControllerContext.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/ControllerContext.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/spi/ControllerContext.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -21,6 +21,8 @@
 */
 package org.jboss.dependency.spi;
 
+import java.util.Set;
+
 import org.jboss.util.JBossInterface;
 
 /**
@@ -39,6 +41,13 @@
    Object getName();
 
    /**
+    * The aliases
+    * 
+    * @return the aliases or null if there are no aliases
+    */
+   Set<Object> getAliases();
+   
+   /**
     * Get the dependency information
     * 
     * @return the dependency information

Added: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/MockControllerContextActions.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/MockControllerContextActions.java	                        (rev 0)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/MockControllerContextActions.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -0,0 +1,45 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.support;
+
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerContextActions;
+import org.jboss.dependency.spi.ControllerState;
+
+/**
+ * Actions that don't do anything
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class MockControllerContextActions implements ControllerContextActions
+{
+   public void install(ControllerContext context, ControllerState fromState, ControllerState toState) throws Throwable
+   {
+      // Mock
+   }
+
+   public void uninstall(ControllerContext context, ControllerState fromState, ControllerState toState)
+   {
+      // Mock
+   }
+}

Modified: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestControllerContext.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestControllerContext.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestControllerContext.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -62,6 +62,7 @@
    {
       super(delegate.getName(), actions, delegate.dependencies);
       setMode(delegate.mode);
+      setAliases(delegate.getAliases());
       this.delegate = delegate;
    }
    

Modified: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestDelegate.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestDelegate.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/support/TestDelegate.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -21,6 +21,9 @@
 */
 package org.jboss.test.dependency.controller.support;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import org.jboss.dependency.plugins.AbstractDependencyInfo;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.DependencyItem;
@@ -35,6 +38,8 @@
 {
    private Object name;
    
+   private Set<Object> aliases;
+   
    public AbstractDependencyInfo dependencies = new AbstractDependencyInfo();
 
    public ControllerMode mode = ControllerMode.AUTOMATIC;
@@ -54,7 +59,18 @@
    
    public TestDelegate(Object name)
    {
+      this(name, null);
+   }
+   
+   public TestDelegate(Object name, Object... aliases)
+   {
       this.name = name;
+      if (aliases != null)
+      {
+         this.aliases = new HashSet<Object>();
+         for (int i = 0; i < aliases.length; ++i)
+            this.aliases.add(aliases[i]);
+      }
    }
    
    public Object getName()
@@ -62,6 +78,11 @@
       return name;
    }
    
+   public Set<Object> getAliases()
+   {
+      return aliases;
+   }
+   
    public void describeInstall()
    {
       describeInstallOrder = order.increment();

Modified: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AbstractDependencyTest.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -21,12 +21,17 @@
 */
 package org.jboss.test.dependency.controller.test;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.dependency.plugins.AbstractControllerContext;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.test.AbstractTestCaseWithSetup;
 import org.jboss.test.AbstractTestDelegate;
+import org.jboss.test.dependency.controller.support.MockControllerContextActions;
 import org.jboss.test.dependency.controller.support.Ordering;
 import org.jboss.test.dependency.controller.support.OtherControllerContext;
 import org.jboss.test.dependency.controller.support.OtherDelegate;
@@ -80,6 +85,11 @@
       return context;
    }
 
+   protected void install(ControllerContext context) throws Throwable
+   {
+      controller.install(context);
+   }
+
    protected void assertInstall(ControllerContext context, ControllerState expected) throws Throwable
    {
       controller.install(context);
@@ -118,6 +128,11 @@
    {
       assertContext(context, ControllerState.ERROR);
    }
+
+   protected void assertNoContext(Object name) throws Throwable
+   {
+      assertNull(controller.getContext(name, null));
+   }
    
    protected void assertUninstall(ControllerContext context) throws Throwable
    {
@@ -125,6 +140,30 @@
       assertEquals(ControllerState.ERROR, context.getState());
    }
    
+   protected Set<Object> createAliases(Object... aliases)
+   {
+      if (aliases == null)
+         return null;
+      HashSet<Object> result = new HashSet<Object>(aliases.length);
+      for (int i = 0; i < aliases.length; ++i)
+         result.add(aliases[i]);
+      return result;
+   }
+   
+   protected ControllerContext createControllerContext(Object name, Object... aliases)
+   {
+      AbstractControllerContext result = new AbstractControllerContext(name, new MockControllerContextActions());
+      result.setAliases(createAliases(aliases));
+      return result;
+   }
+   
+   protected ControllerContext assertCreateInstall(Object name, Object... aliases) throws Throwable
+   {
+      ControllerContext context = createControllerContext(name, aliases);
+      assertInstall(context, ControllerState.INSTALLED);
+      return context;
+   }
+
    /**
     * Default setup with security manager enabled
     * 

Added: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasDependencyTestCase.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasDependencyTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasDependencyTestCase.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -0,0 +1,260 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.test;
+
+import junit.framework.Test;
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.test.dependency.controller.support.OtherDelegate;
+import org.jboss.test.dependency.controller.support.TestDelegate;
+
+/**
+ * AliasDependencyTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 60558 $
+ */
+public class AliasDependencyTestCase extends AbstractDependencyTest
+{
+   public static Test suite()
+   {
+      return suite(AliasDependencyTestCase.class);
+   }
+   
+   public AliasDependencyTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testDependencyCorrectOrder() throws Throwable
+   {
+      TestDelegate delegate1 = getDelegate1();
+      assertInstall(delegate1);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(2, delegate1.instantiateInstallOrder);
+      assertEquals(3, delegate1.configureInstallOrder);
+      assertEquals(4, delegate1.createInstallOrder);
+      assertEquals(5, delegate1.startInstallOrder);
+      assertEquals(6, delegate1.installInstallOrder);
+      assertEquals(-1, delegate1.installUninstallOrder);
+      assertEquals(-1, delegate1.startUninstallOrder);
+      assertEquals(-1, delegate1.createUninstallOrder);
+      assertEquals(-1, delegate1.configureUninstallOrder);
+      assertEquals(-1, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      OtherDelegate delegate2 = getDelegate2();
+      assertInstall(delegate2);
+      assertEquals(7, delegate2.describeInstallOrder);
+      assertEquals(8, delegate2.instantiateInstallOrder);
+      assertEquals(9, delegate2.configureInstallOrder);
+      assertEquals(10, delegate2.createInstallOrder);
+      assertEquals(11, delegate2.startInstallOrder);
+      assertEquals(12, delegate2.installInstallOrder);
+      assertEquals(-1, delegate2.installUninstallOrder);
+      assertEquals(-1, delegate2.startUninstallOrder);
+      assertEquals(-1, delegate2.createUninstallOrder);
+      assertEquals(-1, delegate2.configureUninstallOrder);
+      assertEquals(-1, delegate2.instantiateUninstallOrder);
+      assertEquals(-1, delegate2.describeUninstallOrder);
+   }
+   
+   public void testDependencyWrongOrder() throws Throwable
+   {
+      OtherDelegate delegate2 = getDelegate2();
+      ControllerContext context2 = assertInstall(delegate2, ControllerState.PRE_INSTALL);
+      assertEquals(-1, delegate2.describeInstallOrder);
+      assertEquals(-1, delegate2.instantiateInstallOrder);
+      assertEquals(-1, delegate2.configureInstallOrder);
+      assertEquals(-1, delegate2.createInstallOrder);
+      assertEquals(-1, delegate2.startInstallOrder);
+      assertEquals(-1, delegate2.installInstallOrder);
+      assertEquals(-1, delegate2.installUninstallOrder);
+      assertEquals(-1, delegate2.startUninstallOrder);
+      assertEquals(-1, delegate2.createUninstallOrder);
+      assertEquals(-1, delegate2.configureUninstallOrder);
+      assertEquals(-1, delegate2.instantiateUninstallOrder);
+      assertEquals(-1, delegate2.describeUninstallOrder);
+      TestDelegate delegate1 = getDelegate1();
+      assertInstall(delegate1);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(2, delegate1.instantiateInstallOrder);
+      assertEquals(3, delegate1.configureInstallOrder);
+      assertEquals(4, delegate1.createInstallOrder);
+      assertEquals(5, delegate1.startInstallOrder);
+      assertEquals(6, delegate1.installInstallOrder);
+      assertEquals(-1, delegate1.installUninstallOrder);
+      assertEquals(-1, delegate1.startUninstallOrder);
+      assertEquals(-1, delegate1.createUninstallOrder);
+      assertEquals(-1, delegate1.configureUninstallOrder);
+      assertEquals(-1, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      assertContext(context2);
+      assertEquals(7, delegate2.describeInstallOrder);
+      assertEquals(8, delegate2.instantiateInstallOrder);
+      assertEquals(9, delegate2.configureInstallOrder);
+      assertEquals(10, delegate2.createInstallOrder);
+      assertEquals(11, delegate2.startInstallOrder);
+      assertEquals(12, delegate2.installInstallOrder);
+      assertEquals(-1, delegate2.installUninstallOrder);
+      assertEquals(-1, delegate2.startUninstallOrder);
+      assertEquals(-1, delegate2.createUninstallOrder);
+      assertEquals(-1, delegate2.configureUninstallOrder);
+      assertEquals(-1, delegate2.instantiateUninstallOrder);
+      assertEquals(-1, delegate2.describeUninstallOrder);
+   }
+   
+   public void testDependencyReinstall() throws Throwable
+   {
+      TestDelegate delegate1 = getDelegate1();
+      ControllerContext context1 = assertInstall(delegate1);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(2, delegate1.instantiateInstallOrder);
+      assertEquals(3, delegate1.configureInstallOrder);
+      assertEquals(4, delegate1.createInstallOrder);
+      assertEquals(5, delegate1.startInstallOrder);
+      assertEquals(6, delegate1.installInstallOrder);
+      assertEquals(-1, delegate1.installUninstallOrder);
+      assertEquals(-1, delegate1.startUninstallOrder);
+      assertEquals(-1, delegate1.createUninstallOrder);
+      assertEquals(-1, delegate1.configureUninstallOrder);
+      assertEquals(-1, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      OtherDelegate delegate2 = getDelegate2();
+      ControllerContext context2 = assertInstall(delegate2);
+      assertEquals(7, delegate2.describeInstallOrder);
+      assertEquals(8, delegate2.instantiateInstallOrder);
+      assertEquals(9, delegate2.configureInstallOrder);
+      assertEquals(10, delegate2.createInstallOrder);
+      assertEquals(11, delegate2.startInstallOrder);
+      assertEquals(12, delegate2.installInstallOrder);
+      assertEquals(-1, delegate2.installUninstallOrder);
+      assertEquals(-1, delegate2.startUninstallOrder);
+      assertEquals(-1, delegate2.createUninstallOrder);
+      assertEquals(-1, delegate2.configureUninstallOrder);
+      assertEquals(-1, delegate2.instantiateUninstallOrder);
+      assertEquals(-1, delegate2.describeUninstallOrder);
+      assertUninstall(context2);
+      assertEquals(7, delegate2.describeInstallOrder);
+      assertEquals(8, delegate2.instantiateInstallOrder);
+      assertEquals(9, delegate2.configureInstallOrder);
+      assertEquals(10, delegate2.createInstallOrder);
+      assertEquals(11, delegate2.startInstallOrder);
+      assertEquals(12, delegate2.installInstallOrder);
+      assertEquals(13, delegate2.installUninstallOrder);
+      assertEquals(14, delegate2.startUninstallOrder);
+      assertEquals(15, delegate2.createUninstallOrder);
+      assertEquals(16, delegate2.configureUninstallOrder);
+      assertEquals(17, delegate2.instantiateUninstallOrder);
+      assertEquals(18, delegate2.describeUninstallOrder);
+      assertContext("Name1", ControllerState.INSTALLED);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(2, delegate1.instantiateInstallOrder);
+      assertEquals(3, delegate1.configureInstallOrder);
+      assertEquals(4, delegate1.createInstallOrder);
+      assertEquals(5, delegate1.startInstallOrder);
+      assertEquals(6, delegate1.installInstallOrder);
+      assertEquals(-1, delegate1.installUninstallOrder);
+      assertEquals(-1, delegate1.startUninstallOrder);
+      assertEquals(-1, delegate1.createUninstallOrder);
+      assertEquals(-1, delegate1.configureUninstallOrder);
+      assertEquals(-1, delegate1.instantiateUninstallOrder);
+      assertEquals(-1, delegate1.describeUninstallOrder);
+      context2 = assertInstall(delegate2);
+      assertEquals(19, delegate2.describeInstallOrder);
+      assertEquals(20, delegate2.instantiateInstallOrder);
+      assertEquals(21, delegate2.configureInstallOrder);
+      assertEquals(22, delegate2.createInstallOrder);
+      assertEquals(23, delegate2.startInstallOrder);
+      assertEquals(24, delegate2.installInstallOrder);
+      assertEquals(13, delegate2.installUninstallOrder);
+      assertEquals(14, delegate2.startUninstallOrder);
+      assertEquals(15, delegate2.createUninstallOrder);
+      assertEquals(16, delegate2.configureUninstallOrder);
+      assertEquals(17, delegate2.instantiateUninstallOrder);
+      assertEquals(18, delegate2.describeUninstallOrder);
+      assertUninstall(context1);
+      assertEquals(1, delegate1.describeInstallOrder);
+      assertEquals(2, delegate1.instantiateInstallOrder);
+      assertEquals(3, delegate1.configureInstallOrder);
+      assertEquals(4, delegate1.createInstallOrder);
+      assertEquals(5, delegate1.startInstallOrder);
+      assertEquals(6, delegate1.installInstallOrder);
+      assertEquals(31, delegate1.installUninstallOrder);
+      assertEquals(32, delegate1.startUninstallOrder);
+      assertEquals(33, delegate1.createUninstallOrder);
+      assertEquals(34, delegate1.configureUninstallOrder);
+      assertEquals(35, delegate1.instantiateUninstallOrder);
+      assertEquals(36, delegate1.describeUninstallOrder);
+      assertContext("Name2", ControllerState.PRE_INSTALL);
+      assertEquals(19, delegate2.describeInstallOrder);
+      assertEquals(20, delegate2.instantiateInstallOrder);
+      assertEquals(21, delegate2.configureInstallOrder);
+      assertEquals(22, delegate2.createInstallOrder);
+      assertEquals(23, delegate2.startInstallOrder);
+      assertEquals(24, delegate2.installInstallOrder);
+      assertEquals(25, delegate2.installUninstallOrder);
+      assertEquals(26, delegate2.startUninstallOrder);
+      assertEquals(27, delegate2.createUninstallOrder);
+      assertEquals(28, delegate2.configureUninstallOrder);
+      assertEquals(29, delegate2.instantiateUninstallOrder);
+      assertEquals(30, delegate2.describeUninstallOrder);
+      assertInstall(delegate1);
+      assertEquals(37, delegate1.describeInstallOrder);
+      assertEquals(38, delegate1.instantiateInstallOrder);
+      assertEquals(39, delegate1.configureInstallOrder);
+      assertEquals(40, delegate1.createInstallOrder);
+      assertEquals(41, delegate1.startInstallOrder);
+      assertEquals(42, delegate1.installInstallOrder);
+      assertEquals(31, delegate1.installUninstallOrder);
+      assertEquals(32, delegate1.startUninstallOrder);
+      assertEquals(33, delegate1.createUninstallOrder);
+      assertEquals(34, delegate1.configureUninstallOrder);
+      assertEquals(35, delegate1.instantiateUninstallOrder);
+      assertEquals(36, delegate1.describeUninstallOrder);
+      assertContext("Name2", ControllerState.INSTALLED);
+      assertEquals(43, delegate2.describeInstallOrder);
+      assertEquals(44, delegate2.instantiateInstallOrder);
+      assertEquals(45, delegate2.configureInstallOrder);
+      assertEquals(46, delegate2.createInstallOrder);
+      assertEquals(47, delegate2.startInstallOrder);
+      assertEquals(48, delegate2.installInstallOrder);
+      assertEquals(25, delegate2.installUninstallOrder);
+      assertEquals(26, delegate2.startUninstallOrder);
+      assertEquals(27, delegate2.createUninstallOrder);
+      assertEquals(28, delegate2.configureUninstallOrder);
+      assertEquals(29, delegate2.instantiateUninstallOrder);
+      assertEquals(30, delegate2.describeUninstallOrder);
+   }
+   
+   protected TestDelegate getDelegate1()
+   {
+      return new TestDelegate("Name1", "Alias1");
+   }
+   
+   protected OtherDelegate getDelegate2()
+   {
+      OtherDelegate result = new OtherDelegate("Name2");
+      result.addDependency(new AbstractDependencyItem("Name2", "Alias1", ControllerState.DESCRIBED, ControllerState.INSTALLED));
+      return result;
+   }
+}

Added: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasUnitTestCase.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasUnitTestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/AliasUnitTestCase.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -0,0 +1,93 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.test.dependency.controller.test;
+
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+
+import junit.framework.Test;
+
+/**
+ * AliasUnitTestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class AliasUnitTestCase extends AbstractDependencyTest
+{
+   public static Test suite()
+   {
+      return suite(AliasUnitTestCase.class);
+   }
+   
+   public AliasUnitTestCase(String name)
+   {
+      super(name);
+   }
+   
+   public void testSimpleAlias() throws Throwable
+   {
+      ControllerContext original = assertCreateInstall("Name1", "Alias1");
+      try
+      {
+          ControllerContext ctx = assertContext("Alias1", ControllerState.INSTALLED);
+          assertEquals("Name1", ctx.getName());
+      }
+      finally
+      {
+         try
+         {
+            assertUninstall(original);
+         }
+         finally
+         {
+            assertNoContext("Alias1");
+         }
+      }
+   }
+   
+   public void testAliasAlreadyInstalled() throws Throwable
+   {
+      ControllerContext alreadyDone = assertCreateInstall("AlreadyDone");
+      try
+      {
+         ControllerContext broken = createControllerContext("Name1", "AlreadyDone");
+         try
+         {
+            install(broken);
+         }
+         catch (Throwable t)
+         {
+            checkThrowable(IllegalStateException.class, t);
+         }
+         assertNoContext("Name1");
+         
+         ControllerContext notAlias = assertContext("AlreadyDone", ControllerState.INSTALLED);
+         assertEquals("AlreadyDone", notAlias.getName());
+      }
+      finally
+      {
+         assertUninstall(alreadyDone);
+      }
+      assertCreateInstall("Name1", "AlreadyDone");
+   }
+}

Modified: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/ControllerTestSuite.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/ControllerTestSuite.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/ControllerTestSuite.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -53,6 +53,7 @@
       suite.addTest(RecursiveControllerActionTestCase.suite());
       suite.addTest(ErrorControllerActionTestCase.suite());
       suite.addTest(CrossContextDependencyBadObjectNameTestCase.suite());
+      suite.addTest(AliasDependencyTestCase.suite());
       
       return suite;
    }

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/dependency/ScopedKernelController.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -91,13 +91,13 @@
    public void addControllerContext(ControllerContext context)
    {
       underlyingController.removeControllerContext(context);
-      registerControllerContext(context.getName(), context);
+      registerControllerContext(context);
    }
 
    // TODO See comments on super implementation
    public void removeControllerContext(ControllerContext context)
    {
-      unregisterControllerContext(context.getName());
+      unregisterControllerContext(context);
       underlyingController.addControllerContext(context);
    }
 

Modified: projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/registry/AbstractKernelRegistryEntry.java
===================================================================
--- projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/registry/AbstractKernelRegistryEntry.java	2007-04-03 15:02:42 UTC (rev 62038)
+++ projects/microcontainer/trunk/kernel/src/main/org/jboss/kernel/plugins/registry/AbstractKernelRegistryEntry.java	2007-04-03 15:03:28 UTC (rev 62039)
@@ -21,6 +21,8 @@
 */
 package org.jboss.kernel.plugins.registry;
 
+import java.util.Set;
+
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
@@ -77,6 +79,11 @@
       flushJBossObjectCache();
    }
 
+   public Set<Object> getAliases()
+   {
+      return null;
+   }
+
    public Object getTarget()
    {
       return target;




More information about the jboss-cvs-commits mailing list