[jboss-cvs] jboss-cvs-commits Digest, Vol 40, Issue 622

Ales Justin ales.justin at gmail.com
Tue Oct 27 06:34:59 EDT 2009


What about SortedSet<KCCC> set = Collections.synchronizedSortedSet(new 
TreeSet<KCCC>(COMPARATOR)); ?

Kabir Khan wrote:
> 
> On 26 Oct 2009, at 21:34, Kabir Khan wrote:
> 
>>
>> On 26 Oct 2009, at 20:46, Ales Justin wrote:
>>
>>> I would pull this comparator out from BMDD, not to bloat it.
>>
>> ok
>>
>>> And instead of using synch code, we could use some existing Set to do 
>>> this for us.
>>
>> Which are you thinking of? I can't see anything sorted in 
>> java.util.concurrent, which is why I went for locking myself
> 
> In other words, I am not 100% sure the following is thread-safe:
> 
> List controllerContextCreators = new CopyOnWriteArraySet();
> 
>    public void 
> addControllerContextCreator(KernelControllerContextCreator creator)
>    {
>       if (creator == null)
>          return;
> 
>          controllerContextCreators.add(creator);
>          Collections.sort(controllerContextCreators, 
> RelativeComparator.INSTANCE);
>    }
> 
> 
> 
> 
>>
>>>
>>>> ------------------------------
>>>> Message: 6
>>>> Date: Mon, 26 Oct 2009 16:42:39 -0400
>>>> From: jboss-cvs-commits at lists.jboss.org
>>>> Subject: [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.
>>>> To: jboss-cvs-commits at lists.jboss.org
>>>> Message-ID:
>>>>     <200910262042.n9QKgdRE018603 at svn01.web.mwc.hst.phx2.redhat.com>
>>>> Content-Type: text/plain; charset=UTF-8
>>>> 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
>>>> ------------------------------
>>>> _______________________________________________
>>>> jboss-cvs-commits mailing list
>>>> jboss-cvs-commits at lists.jboss.org
>>>> https://lists.jboss.org/mailman/listinfo/jboss-cvs-commits
>>>> End of jboss-cvs-commits Digest, Vol 40, Issue 622
>>>> **************************************************
>>
> 
> 



More information about the jboss-cvs-commits mailing list