[jboss-cvs] JBossAS SVN: r96219 - in projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src: test/java/org/jboss/test/deployers/deployer/test and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Nov 10 08:50:23 EST 2009


Author: alesj
Date: 2009-11-10 08:50:22 -0500 (Tue, 10 Nov 2009)
New Revision: 96219

Modified:
   projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DominoOrdering.java
   projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/Dots.java
   projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/SetDots.java
   projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerFlowUnitTestCase.java
Log:
Port JBDEPLOY-201 fix.

Modified: projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DominoOrdering.java
===================================================================
--- projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DominoOrdering.java	2009-11-10 13:45:30 UTC (rev 96218)
+++ projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/DominoOrdering.java	2009-11-10 13:50:22 UTC (rev 96219)
@@ -70,24 +70,24 @@
             Dots oneTail = one.getTail();
             Dots twoHead = two.getHead();
             Dots twoTail = two.getTail();
-            boolean fstXsnd = oneTail.match(twoHead);
-            boolean sndXfst = twoTail.match(oneHead);
+            int fstXsnd = oneTail.intersect(twoHead);
+            int sndXfst = twoTail.intersect(oneHead);
             int relation = 0;
-            if (fstXsnd && sndXfst)
+            if (fstXsnd > 0 && sndXfst > 0)
             {
                // pass-through deployers
-               if (oneHead.match(twoHead) && oneTail.match(twoTail))
+               if (oneHead.intersect(twoHead) > 0 && oneTail.intersect(twoTail) > 0)
                {
-                  // lets try do do more exact match
+                  // lets try to do more exact match
                   // although we should aviod singe dimension checks
                   // which are already part of match() check
-                  // in order not to break comparator comparison
-                  if (twoHead.dimension() > 1 && oneTail.dimension() >= twoHead.dimension() && oneTail.contains(twoHead))
-                     relation = -1;
-                  else if (oneHead.dimension() > 1 && twoTail.dimension() >= oneHead.dimension() && twoTail.contains(oneHead))
-                     relation = 1;
-                  else
-                     relation = COMPARATOR.compare(one, two);
+                  int thXot = (oneTail.dimension() > 1 && twoHead.dimension() > 1) ? twoHead.intersect(oneTail) : 1;
+                  int before = Math.max(fstXsnd, thXot);
+                  int ohXtt = (oneHead.dimension() > 1 && twoTail.dimension() > 1) ? oneHead.intersect(twoTail) : 1;
+                  int after = Math.max(sndXfst, ohXtt);
+                  relation = after - before; // do we have some more exact match?
+
+                  // make name compare lazy - might already be fixed with transitive order
                }
                else
                {
@@ -97,7 +97,7 @@
             }
             else
             {
-               relation = fstXsnd ? -1 : (sndXfst ? 1 : 0);
+               relation = fstXsnd > 0 ? -1 : (sndXfst > 0 ? 1 : 0);
             }
 
             if (relation == 0)

Modified: projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/Dots.java
===================================================================
--- projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/Dots.java	2009-11-10 13:45:30 UTC (rev 96218)
+++ projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/Dots.java	2009-11-10 13:50:22 UTC (rev 96219)
@@ -41,7 +41,9 @@
     *
     * @param dots the dots
     * @return true if these dots match param dots
+    * @deprecated use intersect
     */
+   @Deprecated
    boolean match(Dots<T> dots);
 
    /**
@@ -50,10 +52,22 @@
     *
     * @param dots the dots
     * @return true if these dots contain param dots
+    * @deprecated use intersect
     */
+   @Deprecated
    boolean contains(Dots<T> dots);
 
    /**
+    * Return the dimension of intersection.
+    * For strict domino that matches this would be one,
+    * in our case is the size of intersection set.
+    *
+    * @param dots the dots
+    * @return the intersection dimension
+    */
+   int intersect(Dots<T> dots);
+
+   /**
     * The dimension of different dots.
     * For strict domino dots this would be one,
     * in our string set case this is the size of the set.

Modified: projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/SetDots.java
===================================================================
--- projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/SetDots.java	2009-11-10 13:45:30 UTC (rev 96218)
+++ projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/main/java/org/jboss/deployers/plugins/sort/SetDots.java	2009-11-10 13:50:22 UTC (rev 96219)
@@ -68,6 +68,14 @@
       return copy.retainAll(set) == false; 
    }
 
+   public int intersect(Dots<Set<V>> containable)
+   {
+      Set<V> otherSet = containable.getValue();
+      Set<V> copy = new HashSet<V>(otherSet);
+      copy.retainAll(set);
+      return copy.size();
+   }
+
    public int dimension()
    {
       return set.size();

Modified: projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerFlowUnitTestCase.java
===================================================================
--- projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerFlowUnitTestCase.java	2009-11-10 13:45:30 UTC (rev 96218)
+++ projects/jboss-deployers/branches/Branch_2_0/deployers-impl/src/test/java/org/jboss/test/deployers/deployer/test/DeployerFlowUnitTestCase.java	2009-11-10 13:50:22 UTC (rev 96219)
@@ -939,4 +939,223 @@
       main.removeDeployment(deployment);
       main.process();
    }
+
+   public void testDeployersOrder1() throws Exception
+   {
+      DeployerClient main = createMainDeployer();
+
+      TestFlowDeployer deployer6 = new TestFlowDeployer( "6" );
+      deployer6.setInputs( "a11", "a12", "a13", "a14", "a33" );
+      addDeployer(main, deployer6);
+
+      TestFlowDeployer deployer5 = new TestFlowDeployer( "5" );
+      deployer5.setInputs( "a21", "a33", "a41" );
+      deployer5.setOutputs( "a33", "a51", "a52" );
+      addDeployer(main, deployer5);
+
+      TestFlowDeployer deployer4 = new TestFlowDeployer( "4" );
+      deployer4.setInputs( "a14", "a33" );
+      deployer4.setOutputs( "a14", "a33", "a41" );
+      addDeployer( main, deployer4 );
+
+      TestFlowDeployer deployer3 = new TestFlowDeployer( "3" );
+      deployer3.setInputs( "a13", "a21" );
+      deployer3.setOutputs( "a32", "a33" );
+      addDeployer( main, deployer3 );
+
+      TestFlowDeployer deployer2 = new TestFlowDeployer( "2" );
+      deployer2.setInputs( "a11", "a12" );
+      deployer2.setOutputs( "a12", "a21", "a22" );
+      addDeployer( main, deployer2 );
+
+      TestFlowDeployer deployer1 = new TestFlowDeployer( "1" );
+      deployer1.setOutputs( "a11", "a12", "a13", "a14" );
+      addDeployer( main, deployer1 );
+
+      Deployment deployment = createSimpleDeployment( "deployersOrderTest" );
+      main.addDeployment(deployment);
+      main.process();
+
+      assertEquals(1, deployer1.getDeployOrder());
+      assertEquals(2, deployer2.getDeployOrder());
+      assertEquals(3, deployer3.getDeployOrder());
+      assertEquals(4, deployer4.getDeployOrder());
+      assertEquals(5, deployer5.getDeployOrder());
+      assertEquals(6, deployer6.getDeployOrder());
+      assertEquals(-1, deployer1.getUndeployOrder());
+      assertEquals(-1, deployer2.getUndeployOrder());
+      assertEquals(-1, deployer3.getUndeployOrder());
+      assertEquals(-1, deployer4.getUndeployOrder());
+      assertEquals(-1, deployer5.getUndeployOrder());
+      assertEquals(-1, deployer6.getUndeployOrder());
+
+      main.removeDeployment(deployment);
+      main.process();
+
+      assertEquals(1, deployer1.getDeployOrder());
+      assertEquals(2, deployer2.getDeployOrder());
+      assertEquals(3, deployer3.getDeployOrder());
+      assertEquals(4, deployer4.getDeployOrder());
+      assertEquals(5, deployer5.getDeployOrder());
+      assertEquals(6, deployer6.getDeployOrder());
+      assertEquals(12, deployer1.getUndeployOrder());
+      assertEquals(11, deployer2.getUndeployOrder());
+      assertEquals(10, deployer3.getUndeployOrder());
+      assertEquals(9, deployer4.getUndeployOrder());
+      assertEquals(8, deployer5.getUndeployOrder());
+      assertEquals(7, deployer6.getUndeployOrder());
+
+      main.addDeployment(deployment);
+      main.process();
+
+      assertEquals(13, deployer1.getDeployOrder());
+      assertEquals(14, deployer2.getDeployOrder());
+      assertEquals(15, deployer3.getDeployOrder());
+      assertEquals(16, deployer4.getDeployOrder());
+      assertEquals(17, deployer5.getDeployOrder());
+      assertEquals(18, deployer6.getDeployOrder());
+      assertEquals(12, deployer1.getUndeployOrder());
+      assertEquals(11, deployer2.getUndeployOrder());
+      assertEquals(10, deployer3.getUndeployOrder());
+      assertEquals(9, deployer4.getUndeployOrder());
+      assertEquals(8, deployer5.getUndeployOrder());
+      assertEquals(7, deployer6.getUndeployOrder());
+
+      main.removeDeployment(deployment);
+      main.process();
+   }
+
+   public void testRemovingOverlapping() throws Exception
+   {
+      DeployerClient main = createMainDeployer();
+
+      // "1", "2", "3", "4" and "6" are provided by deployers in different stage
+      TestFlowDeployer deployer1 = new TestFlowDeployer( "WSEJBAdapterDeployer" );
+      deployer1.setInputs( "1", "2", "3", "4" );
+      deployer1.setOutputs( "5" );
+      addDeployer(main, deployer1);
+
+      TestFlowDeployer deployer2 = new TestFlowDeployer( "WSTypeDeployer" );
+      deployer2.setInputs( "5", "4", "6" ); // note 6 is both input and output
+      deployer2.setOutputs( "6", "7" );
+      addDeployer(main, deployer2);
+
+      TestFlowDeployer deployer3 = new TestFlowDeployer( "WSDeploymentDeployer" );
+      deployer3.setInputs( "6", "7" ); // note 6 is both input and output
+      deployer3.setOutputs( "8", "6" );
+      addDeployer( main, deployer3 );
+
+      TestFlowDeployer deployer4 = new TestFlowDeployer( "WSDeploymentAspectDeployer" );
+      deployer4.setInputs( "6", "7", "8" );  // note 6 is both input and output
+      deployer4.setOutputs( "9", "6", "0" );
+      addDeployer( main, deployer4 );
+
+      Deployment deployment = createSimpleDeployment( "deployersOrderTest" );
+
+      main.addDeployment(deployment);
+      main.process();
+
+      assertEquals(1, deployer1.getDeployOrder());
+      assertEquals(2, deployer2.getDeployOrder());
+      assertEquals(3, deployer3.getDeployOrder());
+      assertEquals(4, deployer4.getDeployOrder());
+      assertEquals(-1, deployer1.getUndeployOrder());
+      assertEquals(-1, deployer2.getUndeployOrder());
+      assertEquals(-1, deployer3.getUndeployOrder());
+      assertEquals(-1, deployer4.getUndeployOrder());
+
+      main.removeDeployment(deployment);
+      main.process();
+
+      assertEquals(1, deployer1.getDeployOrder());
+      assertEquals(2, deployer2.getDeployOrder());
+      assertEquals(3, deployer3.getDeployOrder());
+      assertEquals(4, deployer4.getDeployOrder());
+      assertEquals(8, deployer1.getUndeployOrder());
+      assertEquals(7, deployer2.getUndeployOrder());
+      assertEquals(6, deployer3.getUndeployOrder());
+      assertEquals(5, deployer4.getUndeployOrder());
+
+      main.addDeployment(deployment);
+      main.process();
+
+      assertEquals(9, deployer1.getDeployOrder());
+      assertEquals(10, deployer2.getDeployOrder());
+      assertEquals(11, deployer3.getDeployOrder());
+      assertEquals(12, deployer4.getDeployOrder());
+      assertEquals(8, deployer1.getUndeployOrder());
+      assertEquals(7, deployer2.getUndeployOrder());
+      assertEquals(6, deployer3.getUndeployOrder());
+      assertEquals(5, deployer4.getUndeployOrder());
+
+      main.removeDeployment(deployment);
+      main.process();
+   }
+
+   public void testPartialOverlapping() throws Exception
+   {
+      DeployerClient main = createMainDeployer();
+
+      // "1", "2", are provided by other preceding deployers
+      TestFlowDeployer deployer1 = new TestFlowDeployer( "Deployer" );
+      deployer1.setInputs( "1", "2" );
+      deployer1.setOutputs( "3", "5", "2", "4" );
+      addDeployer(main, deployer1);
+
+      TestFlowDeployer deployer2 = new TestFlowDeployer( "Deployer" );
+      deployer2.setInputs( "1", "5", "2" ); // depends on 5 (output of deployer1)
+      deployer2.setOutputs( "6", "2", "4" );
+      addDeployer(main, deployer2);
+
+      TestFlowDeployer deployer3 = new TestFlowDeployer( "Deployer" );
+      deployer3.setInputs( "6", "1", "5", "2" ); // depends on 6 (output of deployer2) and 5 (output of deployer1)
+      deployer3.setOutputs( "7", "2", "4" );
+      addDeployer( main, deployer3 );
+
+      TestFlowDeployer deployer4 = new TestFlowDeployer( "Deployer" );
+      deployer4.setInputs( "1", "2", "4" ); // depends on 4 (output of deployer1, deployer2 and deployer3)
+      deployer4.setOutputs( "8", "2" );
+      addDeployer( main, deployer4 );
+
+      Deployment deployment = createSimpleDeployment( "deployersOrderTest" );
+
+      main.addDeployment(deployment);
+      main.process();
+
+      assertEquals(1, deployer1.getDeployOrder());
+      assertEquals(2, deployer2.getDeployOrder());
+      assertEquals(3, deployer3.getDeployOrder());
+      assertEquals(4, deployer4.getDeployOrder());
+      assertEquals(-1, deployer1.getUndeployOrder());
+      assertEquals(-1, deployer2.getUndeployOrder());
+      assertEquals(-1, deployer3.getUndeployOrder());
+      assertEquals(-1, deployer4.getUndeployOrder());
+
+      main.removeDeployment(deployment);
+      main.process();
+
+      assertEquals(1, deployer1.getDeployOrder());
+      assertEquals(2, deployer2.getDeployOrder());
+      assertEquals(3, deployer3.getDeployOrder());
+      assertEquals(4, deployer4.getDeployOrder());
+      assertEquals(8, deployer1.getUndeployOrder());
+      assertEquals(7, deployer2.getUndeployOrder());
+      assertEquals(6, deployer3.getUndeployOrder());
+      assertEquals(5, deployer4.getUndeployOrder());
+
+      main.addDeployment(deployment);
+      main.process();
+
+      assertEquals(9, deployer1.getDeployOrder());
+      assertEquals(10, deployer2.getDeployOrder());
+      assertEquals(11, deployer3.getDeployOrder());
+      assertEquals(12, deployer4.getDeployOrder());
+      assertEquals(8, deployer1.getUndeployOrder());
+      assertEquals(7, deployer2.getUndeployOrder());
+      assertEquals(6, deployer3.getUndeployOrder());
+      assertEquals(5, deployer4.getUndeployOrder());
+
+      main.removeDeployment(deployment);
+      main.process();
+   }
 }




More information about the jboss-cvs-commits mailing list