[jboss-cvs] JBossAS SVN: r96066 - in projects/jboss-deployers/trunk: deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support and 3 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Thu Nov 5 13:58:43 EST 2009
Author: kabir.khan at jboss.com
Date: 2009-11-05 13:58:42 -0500 (Thu, 05 Nov 2009)
New Revision: 96066
Added:
projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NotUndeployingSpecialControllerContextCreator.java
projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/UndeployingSpecialControllerContextCreator.java
Modified:
projects/jboss-deployers/trunk/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/KernelControllerContextCreator.java
projects/jboss-deployers/trunk/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataDeployer.java
projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NoopControllerContextCreator.java
projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SpecialControllerContextCreator.java
projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelControllerContextCreatorTestCase.java
projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/deployer/bean/test/BootstrapKernelControllerContextCreatorTestCase.xml
Log:
[JBDEPLOY-219] Extend KernelControllerContextCreator to handle uninstalls of specially created contexts
Modified: projects/jboss-deployers/trunk/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataDeployer.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataDeployer.java 2009-11-05 18:21:29 UTC (rev 96065)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataDeployer.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -22,9 +22,10 @@
package org.jboss.deployers.vfs.deployer.kernel;
import java.util.ArrayList;
-import java.util.Collection;
import java.util.Collections;
import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
@@ -42,8 +43,6 @@
import org.jboss.kernel.Kernel;
import org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext;
import org.jboss.kernel.spi.dependency.KernelControllerContext;
-import org.jboss.metadata.spi.scope.Scope;
-import org.jboss.metadata.spi.scope.ScopeKey;
/**
* BeanMetaDataDeployer.<p>
@@ -65,6 +64,9 @@
private ReadWriteLock lock = new ReentrantReadWriteLock();
+ /** Records which KernelContextCreator was used to deploy a context */
+ private Map<String, KernelControllerContextCreator> deployedWithControllerContextCreator = new ConcurrentHashMap<String, KernelControllerContextCreator>();
+
/**
* Create a new BeanDeployer.
*
@@ -201,7 +203,10 @@
{
KernelControllerContext context = creator.createContext(controller, unit, deployment);
if (context != null)
+ {
+ deployedWithControllerContextCreator.put(deployment.getName(), creator);
return context;
+ }
}
}
finally
@@ -215,7 +220,16 @@
@Override
public void undeploy(DeploymentUnit unit, BeanMetaData deployment)
{
- controller.uninstall(deployment.getName());
+ KernelControllerContextCreator creator = deployedWithControllerContextCreator.remove(deployment.getName());
+ boolean uninstalled = false;
+ if (creator != null)
+ {
+ uninstalled = creator.uninstallContext(controller, unit, deployment);
+ }
+ if (!uninstalled)
+ {
+ controller.uninstall(deployment.getName());
+ }
// Remove any classloader metadata we added (not necessary if we clone above)
ClassLoaderMetaData classLoader = deployment.getClassLoader();
Modified: projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NoopControllerContextCreator.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NoopControllerContextCreator.java 2009-11-05 18:21:29 UTC (rev 96065)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NoopControllerContextCreator.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -67,4 +67,9 @@
{
return order;
}
+
+ public boolean uninstallContext(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
+ {
+ throw new IllegalStateException("Should not be called since NoopCCC never creates any deployments");
+ }
}
Added: projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NotUndeployingSpecialControllerContextCreator.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NotUndeployingSpecialControllerContextCreator.java (rev 0)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NotUndeployingSpecialControllerContextCreator.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -0,0 +1,63 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.deployers.vfs.deployer.bean.support;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class NotUndeployingSpecialControllerContextCreator extends SpecialControllerContextCreator
+{
+ private List<String> undeployedNames = new ArrayList<String>();
+
+ public NotUndeployingSpecialControllerContextCreator()
+ {
+ // FIXME NotUndeployingSpecialControllerContextCreator constructor
+ super();
+ }
+
+ public NotUndeployingSpecialControllerContextCreator(int order)
+ {
+ // FIXME NotUndeployingSpecialControllerContextCreator constructor
+ super(order);
+ }
+
+ public boolean uninstallContext(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
+ {
+ undeployedNames.add(beanMetaData.getName());
+ return false;
+ }
+
+ public List<String> getUndeployedNames()
+ {
+ return undeployedNames;
+ }
+
+}
Modified: projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SpecialControllerContextCreator.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SpecialControllerContextCreator.java 2009-11-05 18:21:29 UTC (rev 96065)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SpecialControllerContextCreator.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -21,6 +21,9 @@
*/
package org.jboss.test.deployers.vfs.deployer.bean.support;
+import java.util.ArrayList;
+import java.util.List;
+
import org.jboss.beans.info.spi.BeanInfo;
import org.jboss.beans.metadata.spi.BeanMetaData;
import org.jboss.dependency.spi.Controller;
@@ -34,7 +37,7 @@
* @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
* @version $Revision: 1.1 $
*/
-public class SpecialControllerContextCreator implements KernelControllerContextCreator
+public abstract class SpecialControllerContextCreator implements KernelControllerContextCreator
{
public static final String TRIGGER = "TriggerSpecialControllerContextCreator";
@@ -59,7 +62,6 @@
public static class SpecialControllerContext extends AbstractKernelControllerContext
{
-
protected SpecialControllerContext(BeanInfo info, BeanMetaData metaData, Object target)
{
// FIXME SpecialControllerContext constructor
@@ -72,5 +74,6 @@
{
return order;
}
+
}
Added: projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/UndeployingSpecialControllerContextCreator.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/UndeployingSpecialControllerContextCreator.java (rev 0)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/UndeployingSpecialControllerContextCreator.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -0,0 +1,62 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file 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.deployers.vfs.deployer.bean.support;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.deployers.structure.spi.DeploymentUnit;
+
+/**
+ *
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class UndeployingSpecialControllerContextCreator extends SpecialControllerContextCreator
+{
+ private List<String> undeployedNames = new ArrayList<String>();
+
+ public UndeployingSpecialControllerContextCreator()
+ {
+ super();
+ }
+
+ public UndeployingSpecialControllerContextCreator(int order)
+ {
+ super(order);
+ }
+
+ public boolean uninstallContext(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
+ {
+ undeployedNames.add(beanMetaData.getName());
+ controller.uninstall(beanMetaData.getName());
+ return false;
+ }
+
+ public List<String> getUndeployedNames()
+ {
+ return undeployedNames;
+ }
+
+}
Modified: projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelControllerContextCreatorTestCase.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelControllerContextCreatorTestCase.java 2009-11-05 18:21:29 UTC (rev 96065)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelControllerContextCreatorTestCase.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -34,8 +34,10 @@
import org.jboss.test.deployers.support.TCCLClassLoaderDeployer;
import org.jboss.test.deployers.vfs.deployer.AbstractDeployerUnitTest;
import org.jboss.test.deployers.vfs.deployer.bean.support.NoopControllerContextCreator;
+import org.jboss.test.deployers.vfs.deployer.bean.support.NotUndeployingSpecialControllerContextCreator;
import org.jboss.test.deployers.vfs.deployer.bean.support.SpecialControllerContextCreator;
import org.jboss.test.deployers.vfs.deployer.bean.support.TriggerSpecialControllerContextDeployer;
+import org.jboss.test.deployers.vfs.deployer.bean.support.UndeployingSpecialControllerContextCreator;
/**
*
@@ -110,7 +112,7 @@
NoopControllerContextCreator.getTriggered().clear();
NoopControllerContextCreator noop1 = new NoopControllerContextCreator(1);
beanMetaDataDeployer.addControllerContextCreator(noop1);
- SpecialControllerContextCreator special = new SpecialControllerContextCreator(2);
+ NotUndeployingSpecialControllerContextCreator special = new NotUndeployingSpecialControllerContextCreator(2);
beanMetaDataDeployer.addControllerContextCreator(special);
NoopControllerContextCreator noop2 = new NoopControllerContextCreator(3);
beanMetaDataDeployer.addControllerContextCreator(noop2);
@@ -128,6 +130,7 @@
assertEquals(AbstractKernelControllerContext.class, test.getClass());
assertUndeploy(context);
assertNull(controller.getContext("Test", null));
+ assertEmpty(special.getUndeployedNames());
}
finally
{
@@ -137,14 +140,14 @@
}
}
- public void testSpecialControllerContextCreatorTriggered() throws Throwable
+ public void testSpecialControllerContextCreatorTriggeredButNotHandlingUndeploy() throws Throwable
{
NoopControllerContextCreator.getTriggered().clear();
addDeployer(main, new TriggerSpecialControllerContextDeployer());
NoopControllerContextCreator noop1 = new NoopControllerContextCreator(1);
beanMetaDataDeployer.addControllerContextCreator(noop1);
- SpecialControllerContextCreator special = new SpecialControllerContextCreator(2);
+ NotUndeployingSpecialControllerContextCreator special = new NotUndeployingSpecialControllerContextCreator(2);
beanMetaDataDeployer.addControllerContextCreator(special);
NoopControllerContextCreator noop2 = new NoopControllerContextCreator(3);
beanMetaDataDeployer.addControllerContextCreator(noop2);
@@ -160,8 +163,11 @@
ControllerContext test = controller.getInstalledContext("Test");
assertNotNull(test);
assertEquals(SpecialControllerContextCreator.SpecialControllerContext.class, test.getClass());
+ assertFalse(special.getUndeployedNames().contains("Test"));
assertUndeploy(context);
assertNull(controller.getContext("Test", null));
+ assertEquals(1, special.getUndeployedNames().size());
+ assertTrue(special.getUndeployedNames().contains("Test"));
}
finally
{
@@ -171,6 +177,43 @@
}
}
+ public void testSpecialControllerContextCreatorTriggeredAndHandlingUndeploy() throws Throwable
+ {
+ NoopControllerContextCreator.getTriggered().clear();
+ addDeployer(main, new TriggerSpecialControllerContextDeployer());
+
+ NoopControllerContextCreator noop1 = new NoopControllerContextCreator(1);
+ beanMetaDataDeployer.addControllerContextCreator(noop1);
+ UndeployingSpecialControllerContextCreator special = new UndeployingSpecialControllerContextCreator(2);
+ beanMetaDataDeployer.addControllerContextCreator(special);
+ NoopControllerContextCreator noop2 = new NoopControllerContextCreator(3);
+ beanMetaDataDeployer.addControllerContextCreator(noop2);
+ try
+ {
+ VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml");
+ assertDeploy(context);
+
+ assertEquals(1, NoopControllerContextCreator.getTriggered().size());
+ assertTrue(NoopControllerContextCreator.getTriggered().contains(1));
+ assertFalse(NoopControllerContextCreator.getTriggered().contains(3));
+
+ ControllerContext test = controller.getInstalledContext("Test");
+ assertNotNull(test);
+ assertEquals(SpecialControllerContextCreator.SpecialControllerContext.class, test.getClass());
+ assertFalse(special.getUndeployedNames().contains("Test"));
+ assertUndeploy(context);
+ assertNull(controller.getContext("Test", null));
+ assertEquals(1, special.getUndeployedNames().size());
+ assertTrue(special.getUndeployedNames().contains("Test"));
+ }
+ finally
+ {
+ beanMetaDataDeployer.removeControllerContextCreator(noop1);
+ beanMetaDataDeployer.removeControllerContextCreator(special);
+ beanMetaDataDeployer.removeControllerContextCreator(noop2);
+ }
+ }
+
public void testControllerContextOrder() throws Throwable
{
NoopControllerContextCreator.getTriggered().clear();
Modified: projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/deployer/bean/test/BootstrapKernelControllerContextCreatorTestCase.xml
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/deployer/bean/test/BootstrapKernelControllerContextCreatorTestCase.xml 2009-11-05 18:21:29 UTC (rev 96065)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/resources/org/jboss/test/deployers/vfs/deployer/bean/test/BootstrapKernelControllerContextCreatorTestCase.xml 2009-11-05 18:58:42 UTC (rev 96066)
@@ -1,4 +1,4 @@
<deployment xmlns="urn:jboss:bean-deployer:2.0">
- <bean name="SpecialControllerContextCreator" class="org.jboss.test.deployers.vfs.deployer.bean.support.SpecialControllerContextCreator"/>
+ <bean name="SpecialControllerContextCreator" class="org.jboss.test.deployers.vfs.deployer.bean.support.NotUndeployingSpecialControllerContextCreator"/>
<bean name="TriggerSpecialControllerContextDeployer" class="org.jboss.test.deployers.vfs.deployer.bean.support.TriggerSpecialControllerContextDeployer"/>
</deployment>
Modified: projects/jboss-deployers/trunk/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/KernelControllerContextCreator.java
===================================================================
--- projects/jboss-deployers/trunk/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/KernelControllerContextCreator.java 2009-11-05 18:21:29 UTC (rev 96065)
+++ projects/jboss-deployers/trunk/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/KernelControllerContextCreator.java 2009-11-05 18:58:42 UTC (rev 96066)
@@ -44,10 +44,25 @@
/**
* Create a controller context
+ *
* @param controller The controller to which the beans will be deployed
* @param unit The deployment unit we are deploying
* @param beanMetaData The bean metadata we are deploying
* @return the created controller context or null if this controller context creator should not handle the creation of the context
*/
KernelControllerContext createContext(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData);
+
+ /**
+ * Hook to uninstall a context from the controller if it needs special handling on uninstall. The BeanMetaDataDeployer
+ * remembers which KernelContextCreator was used to create a KernelControllerContext and on undeploy will
+ * call this method.
+ *
+ * @param controller The controller containing the context
+ * @param unit The deployment unit we are uninstalling
+ * @param beanMetaData The bean metadata of the context that we are uninstalling. Its name is normally
+ * the same as the name of the context to be uninstalled
+ * @return true if uninstall was handled here, false if we did not do the uninstall (i.e. nothing special
+ * is required for the uninstall, so it should be handled as normal by the BeanMetaDataDeployer)
+ */
+ boolean uninstallContext(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData);
}
More information about the jboss-cvs-commits
mailing list