[jboss-cvs] JBossAS SVN: r95580 - in projects/jboss-deployers/trunk: deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Oct 26 16:42:39 EDT 2009


Author: kabir.khan at jboss.com
Date: 2009-10-26 16:42:38 -0400 (Mon, 26 Oct 2009)
New Revision: 95580

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
Log:
[JBDEPLOY-219] Relative sort order of KernelControllerContextCreators

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-10-26 20:37:45 UTC (rev 95579)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/main/java/org/jboss/deployers/vfs/deployer/kernel/BeanMetaDataDeployer.java	2009-10-26 20:42:38 UTC (rev 95580)
@@ -21,9 +21,12 @@
 */
 package org.jboss.deployers.vfs.deployer.kernel;
 
+import java.util.ArrayList;
 import java.util.Collection;
-import java.util.List;
-import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.concurrent.locks.ReadWriteLock;
+import java.util.concurrent.locks.ReentrantReadWriteLock;
 
 import org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData;
 import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
@@ -57,8 +60,10 @@
    private Controller controller;
    
    /** List of controller context creators */
-   private List<KernelControllerContextCreator> controllerContextCreators = new CopyOnWriteArrayList<KernelControllerContextCreator>();
+   private ArrayList<KernelControllerContextCreator> controllerContextCreators = new ArrayList<KernelControllerContextCreator>();
    
+   private ReadWriteLock lock = new ReentrantReadWriteLock();
+   
    /** The default controller context creator */
    
    
@@ -110,8 +115,31 @@
     */
    public void addControllerContextCreator(KernelControllerContextCreator creator)
    {
-      if (creator != null)
+      if (creator == null)
+         return;
+      
+      lock.writeLock().lock();
+      try
+      {
          controllerContextCreators.add(creator);
+         Collections.sort(controllerContextCreators, new Comparator<KernelControllerContextCreator>()
+         {
+
+            public int compare(KernelControllerContextCreator o1, KernelControllerContextCreator o2)
+            {
+               if (o1.getRelativeOrder() < o2.getRelativeOrder())
+                  return -1;
+               if (o1.getRelativeOrder() > o2.getRelativeOrder())
+                  return 1;
+               
+               return 0;
+            }
+         });
+      }
+      finally
+      {
+         lock.writeLock().unlock();
+      }
    }
    
    /**
@@ -121,8 +149,18 @@
     */
    public void removeControllerContextCreator(KernelControllerContextCreator creator)
    {
-      if (creator != null)
+      if (creator == null)
+         return;
+      
+      lock.writeLock().lock();
+      try
+      {
          controllerContextCreators.remove(creator);
+      }
+      finally
+      {
+         lock.writeLock().unlock();
+      }
    }
    
    @Override
@@ -170,12 +208,20 @@
    {
       if (controllerContextCreators.size() > 0)
       {
-         for (KernelControllerContextCreator creator : controllerContextCreators)
+         lock.readLock().lock();
+         try
          {
-            KernelControllerContext context = creator.createContext(controller, unit, deployment);
-            if (context != null)
-               return context;
+            for (KernelControllerContextCreator creator : controllerContextCreators)
+            {
+               KernelControllerContext context = creator.createContext(controller, unit, deployment);
+               if (context != null)
+                  return context;
+            }
          }
+         finally
+         {
+            lock.readLock().unlock();
+         }
       }
       return new AbstractKernelControllerContext(null, deployment, null);
    }

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-10-26 20:37:45 UTC (rev 95579)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/NoopControllerContextCreator.java	2009-10-26 20:42:38 UTC (rev 95580)
@@ -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.metadata.spi.BeanMetaData;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.deployers.structure.spi.DeploymentUnit;
@@ -34,10 +37,17 @@
  */
 public class NoopControllerContextCreator implements KernelControllerContextCreator
 {
-   private boolean triggered;
+   private static List<Integer> triggered = new ArrayList<Integer>();
    
-   public boolean isTriggered()
+   private int order;
+   
+   public NoopControllerContextCreator(int order)
    {
+      this.order = order;
+   }
+   
+   public static List<Integer> getTriggered()
+   {
       return triggered;
    }
    
@@ -49,8 +59,12 @@
          throw new IllegalArgumentException("Null unit");
       if (beanMetaData == null)
          throw new IllegalArgumentException("Null beanMetadata");
-      triggered = true;
+      triggered.add(order);
       return null;
    }
 
