[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