[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