+   public int getRelativeOrder()
+   {
+      return order;
+   }
 }

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-10-26 20:37:45 UTC (rev 95579)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/support/SpecialControllerContextCreator.java	2009-10-26 20:42:38 UTC (rev 95580)
@@ -38,6 +38,13 @@
 {
    public static final String TRIGGER = "TriggerSpecialControllerContextCreator";
       
+   private int order;
+   
+   public SpecialControllerContextCreator(int order)
+   {
+      this.order = order;
+   }
+   
    public KernelControllerContext createContext(Controller controller, DeploymentUnit unit, BeanMetaData beanMetaData)
    {
       if (unit.getAttachment(TRIGGER) != null)
@@ -55,5 +62,10 @@
       }
       
    }
+
+   public int getRelativeOrder()
+   {
+      return order;
+   }
 }
 

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-10-26 20:37:45 UTC (rev 95579)
+++ projects/jboss-deployers/trunk/deployers-vfs/src/test/java/org/jboss/test/deployers/vfs/deployer/bean/test/KernelControllerContextCreatorTestCase.java	2009-10-26 20:42:38 UTC (rev 95580)
@@ -24,8 +24,6 @@
 import junit.framework.Test;
 import junit.framework.TestSuite;
 
-import org.jboss.beans.metadata.spi.BeanMetaData;
-import org.jboss.beans.metadata.spi.builder.BeanMetaDataBuilder;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.deployers.vfs.deployer.kernel.BeanDeployer;
 import org.jboss.deployers.vfs.deployer.kernel.BeanMetaDataDeployer;
@@ -83,7 +81,8 @@
 
    public void testNoopControllerContextCreator() throws Throwable
    {
-      NoopControllerContextCreator noop = new NoopControllerContextCreator();
+      NoopControllerContextCreator.getTriggered().clear();
+      NoopControllerContextCreator noop = new NoopControllerContextCreator(1);
       beanMetaDataDeployer.addControllerContextCreator(noop);
       try
       {
@@ -91,7 +90,8 @@
          VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml");
          assertDeploy(context);
          
-         assertTrue(noop.isTriggered());
+         assertEquals(1, NoopControllerContextCreator.getTriggered().size());
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(1));
          
          ControllerContext test = controller.getInstalledContext("Test");
          assertNotNull(test);
@@ -107,19 +107,21 @@
 
    public void testSpecialControllerContextCreatorNotTriggered() throws Throwable
    {
-      NoopControllerContextCreator noop1 = new NoopControllerContextCreator();
+      NoopControllerContextCreator.getTriggered().clear();
+      NoopControllerContextCreator noop1 = new NoopControllerContextCreator(1);
       beanMetaDataDeployer.addControllerContextCreator(noop1);
-      SpecialControllerContextCreator special = new SpecialControllerContextCreator();
+      SpecialControllerContextCreator special = new SpecialControllerContextCreator(2);
       beanMetaDataDeployer.addControllerContextCreator(special);
-      NoopControllerContextCreator noop2 = new NoopControllerContextCreator();
+      NoopControllerContextCreator noop2 = new NoopControllerContextCreator(3);
       beanMetaDataDeployer.addControllerContextCreator(noop2);
       try
       {
          VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml");
          assertDeploy(context);
          
-         assertTrue(noop1.isTriggered());
-         assertTrue(noop2.isTriggered());
+         assertEquals(2, NoopControllerContextCreator.getTriggered().size());
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(1));
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(3));
          
          ControllerContext test = controller.getInstalledContext("Test");
          assertNotNull(test);
@@ -137,21 +139,23 @@
 
    public void testSpecialControllerContextCreatorTriggered() throws Throwable
    {
+      NoopControllerContextCreator.getTriggered().clear();
       addDeployer(main, new TriggerSpecialControllerContextDeployer());
       
-      NoopControllerContextCreator noop1 = new NoopControllerContextCreator();
+      NoopControllerContextCreator noop1 = new NoopControllerContextCreator(1);
       beanMetaDataDeployer.addControllerContextCreator(noop1);
-      SpecialControllerContextCreator special = new SpecialControllerContextCreator();
+      SpecialControllerContextCreator special = new SpecialControllerContextCreator(2);
       beanMetaDataDeployer.addControllerContextCreator(special);
-      NoopControllerContextCreator noop2 = new NoopControllerContextCreator();
+      NoopControllerContextCreator noop2 = new NoopControllerContextCreator(3);
       beanMetaDataDeployer.addControllerContextCreator(noop2);
       try
       {
          VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml");
          assertDeploy(context);
          
-         assertTrue(noop1.isTriggered());
-         assertFalse(noop2.isTriggered());
+         assertEquals(1, NoopControllerContextCreator.getTriggered().size());
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(1));
+         assertFalse(NoopControllerContextCreator.getTriggered().contains(3));
          
          ControllerContext test = controller.getInstalledContext("Test");
          assertNotNull(test);
@@ -166,4 +170,57 @@
          beanMetaDataDeployer.removeControllerContextCreator(noop2);
       }
    }
