[jboss-cvs] JBossAS SVN: r62044 - in projects/microcontainer/trunk/dependency/src: tests/org/jboss/test/dependency/controller/test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Apr 3 12:12:18 EDT 2007


Author: adrian at jboss.org
Date: 2007-04-03 12:12:18 -0400 (Tue, 03 Apr 2007)
New Revision: 62044

Added:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/JMXObjectNameFix.java
   projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/CrossContextDependencyBadObjectName2TestCase.java
Modified:
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractControllerContext.java
   projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyItem.java
Log:
[JBMICROCONT-166] - Automatically add aliases for the canonical for
when a name looks like a JMX ObjectName and it is not canonical.

Hacked AbstractDependencyItem.setIDependOn() to also do the canonical mapping.

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 16:01:51 UTC (rev 62043)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractControllerContext.java	2007-04-03 16:12:18 UTC (rev 62044)
@@ -23,6 +23,8 @@
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.Set;
 
 import org.jboss.dependency.spi.Controller;
@@ -131,7 +133,7 @@
       else
         this.dependencies = dependencies;
       this.target = target;
-      this.aliases = aliases;
+      setAliases(aliases);
    }
 
    /**
@@ -178,7 +180,40 @@
     */
    public void setAliases(Set<Object> aliases)
    {
-      this.aliases = aliases;
+      // WARNING: This code is hack for backwards compatiblity
+      
+      // Here we fixup the aliases to map JMX like ObjectNames to their canonical form
+      // I've made it a protected method needsAnAlias so others can subclass and
+      // change the rules (including not doing this at all)
+      // NOTE: This method should be invoked from all constructors
+      if (aliases == null)
+      {
+         // There are no explicit aliases so just see whether the name is an ObjectName.
+         Object alias = needsAnAlias(name);
+         // No alias required
+         if (alias == null)
+            this.aliases = null;
+         else
+            // Add a single alias with canonical name
+            this.aliases = Collections.singleton(alias);
+      }
+      else
+      {
+         // Always clone the aliases passed it
+         this.aliases = new HashSet<Object>();
+         // Check the main name
+         Object alias = needsAnAlias(name);
+         if (alias != null)
+            this.aliases.add(alias);
+         // Check the aliases
+         for (Object passedAlias : aliases)
+         {
+            this.aliases.add(passedAlias);
+            alias = needsAnAlias(passedAlias);
+            if (alias != null)
+               this.aliases.add(alias);
+         }
+      }
    }
 
    public ControllerState getState()
@@ -316,4 +351,17 @@
       if (error != null)
          buffer.append(" error=").append(error.getClass().getName()).append(": ").append(error.getMessage());
    }
+   
+   /**
+    * Whether the given name needs an alias<p>
+    * 
+    * By default we just add aliases for JMX like ObjectNames to have a canonical name alias
+    * 
+    * @param original the original name
+    * @return the alias if required or null if no alias required
+    */
+   protected Object needsAnAlias(Object original)
+   {
+      return JMXObjectNameFix.needsAnAlias(original);
+   }
 }

Modified: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyItem.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyItem.java	2007-04-03 16:01:51 UTC (rev 62043)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/AbstractDependencyItem.java	2007-04-03 16:12:18 UTC (rev 62044)
@@ -75,7 +75,7 @@
    public AbstractDependencyItem(Object name, Object iDependOn, ControllerState whenRequired, ControllerState dependentState)
    {
       this.name = name;
-      this.iDependOn = iDependOn;
+      setIDependOn(iDependOn);
       this.whenRequired = whenRequired;
       this.dependentState = dependentState;
    }
@@ -206,6 +206,12 @@
    protected void setIDependOn(Object iDependOn)
    {
       this.iDependOn = iDependOn;
+      
+      // HACK: Try to fixup JMX like ObjectNames to their canonical name
+      Object fixup = JMXObjectNameFix.needsAnAlias(iDependOn);
+      if (fixup != null)
+         this.iDependOn = fixup;
+
       flushJBossObjectCache();
    }
 

Added: projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/JMXObjectNameFix.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/JMXObjectNameFix.java	                        (rev 0)
+++ projects/microcontainer/trunk/dependency/src/main/org/jboss/dependency/plugins/JMXObjectNameFix.java	2007-04-03 16:12:18 UTC (rev 62044)
@@ -0,0 +1,62 @@
+/*
+* 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.dependency.plugins;
+
+import javax.management.MalformedObjectNameException;
+import javax.management.ObjectName;
+
+/**
+ * Hacky Class to fixup "object names" to their canonical form
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 1.1 $
+ */
+public class JMXObjectNameFix
+{
+   /**
+    * Whether the given name needs an alias<p>
+    * 
+    * By default we just add aliases for JMX like ObjectNames to have a canonical name alias
+    * 
+    * @param original the original name
+    * @return the alias if required or null if no alias required
+    */
+   public static Object needsAnAlias(Object original)
+   {
+      // Not a string
+      if (original == null || original instanceof String == false)
+         return null;
+      
+      try
+      {
+         ObjectName canonical = ObjectName.getInstance((String) original);
+         String alias = canonical.getCanonicalName();
+         if (original.equals(alias) == false)
+            return alias;
+      }
+      catch (MalformedObjectNameException ignored)
+      {
+         // Not a JMX ObjectName
+      }
+      return null;
+   }
+}

Added: projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/CrossContextDependencyBadObjectName2TestCase.java
===================================================================
--- projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/CrossContextDependencyBadObjectName2TestCase.java	                        (rev 0)
+++ projects/microcontainer/trunk/dependency/src/tests/org/jboss/test/dependency/controller/test/CrossContextDependencyBadObjectName2TestCase.java	2007-04-03 16:12:18 UTC (rev 62044)
@@ -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;
+
+/**
+ * A CrossContext Dependency BadObjectName TestCase.
+ * 
+ * @author <a href="adrian at jboss.com">Adrian Brock</a>
+ * @version $Revision: 60558 $
+ */
+public class CrossContextDependencyBadObjectName2TestCase extends AbstractDependencyTest
+{
+   public static Test suite()
+   {
+      return suite(CrossContextDependencyBadObjectName2TestCase.class);
+   }
+   
+   public CrossContextDependencyBadObjectName2TestCase(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("test:a=1,b=2", 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("test:b=2,a=1");
+   }
+   
+   protected OtherDelegate getDelegate2()
+   {
+      OtherDelegate result = new OtherDelegate("Name2");
+      result.addDependency(new AbstractDependencyItem("Name2", "test:a=1,b=2", ControllerState.DESCRIBED, ControllerState.INSTALLED));
+      return result;
+   }
+}




More information about the jboss-cvs-commits mailing list