[jboss-cvs] JBossAS SVN: r99657 - in projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins: resolver and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 20 08:25:17 EST 2010


Author: kabir.khan at jboss.com
Date: 2010-01-20 08:25:17 -0500 (Wed, 20 Jan 2010)
New Revision: 99657

Modified:
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java
Log:
Get OnDemand working

Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2010-01-20 12:27:20 UTC (rev 99656)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2010-01-20 13:25:17 UTC (rev 99657)
@@ -74,7 +74,7 @@
    /** The lock */
    private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
 
-   //AbstractDependencyResolver resolver = new DefaultDependencyResolver(this);
+//   AbstractDependencyResolver resolver = new DefaultDependencyResolver(this);
    AbstractDependencyResolver resolver = new IndexingDependencyResolver2(this);
    
    /**
@@ -935,6 +935,8 @@
    
             context.setRequiredState(ControllerState.INSTALLED);
    
+            resolver.enableOnDemand(context, trace);
+            
             if (trace)
                log.trace("Enable onDemand: " + context.toShortString());
          }

Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java	2010-01-20 12:27:20 UTC (rev 99656)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java	2010-01-20 13:25:17 UTC (rev 99657)
@@ -154,4 +154,6 @@
    public abstract void registerContext(ControllerContext context);
    
    public abstract void unregisterContext(ControllerContext context);
+
+   public abstract void enableOnDemand(ControllerContext context, boolean trace);
 }

Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java	2010-01-20 12:27:20 UTC (rev 99656)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java	2010-01-20 13:25:17 UTC (rev 99657)
@@ -225,4 +225,9 @@
    {
    }
 
+   @Override
+   public void enableOnDemand(ControllerContext context, boolean trace)
+   {
+   }
+
 }

Modified: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java	2010-01-20 12:27:20 UTC (rev 99656)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java	2010-01-20 13:25:17 UTC (rev 99657)
@@ -22,6 +22,7 @@
 package org.jboss.dependency.plugins.resolver;
 
 import java.util.HashSet;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -32,9 +33,11 @@
 import org.jboss.dependency.plugins.AbstractDependencyResolver;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerMode;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyInfo;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.util.collection.ConcurrentSet;
 
 /**
  * Optimized  
@@ -46,6 +49,8 @@
    //So far this only works with name
    private final ConcurrentMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>> contextsByDependency = new ConcurrentHashMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>>();
    
+   private final ConcurrentSet<ControllerContext> enabledOnDemandContexts = new ConcurrentSet<ControllerContext>();
+   
    private final IncrementContextPlugin<Boolean> plugin = new DefaultIncrementContextPlugin();
    
    public IndexingDependencyResolver2(Controller controller)
@@ -119,9 +124,9 @@
    @Override
    public void resolveContexts(ControllerContext context, boolean trace)
    {
-      ControllerState fromState = context.getState();
-      ControllerState toState = context.getRequiredState();
-      while (getStateModel().isAfterState(toState, fromState))
+      ControllerState fromState = context.getState();      
+      
+      while (getStateModel().isAfterState(context.getRequiredState(), fromState))
       {
          ControllerState nextState = getStateModel().getNextState(fromState);
          
@@ -129,6 +134,7 @@
             break;
          try
          {
+            checkAndEnableOnDemandForContext(context, trace);
             if (plugin.canMoveToState(context, nextState))
             {
                if (incrementState(context, trace))
@@ -141,11 +147,26 @@
                break;
             }
          }
+         catch(Throwable t)
+         {
+            errorResolvingContext(context, fromState, nextState, t, trace);
+         }
          finally
          {
             removeInstalling(context);
          }
       }
+      
+      while (true)
+      {
+         if (enabledOnDemandContexts.isEmpty())
+            break;
+         for (ControllerContext enabled : enabledOnDemandContexts)
+         {
+            enabledOnDemandContexts.remove(enabled);
+            resolveContexts(enabled, trace);
+         }
+      }
    }
    
    @Override
@@ -190,14 +211,6 @@
    @Override
    public void stateIncremented(ControllerContext incremented, boolean trace)
    {
-//      //private final ConcurrentMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>> contextsByDependency = new ConcurrentHashMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>>();
-//      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByDependentState = contextsByDependency.get(incremented.getName());
-//      
-//      if (contextsByDependentState == null || contextsByDependentState.size() == 0)
-//         return;
-//      List<ControllerContext> contexts = contextsByDependentState.get(incremented.getState());
-//      if (contexts == null || contexts.size() == 0)
-//         return;
       Set<ControllerContext> contexts = getAllContextsDependentOn(incremented);
       if (contexts == null || contexts.size() == 0)
       return;      
@@ -206,12 +219,34 @@
       {
          if (context.getDependencyInfo() != null)
          {
-            ControllerState nextState = getStateModel().getNextState(context.getState());
-            
-            // TODO Check that it is not being installed
             resolveContexts(context, trace);
          }
       }
    }
 
+   @Override
+   public void enableOnDemand(ControllerContext context, boolean trace)
+   {
+      enabledOnDemandContexts.add(context);
+   }
+   
+   private void checkAndEnableOnDemandForContext(ControllerContext context, boolean trace) throws Throwable
+   {
+      boolean enabled = true;
+      if (context.getMode() == ControllerMode.ON_DEMAND)
+      {
+         if (contextsByDependency.get(context.getName()) != null)
+            getController().enableOnDemand(context);
+         
+         if (context.getAliases() != null && context.getAliases().size() > 0)
+         {
+            for (Object alias : context.getAliases())
+            {
+               if (contextsByDependency.get(alias) != null)
+                  getController().enableOnDemand(context);
+            }
+         }
+      }
+   }
+
 }




More information about the jboss-cvs-commits mailing list