+   
+   public void testControllerContextOrder() throws Throwable
+   {
+      NoopControllerContextCreator.getTriggered().clear();
+      NoopControllerContextCreator noop6 = new NoopControllerContextCreator(6);
+      beanMetaDataDeployer.addControllerContextCreator(noop6);
+      NoopControllerContextCreator noop1 = new NoopControllerContextCreator(1);
+      beanMetaDataDeployer.addControllerContextCreator(noop1);
+      NoopControllerContextCreator noop3 = new NoopControllerContextCreator(3);
+      beanMetaDataDeployer.addControllerContextCreator(noop3);
+      NoopControllerContextCreator noop4 = new NoopControllerContextCreator(4);
+      beanMetaDataDeployer.addControllerContextCreator(noop4);
+      NoopControllerContextCreator noop2 = new NoopControllerContextCreator(2);
+      beanMetaDataDeployer.addControllerContextCreator(noop2);
+      NoopControllerContextCreator noop5 = new NoopControllerContextCreator(5);
+      beanMetaDataDeployer.addControllerContextCreator(noop5);
+      try
+      {
+         VFSDeployment context = createDeployment("/bean", "toplevel/my-beans.xml");
+         assertDeploy(context);
+         
+         assertEquals(6, NoopControllerContextCreator.getTriggered().size());
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(1));
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(2));
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(3));
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(4));
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(5));
+         assertTrue(NoopControllerContextCreator.getTriggered().contains(6));
+         
+         int last = 0;
+         for (int i : NoopControllerContextCreator.getTriggered())
+         {
+            assertTrue(last + 1 == i);
+            last = i;
+         }
+         
+         ControllerContext test = controller.getInstalledContext("Test");
+         assertNotNull(test);
+         assertEquals(AbstractKernelControllerContext.class, test.getClass());
+         assertUndeploy(context);
+         assertNull(controller.getContext("Test", null));
+      }
+      finally
+      {
+         beanMetaDataDeployer.removeControllerContextCreator(noop1);
+         beanMetaDataDeployer.removeControllerContextCreator(noop2);
+         beanMetaDataDeployer.removeControllerContextCreator(noop3);
+         beanMetaDataDeployer.removeControllerContextCreator(noop4);
+         beanMetaDataDeployer.removeControllerContextCreator(noop5);
+         beanMetaDataDeployer.removeControllerContextCreator(noop6);
+      }
+      
+   }
 }

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-10-26 20:37:45 UTC (rev 95579)
+++ projects/jboss-deployers/trunk/deployers-vfs-spi/src/main/java/org/jboss/deployers/vfs/spi/deployer/helpers/KernelControllerContextCreator.java	2009-10-26 20:42:38 UTC (rev 95580)
@@ -36,6 +36,13 @@
 public interface KernelControllerContextCreator
 {
    /**
+    * The relative order of this creator. BeanMetaDataDeployer will try to 
+    * create contexts with values first.
+    * @return The relative order
+    */
+   int getRelativeOrder();
+   
+   /**
     * Create a controller context
     * @param controller The controller to which the beans will be deployed
     * @param unit The deployment unit we are deploying




More information about the jboss-cvs-commits mailing list