[jboss-cvs] JBossAS SVN: r99676 - in projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency: plugins/resolver and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Jan 20 15:36:31 EST 2010


Author: kabir.khan at jboss.com
Date: 2010-01-20 15:36:31 -0500 (Wed, 20 Jan 2010)
New Revision: 99676

Added:
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DependencyResolverAbstractFactory.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolverFactory.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolver.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolverFactory.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/DependencyResolverFactory.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcher.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcherFactory.java
Removed:
   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/DefaultIncrementContextPlugin.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IncrementContextPlugin.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver.java
   projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java
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
Log:
Refactor to support pluggable resolver matchers

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 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -38,8 +38,7 @@
 
 import org.jboss.dependency.plugins.action.ControllerContextAction;
 import org.jboss.dependency.plugins.action.SimpleControllerContextAction;
-import org.jboss.dependency.plugins.resolver.DefaultDependencyResolver;
-import org.jboss.dependency.plugins.resolver.IndexingDependencyResolver2;
+import org.jboss.dependency.plugins.resolver.DependencyResolverAbstractFactory;
 import org.jboss.dependency.plugins.tracker.AbstractContextRegistry;
 import org.jboss.dependency.spi.CallbackItem;
 import org.jboss.dependency.spi.Controller;
@@ -74,8 +73,7 @@
    /** The lock */
    private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
 
-//   AbstractDependencyResolver resolver = new DefaultDependencyResolver(this);
-   AbstractDependencyResolver resolver = new IndexingDependencyResolver2(this);
+   private AbstractDependencyResolver resolver = DependencyResolverAbstractFactory.getInstance().getFactory(this).createResolver(this);
    
    /**
     * The executor used to install ASYNCHRONOUS contexts. It must have a saturation policy of

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 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -27,6 +27,7 @@
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.ControllerStateModel;
+import org.jboss.dependency.spi.DependencyInfo;
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.logging.Logger;
 
@@ -110,6 +111,12 @@
       controller.errorResolvingContext(ctx, fromState, toState, error, trace);
    }
    
+   protected boolean canMoveToState(ControllerContext ctx, ControllerState state)
+   {
+      DependencyInfo dependencies = ctx.getDependencyInfo();
+      return dependencies == null || dependencies.resolveDependencies(ctx.getController(), state);
+   }
+
    protected void resolveChildControllers(ControllerContext context, boolean trace)
    {
       // resolve child controllers

Deleted: 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 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -1,233 +0,0 @@
-/*
-* 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.dependency.plugins.resolver;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.Set;
-
-import org.jboss.dependency.plugins.AbstractDependencyResolver;
-import org.jboss.dependency.spi.Controller;
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
-
-/**
- * This is the legacy dependency resolution algorithm broken out
- * from AbstractController
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class DefaultDependencyResolver extends AbstractDependencyResolver
-{
-   IncrementContextPlugin<Boolean> incrementContextPlugin = new DefaultIncrementContextPlugin();
-   
-   public DefaultDependencyResolver(Controller controller)
-   {
-      super(controller);
-   }
-
-   /**
-    * Resolve unresolved contexts<p>
-    * <p/>
-    * This method must be invoked with the write lock taken
-    *
-    * @param context the context being installed
-    * @param trace whether trace is enabled
-    */
-   public void resolveContexts(ControllerContext context, boolean trace)
-   {
-      boolean wasOnDemandEnabled = false;
-      boolean resolutions = true;
-      while (resolutions || isOnDemandEnabled())
-      {
-         if (isOnDemandEnabled())
-            wasOnDemandEnabled = true;
-         
-         setOnDemandEnabled(false);
-         resolutions = false;
-         for (ControllerState fromState : getStateModel())
-         {
-            ControllerState toState = getStateModel().getNextState(fromState);
-            if (resolveContexts(fromState, toState, trace))
-            {
-               resolutions = true;
-               break;
-            }
-         }
-      }
-
-      if (trace)
-      {
-         for (ControllerState state : getStateModel())
-         {
-            ControllerState nextState = getStateModel().getNextState(state);
-            Set<ControllerContext> stillUnresolved = getContextsByState(state);
-            if (stillUnresolved.isEmpty() == false)
-            {
-               for (ControllerContext ctx : stillUnresolved)
-               {
-                  if (advance(ctx))
-                     log.trace("Still unresolved " + nextState.getStateString() + ": " + ctx);
-               }
-            }
-         }
-      }
-
-      // resolve child controllers
-      resolveChildControllers(context, trace);
-      
-      if (wasOnDemandEnabled)
-      {
-         resolveParentController(context, trace);
-      }
-   }
-
-   protected boolean resolveContexts(ControllerState fromState, ControllerState toState, boolean trace)
-   {
-      boolean resolutions = false;
-      Set<ControllerContext> unresolved = getContextsByState(fromState);
-      Set<ControllerContext> resolved = resolveContexts(unresolved, fromState, toState, trace);
-      if (resolved.isEmpty() == false)
-      {
-         Set<ControllerContext> toProcess = new HashSet<ControllerContext>();
-         for (ControllerContext context : resolved)
-         {
-            Object name = context.getName();
-            if (fromState.equals(context.getState()) == false)
-            {
-               if (trace)
-                  log.trace("Skipping already installed " + name + " for " + toState.getStateString());
-               removeInstalling(context);
-            }
-            else
-            {
-               toProcess.add(context);
-            }
-         }
-         try
-         {
-            if (toProcess.isEmpty() == false)
-            {
-               for (Iterator<ControllerContext> iter = toProcess.iterator(); iter.hasNext(); )
-               {
-                  ControllerContext context = iter.next();
-                  iter.remove();
-                  Object name = context.getName();
-                  try
-                  {
-                     if (fromState.equals(context.getState()) == false)
-                     {
-                        if (trace)
-                           log.trace("Skipping already installed " + name + " for " + toState.getStateString());
-                     }
-                     else
-                     {
-                        if (trace)
-                           log.trace("Dependencies resolved " + name + " for " + toState.getStateString());
-
-                        if (incrementState(context, trace))
-                        {
-                           resolutions = true;
-                           if (trace)
-                              log.trace(name + " " + toState.getStateString());
-                        }
-                        
-                     }
-                  }
-                  finally
-                  {
-                     removeInstalling(context);
-                  }
-               }
-            }
-         }
-         finally
-         {
-            // If we get here something has gone seriously wrong,
-            // but try to tidyup as much state as possible
-            if (toProcess.isEmpty() == false)
-            {
-               for (ControllerContext context : toProcess)
-                  removeInstalling(context);
-            }
-         }
-      }
-
-      return resolutions;
-   }
-
-   protected Set<ControllerContext> resolveContexts(Set<ControllerContext> contexts, ControllerState fromState, ControllerState toState, boolean trace)
-   {
-      HashSet<ControllerContext> result = new HashSet<ControllerContext>();
-
-      if (contexts.isEmpty() == false)
-      {
-         for (ControllerContext ctx : contexts)
-         {
-            if (checkCanInstall(ctx, fromState, toState, trace))
-            {
-               try
-               {
-                  if (resolveDependencies(ctx, toState))
-                     result.add(ctx);
-                  else
-                     removeInstalling(ctx);
-               }
-               catch (Throwable error)
-               {
-                  errorResolvingContext(ctx, fromState, toState, error, trace);
-               }
-            }
-         }
-      }
-
-      return result;
-   }
-
-   public boolean resolveDependencies(ControllerContext ctx, ControllerState state)
-   {
-      return incrementContextPlugin.canMoveToState(ctx, state);
-   }
-
-   @Override
-   public void stateIncremented(ControllerContext context, boolean trace)
-   {
-      //Noop
-   }
-
-   @Override
-   public void registerContext(ControllerContext context)
-   {
-   }
-
-   @Override
-   public void unregisterContext(ControllerContext context)
-   {
-   }
-
-   @Override
-   public void enableOnDemand(ControllerContext context, boolean trace)
-   {
-   }
-
-}

Deleted: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultIncrementContextPlugin.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultIncrementContextPlugin.java	2010-01-20 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultIncrementContextPlugin.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -1,41 +0,0 @@
-/*
-* 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.dependency.plugins.resolver;
-
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.dependency.spi.DependencyInfo;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class DefaultIncrementContextPlugin implements IncrementContextPlugin<Boolean>
-{
-   public Boolean canMoveToState(ControllerContext ctx, ControllerState state)
-   {
-      DependencyInfo dependencies = ctx.getDependencyInfo();
-      return dependencies == null || dependencies.resolveDependencies(ctx.getController(), state);
-   }
-
-}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DependencyResolverAbstractFactory.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DependencyResolverAbstractFactory.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DependencyResolverAbstractFactory.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,66 @@
+/*
+* 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.dependency.plugins.resolver;
+
+import org.jboss.dependency.plugins.resolver.indexing.IndexingDependencyResolverFactory;
+import org.jboss.dependency.plugins.resolver.standard.StandardDependencyResolverFactory;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.resolver.DependencyResolverFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class DependencyResolverAbstractFactory
+{
+   private static final DependencyResolverAbstractFactory INSTANCE = new DependencyResolverAbstractFactory(); 
+   private static final DependencyResolverFactory factory;
+   static
+   {
+      //TODO configure with system properties
+//      Class<?> clazz = StandardDependencyResolverFactory.class;
+      Class<?> clazz = IndexingDependencyResolverFactory.class;
+      try
+      {
+         factory = (DependencyResolverFactory)clazz.newInstance();
+      }
+      catch(Exception e)
+      {
+         throw new IllegalStateException("Could not create create DependencyResolverFactory using " + clazz.getName(), e);
+      }
+   }
+   
+   private DependencyResolverAbstractFactory()
+   {
+   }
+   
+   public static DependencyResolverAbstractFactory getInstance()
+   {
+      return INSTANCE;
+   }
+
+   public DependencyResolverFactory getFactory(Controller controller)
+   {
+      return factory;
+   }
+}

Deleted: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IncrementContextPlugin.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IncrementContextPlugin.java	2010-01-20 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IncrementContextPlugin.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -1,35 +0,0 @@
-/*
-* 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.dependency.plugins.resolver;
-
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
-
-/**
- * 
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public interface IncrementContextPlugin<T>
-{
-   T canMoveToState(ControllerContext ctx, ControllerState state);
-}

Deleted: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver.java	2010-01-20 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -1,278 +0,0 @@
-/*
-* 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.dependency.plugins.resolver;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-import org.jboss.dependency.plugins.AbstractDependencyResolver;
-import org.jboss.dependency.spi.Controller;
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.dependency.spi.ControllerStateModel;
-import org.jboss.dependency.spi.DependencyItem;
-
-/**
- * Optimized  
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class IndexingDependencyResolver extends AbstractDependencyResolver
-{
-   private final ConcurrentMap<ControllerContext, UnresolvedEntry> unresolvedEntries = new ConcurrentHashMap<ControllerContext, UnresolvedEntry>();
-   private final ConcurrentMap<ControllerState, List<UnresolvedEntry>> unresolvedEntriesByDemandedState = new ConcurrentHashMap<ControllerState, List<UnresolvedEntry>>();
-   
-   //DependencyItem
-   private final IncrementContextPlugin<List<DependencyItem>> incrementContextPlugin = new UnresolvedDependenciesIncrementContextPlugin();
-   
-   public IndexingDependencyResolver(Controller controller)
-   {
-      super(controller);
-   }
-
-   @Override
-   public void resolveContexts(ControllerContext context, boolean trace)
-   {
-      ControllerState fromState = context.getState();
-      ControllerState toState = context.getRequiredState();
-      while (getStateModel().isAfterState(toState, fromState))
-      {
-         ControllerState nextState = getStateModel().getNextState(fromState);
-         List<DependencyItem> unresolvedDependencies = incrementContextPlugin.canMoveToState(context, nextState);
-         
-         if (unresolvedDependencies.isEmpty() == false)
-         {
-            unresolvedDependencies = incrementContextPlugin.canMoveToState(context, null);
-            recordUnresolvedEntries(context, unresolvedDependencies);
-            break;
-         }
-         else
-         {
-            incrementState(context, trace);
-            fromState = context.getState();
-         }
-      }
-   }
-   
-   private void recordUnresolvedEntries(ControllerContext context, List<DependencyItem> unresolvedDependencies)
-   {
-      UnresolvedEntry entry = unresolvedEntries.get(context);
-      if (entry == null)
-      {
-         entry = UnresolvedEntry.create(context, unresolvedDependencies);
-         unresolvedEntries.putIfAbsent(context, entry);
-         
-         for (ControllerState dependentState : entry.getDependentStates())
-         {
-            List<UnresolvedEntry> unresolvedEntriesForState = unresolvedEntriesByDemandedState.get(dependentState);
-            if (unresolvedEntriesForState == null)
-               unresolvedEntriesForState = new CopyOnWriteArrayList<UnresolvedEntry>();
-            List<UnresolvedEntry> old = unresolvedEntriesByDemandedState.putIfAbsent(dependentState, unresolvedEntriesForState);
-            if (old != null)
-               unresolvedEntriesForState = old;
-            unresolvedEntriesForState.add(entry);   
-         }
-      }
-   }
-   
-
-   @Override
-   public boolean resolveDependencies(ControllerContext ctx, ControllerState state)
-   {
-      return incrementContextPlugin.canMoveToState(ctx, state).size() > 0;
-   }
-
-   @Override
-   public void stateIncremented(ControllerContext context, boolean trace)
-   {
-      List<UnresolvedEntry> entries = unresolvedEntriesByDemandedState.get(context.getState());
-      if (entries != null && entries.size() > 0)
-      {
-         for (Iterator<UnresolvedEntry> it = entries.iterator() ; it.hasNext() ; )
-         {
-            UnresolvedEntry entry = it.next();
-            if (entry == null)
-               continue;
-            
-            ControllerContext entryContext = entry.getContext();
-            while (getStateModel().isBeforeState(entryContext.getState(), entryContext.getRequiredState()))
-            {
-               boolean resolvedAll = true;
-               ControllerState nextState = getStateModel().getNextState(entryContext.getState());
-               if (nextState == null)
-                  break;
-               List<DependencyItem> unresolvedItems = entry.getItemsByState(context.getState(), nextState); 
-               for (DependencyItem item : unresolvedItems)
-               {
-                  if (item.isResolved() == false && 
-                        item.getDependentState().equals(context.getState()) && 
-                        item.getWhenRequired().equals(getStateModel().getPreviousState(entry.getContext().getState())))
-                  {
-                     if (item.resolve(getController()) == false)
-                     {
-                        resolvedAll = false;
-                        break;
-                     }
-                     else
-                     {
-                        entry.removeItemByState(context.getState(), nextState, item);
-                     }
-                  }
-               }
-               
-               if (resolvedAll)
-               {
-                  incrementState(entryContext, trace);
-                  unresolvedEntriesByDemandedState.remove(entry);
-                  if (!entry.hasItems())
-                  {
-                     unresolvedItems.remove(entry.getContext());
-                  }
-               }
-            }
-         }
-      }
-   }
-
-   private static class UnresolvedEntry
-   {
-      final ControllerContext context;
-      final List<DependencyItem> allItems;
-      final Map<ControllerState, Map<ControllerState, List<DependencyItem>>> itemsByState;
-      
-      static UnresolvedEntry create(ControllerContext context, List<DependencyItem> allItems)
-      {
-         Comparator<ControllerState> comparator = new ControllerStateComparator(context.getController().getStates());
-         //Index the dependencyItems
-         Map<ControllerState, Map<ControllerState, List<DependencyItem>>> itemsByState = new TreeMap<ControllerState, Map<ControllerState, List<DependencyItem>>>(comparator);
-         for (DependencyItem item : allItems)
-         {
-            if (item.getDependentState() == null)
-               throw new IllegalStateException("Null dependent state");
-            if (item.getWhenRequired() == null)
-               throw new IllegalStateException("Null required state");
-            Map<ControllerState, List<DependencyItem>> itemsByDependentState = itemsByState.get(item.getDependentState());
-            if (itemsByDependentState == null)
-            {
-               itemsByDependentState = new TreeMap<ControllerState, List<DependencyItem>>(comparator);
-               itemsByState.put(item.getDependentState(), itemsByDependentState);
-            }
-            
-            List<DependencyItem> itemsByRequiredState = itemsByDependentState.get(item.getWhenRequired());
-            if (itemsByRequiredState == null)
-            {
-               itemsByRequiredState = new ArrayList<DependencyItem>();
-               itemsByDependentState.put(item.getWhenRequired(), itemsByRequiredState);
-            }
-            itemsByRequiredState.add(item);
-         }
-         
-         return new UnresolvedEntry(context, allItems, itemsByState);
-      }
-      
-      UnresolvedEntry(ControllerContext context, List<DependencyItem> allItems, Map<ControllerState, Map<ControllerState, List<DependencyItem>>> itemsByState)
-      {
-         super();
-         this.context = context;
-         this.allItems = allItems;
-         this.itemsByState = itemsByState;
-      }
-
-      ControllerContext getContext()
-      {
-         return context;
-      }
-
-      Set<ControllerState> getDependentStates()
-      {
-         return itemsByState.keySet();
-      }
-      
-      Set<ControllerState> getRequiredStates(ControllerState dependentState)
-      {
-         Map<ControllerState, List<DependencyItem>> itemsByDependentState = itemsByState.get(dependentState);
-         if (itemsByDependentState == null)
-            return Collections.<ControllerState>emptySet();
-         
-         return itemsByDependentState.keySet();
-      }
-      
-      List<DependencyItem> getItemsByState(ControllerState dependentState, ControllerState requiredState)
-      {
-         Map<ControllerState, List<DependencyItem>> itemsByDependentState = itemsByState.get(dependentState);
-         if (itemsByDependentState != null)
-         {
-            List<DependencyItem> items = itemsByDependentState.get(requiredState);
-            if (items != null)
-               return items;
-         }
-         return Collections.<DependencyItem>emptyList();
-      }
-      
-      void removeItemByState(ControllerState dependentState, ControllerState requiredState, DependencyItem item)
-      {
-         Map<ControllerState, List<DependencyItem>> itemsByDependentState = itemsByState.get(dependentState);
-         if (itemsByDependentState != null)
-         {
-            List<DependencyItem> items = itemsByDependentState.get(requiredState);
-            items.remove(item);
-            allItems.remove(item);
-         }
-      }
-      
-      boolean hasItems()
-      {
-         return !allItems.isEmpty();
-      }
-   }
-      
-   
-   private static class ControllerStateComparator implements Comparator<ControllerState>
-   {
-      private final ControllerStateModel states;
-      
-      ControllerStateComparator(ControllerStateModel states)
-      {
-         this.states = states;
-      }
-      
-      public int compare(ControllerState o1, ControllerState o2)
-      {
-         if (o1.equals(o2))
-            return 0;
-         if (states.isBeforeState(o1, o2))
-            return -1;
-         return 1;
-      }
-      
-   }
-}

Deleted: 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 19:51:53 UTC (rev 99675)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -1,252 +0,0 @@
-/*
-* 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.dependency.plugins.resolver;
-
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.CopyOnWriteArrayList;
-
-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  
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class IndexingDependencyResolver2 extends AbstractDependencyResolver
-{  
-   //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)
-   {
-      super(controller);
-   }
-
-   @Override
-   public void registerContext(ControllerContext context)
-   {
-      DependencyInfo dependencies = context.getDependencyInfo();
-      if (dependencies != null)
-      {
-         Set<DependencyItem> items = dependencies.getIDependOn(null);
-         if (items != null && items.size() > 0)
-         {
-            for (DependencyItem item : items)
-            {
-               //FIXME should support other lookup than name
-               Object name = item.getIDependOn();
-               
-               ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = contextsByDependency.get(name);
-               if (contextsByState == null)
-               {
-                  contextsByState = new ConcurrentHashMap<ControllerState, List<ControllerContext>>();
-                  ConcurrentMap<ControllerState, List<ControllerContext>> old = contextsByDependency.putIfAbsent(name, contextsByState);
-                  if (old != null)
-                     contextsByState = old;
-               }
-               List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
-               if (contexts == null)
-               {
-                  contexts = new CopyOnWriteArrayList<ControllerContext>();
-                  List<ControllerContext> old = contextsByState.putIfAbsent(getDependentState(item), contexts);
-                  if (old != null)
-                     contexts = old;
-               }
-               contexts.add(context);
-            }
-         }
-      }
-   }
-
-   @Override
-   public void unregisterContext(ControllerContext context)
-   {
-      DependencyInfo dependencies = context.getDependencyInfo();
-      if (dependencies != null)
-      {
-         Set<DependencyItem> items = dependencies.getIDependOn(null);
-         if (items != null && items.size() > 0)
-         {
-            for (DependencyItem item : items)
-            {
-               //FIXME should support other lookup than name
-               Object name = item.getIDependOn();
-
-               ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = contextsByDependency.get(name);
-               if (contextsByState == null)
-                  throw new IllegalStateException("Inconsistent state");
-               List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
-               if (contexts == null)
-                  throw new IllegalStateException("Inconsistent state");
-               if (!contexts.remove(context))
-                  throw new IllegalStateException("Inconsistent state");
-            }
-         }
-      }
-   }
-   
-   @Override
-   public void resolveContexts(ControllerContext context, boolean trace)
-   {
-      ControllerState fromState = context.getState();      
-      
-      while (getStateModel().isAfterState(context.getRequiredState(), fromState))
-      {
-         ControllerState nextState = getStateModel().getNextState(fromState);
-         
-         if (checkCanInstall(context, fromState, nextState, trace) == false)
-            break;
-         try
-         {
-            checkAndEnableOnDemandForContext(context, trace);
-            if (plugin.canMoveToState(context, nextState))
-            {
-               if (incrementState(context, trace))
-                  fromState = context.getState();
-               else
-                  break;
-            }
-            else
-            {
-               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
-   public boolean resolveDependencies(ControllerContext ctx, ControllerState state)
-   {
-      return plugin.canMoveToState(ctx, state);
-   }
-
-   private Set<ControllerContext> getAllContextsDependentOn(ControllerContext incremented)
-   {
-      Set<ControllerContext> result = null;
-      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByDependentState = contextsByDependency.get(incremented.getName());
-      result = addContextsDependentOn(result, incremented.getState(), contextsByDependentState);
-      
-      Set<Object> aliases = incremented.getAliases();
-      if (aliases != null && aliases.size() > 0)
-      {
-         for (Object alias : aliases)
-         {
-            contextsByDependentState = contextsByDependency.get(alias);
-            result = addContextsDependentOn(result, incremented.getState(), contextsByDependentState);
-         }
-      }
-      return result;
-   }
-   
-   private Set<ControllerContext> addContextsDependentOn(Set<ControllerContext> result, ControllerState dependentState, Map<ControllerState, List<ControllerContext>> contextsByDependentState)
-   {
-      if (contextsByDependentState != null && !contextsByDependentState.isEmpty())
-      {
-         List<ControllerContext> contextsForName = contextsByDependentState.get(dependentState);
-         if (contextsForName != null && !contextsForName.isEmpty())
-         {
-            if (result == null)
-               result = new HashSet<ControllerContext>();
-            result.addAll(contextsForName);
-         }
-      }
-      return result;
-   }
-   
-   @Override
-   public void stateIncremented(ControllerContext incremented, boolean trace)
-   {
-      Set<ControllerContext> contexts = getAllContextsDependentOn(incremented);
-      if (contexts == null || contexts.size() == 0)
-      return;      
-      
-      for (ControllerContext context : contexts)
-      {
-         if (context.getDependencyInfo() != null)
-         {
-            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);
-            }
-         }
-      }
-   }
-
-}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/AbstractDependencyResolverMatcher.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,43 @@
+/*
+* 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.dependency.plugins.resolver.indexing;
+
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.dependency.spi.resolver.indexing.ResolverMatcher;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public abstract class AbstractDependencyResolverMatcher implements ResolverMatcher
+{
+   protected ControllerState getDependentState(DependencyItem item)
+   {
+      if (item.getDependentState() == null)
+         return ControllerState.INSTALLED;
+      
+      return item.getDependentState();
+   }
+
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolver.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,239 @@
+/*
+* 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.dependency.plugins.resolver.indexing;
+
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import org.jboss.dependency.plugins.AbstractDependencyItem;
+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.dependency.spi.resolver.indexing.ResolverMatcher;
+import org.jboss.logging.Logger;
+import org.jboss.util.collection.ConcurrentSet;
+
+/**
+ * Optimized  
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class IndexingDependencyResolver extends AbstractDependencyResolver
+{  
+   Logger log = Logger.getLogger(this.getClass());
+   //Supply
+   //Qualifiers (Need some tests doing qualifiers with the dependency last)
+   
+   
+   //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 Map<Class<? extends DependencyItem>, ResolverMatcher> matchers = new ConcurrentHashMap<Class<? extends DependencyItem>, ResolverMatcher>();
+   
+   private final NameDependencyResolverMatcher nameMatcher = new NameDependencyResolverMatcher();
+      
+   public IndexingDependencyResolver(Controller controller)
+   {
+      super(controller);
+      matchers.put(AbstractDependencyItem.class, nameMatcher);
+   }
+
+   public void addMatcher(Class<? extends DependencyItem> clazz, ResolverMatcher matcher)
+   {
+      matchers.put(clazz, matcher);
+   }
+   
+   public void removeMatcher(Class<? extends DependencyItem> clazz)
+   {
+      matchers.remove(clazz);
+   }
+   
+   private ResolverMatcher getMatcherForDependencyItem(DependencyItem item)
+   {
+      if (item == null)
+         throw new IllegalArgumentException("Null item");
+      ResolverMatcher matcher = matchers.get(item.getClass());
+      
+      if (matcher == null)
+      {
+         log.warn("No matcher found for " + item.getClass() + ". Defaulting to " + NameDependencyResolverMatcher.class.getName() + " which is probably wrong");
+         matcher = nameMatcher;
+      }
+      
+      return matcher;
+   }
+   
+   @Override
+   public void registerContext(ControllerContext context)
+   {
+      DependencyInfo dependencies = context.getDependencyInfo();
+      if (dependencies != null)
+      {
+         Set<DependencyItem> items = dependencies.getIDependOn(null);
+         if (items != null && items.size() > 0)
+         {
+            for (DependencyItem item : items)
+            {
+               ResolverMatcher matcher = getMatcherForDependencyItem(item);
+               matcher.registerDependency(context, item);
+            }
+         }
+      }
+   }
+
+   @Override
+   public void unregisterContext(ControllerContext context)
+   {
+      DependencyInfo dependencies = context.getDependencyInfo();
+      if (dependencies != null)
+      {
+         Set<DependencyItem> items = dependencies.getIDependOn(null);
+         if (items != null && items.size() > 0)
+         {
+            for (DependencyItem item : items)
+            {
+               ResolverMatcher matcher = getMatcherForDependencyItem(item);
+               matcher.unregisterDependency(context, item);
+            }
+         }
+      }
+   }
+   
+   @Override
+   public void resolveContexts(ControllerContext context, boolean trace)
+   {
+      ControllerState fromState = context.getState();      
+      
+      while (getStateModel().isAfterState(context.getRequiredState(), fromState))
+      {
+         ControllerState nextState = getStateModel().getNextState(fromState);
+         
+         if (checkCanInstall(context, fromState, nextState, trace) == false)
+            break;
+         try
+         {
+            checkAndEnableOnDemandForContext(context, trace);
+            if (canMoveToState(context, nextState))
+            {
+               if (incrementState(context, trace))
+                  fromState = context.getState();
+               else
+                  break;
+            }
+            else
+            {
+               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
+   public boolean resolveDependencies(ControllerContext ctx, ControllerState state)
+   {
+      return canMoveToState(ctx, state);
+   }
+
+   private Set<ControllerContext> getAllContextsDependentOn(ControllerContext incremented)
+   {
+      Set<ControllerContext> result = null;
+      for (ResolverMatcher matcher : matchers.values())
+      {
+         Set<ControllerContext> contexts = matcher.getMatchingContexts(incremented);
+         if (contexts != null)
+         {
+            if (result == null)
+               result = new HashSet<ControllerContext>();
+            result.addAll(contexts);
+         }
+      }
+      return result;
+   }
+   
+   @Override
+   public void stateIncremented(ControllerContext incremented, boolean trace)
+   {
+      Set<ControllerContext> contexts = getAllContextsDependentOn(incremented);
+      if (contexts == null || contexts.size() == 0)
+      return;      
+      
+      for (ControllerContext context : contexts)
+      {
+         if (context.getDependencyInfo() != null)
+         {
+            resolveContexts(context, trace);
+         }
+      }
+   }
+
+   @Override
+   public void enableOnDemand(ControllerContext context, boolean trace)
+   {
+      enabledOnDemandContexts.add(context);
+   }
+   
+   private void checkAndEnableOnDemandForContext(ControllerContext context, boolean trace) throws Throwable
+   {
+      if (context.getMode() == ControllerMode.ON_DEMAND)
+      {
+         if (nameMatcher.hasDependencies(context.getName()))
+            getController().enableOnDemand(context);
+         
+         if (context.getAliases() != null && context.getAliases().size() > 0)
+         {
+            for (Object alias : context.getAliases())
+            {
+               if (nameMatcher.hasDependencies(alias))
+                  getController().enableOnDemand(context);
+            }
+         }
+      }
+   }
+
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolverFactory.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolverFactory.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/IndexingDependencyResolverFactory.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,79 @@
+/*
+* 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.dependency.plugins.resolver.indexing;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+import org.jboss.dependency.plugins.AbstractDependencyResolver;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.dependency.spi.resolver.DependencyResolverFactory;
+import org.jboss.dependency.spi.resolver.indexing.ResolverMatcherFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class IndexingDependencyResolverFactory implements DependencyResolverFactory
+{
+   private final Map<Class<? extends DependencyItem>, ResolverMatcherFactory> matchers = new HashMap<Class<? extends DependencyItem>, ResolverMatcherFactory>();
+   
+   private Map<IndexingDependencyResolver, Boolean> weakResolvers = new WeakHashMap<IndexingDependencyResolver, Boolean>();
+
+   public synchronized AbstractDependencyResolver createResolver(Controller controller)
+   {
+      IndexingDependencyResolver resolver = new IndexingDependencyResolver(controller);
+      for (Map.Entry<Class<? extends DependencyItem>, ResolverMatcherFactory> entry : matchers.entrySet())
+      {
+         resolver.addMatcher(entry.getKey(), entry.getValue().createMatcher());
+      }
+      return resolver;
+   }
+   
+   public synchronized void addMatcher(Class<? extends DependencyItem> itemClass, ResolverMatcherFactory matcherFactory)
+   {
+      if (itemClass == null)
+         throw new IllegalArgumentException("Null itemClass");
+      if (matcherFactory == null)
+         throw new IllegalArgumentException("Null matcherFactory");
+      if (matchers.containsKey(itemClass))
+         throw new IllegalArgumentException("Already have a matcher for class " + itemClass);
+
+      matchers.put(itemClass, matcherFactory);
+      for (IndexingDependencyResolver resolver : weakResolvers.keySet())
+      {
+         resolver.addMatcher(itemClass, matcherFactory.createMatcher());
+      }
+   }
+   
+   public synchronized void removeMatcher(Class<? extends DependencyItem> itemClass)
+   {
+      matchers.remove(itemClass);
+      for (IndexingDependencyResolver resolver : weakResolvers.keySet())
+      {
+         resolver.removeMatcher(itemClass);
+      }
+   }
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/indexing/NameDependencyResolverMatcher.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,119 @@
+/*
+* 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.dependency.plugins.resolver.indexing;
+
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+import org.jboss.dependency.spi.DependencyItem;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class NameDependencyResolverMatcher extends AbstractDependencyResolverMatcher
+{
+   private final ConcurrentMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>> contextsByDependency = new ConcurrentHashMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>>();
+
+   public Set<ControllerContext> getMatchingContexts(ControllerContext context)
+   {
+      Set<ControllerContext> result = null;
+      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByDependentState = contextsByDependency.get(context.getName());
+      result = addContextsDependentOn(result, context.getState(), contextsByDependentState);
+      
+      Set<Object> aliases = context.getAliases();
+      if (aliases != null && aliases.size() > 0)
+      {
+         for (Object alias : aliases)
+         {
+            contextsByDependentState = contextsByDependency.get(alias);
+            result = addContextsDependentOn(result, context.getState(), contextsByDependentState);
+         }
+      }
+      return result;
+   }
+   
+   private Set<ControllerContext> addContextsDependentOn(Set<ControllerContext> result, ControllerState dependentState, Map<ControllerState, List<ControllerContext>> contextsByDependentState)
+   {
+      if (contextsByDependentState != null && !contextsByDependentState.isEmpty())
+      {
+         List<ControllerContext> contextsForName = contextsByDependentState.get(dependentState);
+         if (contextsForName != null && !contextsForName.isEmpty())
+         {
+            if (result == null)
+               result = new HashSet<ControllerContext>();
+            result.addAll(contextsForName);
+         }
+      }
+      return result;
+   }
+
+   public void registerDependency(ControllerContext owner, DependencyItem item)
+   {
+      Object name = item.getIDependOn();
+      
+      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = contextsByDependency.get(name);
+      if (contextsByState == null)
+      {
+         contextsByState = new ConcurrentHashMap<ControllerState, List<ControllerContext>>();
+         ConcurrentMap<ControllerState, List<ControllerContext>> old = contextsByDependency.putIfAbsent(name, contextsByState);
+         if (old != null)
+            contextsByState = old;
+      }
+      List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
+      if (contexts == null)
+      {
+         contexts = new CopyOnWriteArrayList<ControllerContext>();
+         List<ControllerContext> old = contextsByState.putIfAbsent(getDependentState(item), contexts);
+         if (old != null)
+            contexts = old;
+      }
+      contexts.add(owner);
+   }
+
+   public void unregisterDependency(ControllerContext owner, DependencyItem item)
+   {
+      Object name = item.getIDependOn();
+
+      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = contextsByDependency.get(name);
+      if (contextsByState == null)
+         throw new IllegalStateException("Inconsistent state");
+      List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
+      if (contexts == null)
+         throw new IllegalStateException("Inconsistent state");
+      if (!contexts.remove(owner))
+         throw new IllegalStateException("Inconsistent state");
+   }
+
+   public boolean hasDependencies(Object name)
+   {
+      return contextsByDependency.get(name) != null;      
+   }
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolver.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolver.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolver.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,231 @@
+/*
+* 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.dependency.plugins.resolver.standard;
+
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Set;
+
+import org.jboss.dependency.plugins.AbstractDependencyResolver;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.ControllerState;
+
+/**
+ * This is the legacy dependency resolution algorithm broken out
+ * from AbstractController
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class StandardDependencyResolver extends AbstractDependencyResolver
+{
+   public StandardDependencyResolver(Controller controller)
+   {
+      super(controller);
+   }
+
+   /**
+    * Resolve unresolved contexts<p>
+    * <p/>
+    * This method must be invoked with the write lock taken
+    *
+    * @param context the context being installed
+    * @param trace whether trace is enabled
+    */
+   public void resolveContexts(ControllerContext context, boolean trace)
+   {
+      boolean wasOnDemandEnabled = false;
+      boolean resolutions = true;
+      while (resolutions || isOnDemandEnabled())
+      {
+         if (isOnDemandEnabled())
+            wasOnDemandEnabled = true;
+         
+         setOnDemandEnabled(false);
+         resolutions = false;
+         for (ControllerState fromState : getStateModel())
+         {
+            ControllerState toState = getStateModel().getNextState(fromState);
+            if (resolveContexts(fromState, toState, trace))
+            {
+               resolutions = true;
+               break;
+            }
+         }
+      }
+
+      if (trace)
+      {
+         for (ControllerState state : getStateModel())
+         {
+            ControllerState nextState = getStateModel().getNextState(state);
+            Set<ControllerContext> stillUnresolved = getContextsByState(state);
+            if (stillUnresolved.isEmpty() == false)
+            {
+               for (ControllerContext ctx : stillUnresolved)
+               {
+                  if (advance(ctx))
+                     log.trace("Still unresolved " + nextState.getStateString() + ": " + ctx);
+               }
+            }
+         }
+      }
+
+      // resolve child controllers
+      resolveChildControllers(context, trace);
+      
+      if (wasOnDemandEnabled)
+      {
+         resolveParentController(context, trace);
+      }
+   }
+
+   protected boolean resolveContexts(ControllerState fromState, ControllerState toState, boolean trace)
+   {
+      boolean resolutions = false;
+      Set<ControllerContext> unresolved = getContextsByState(fromState);
+      Set<ControllerContext> resolved = resolveContexts(unresolved, fromState, toState, trace);
+      if (resolved.isEmpty() == false)
+      {
+         Set<ControllerContext> toProcess = new HashSet<ControllerContext>();
+         for (ControllerContext context : resolved)
+         {
+            Object name = context.getName();
+            if (fromState.equals(context.getState()) == false)
+            {
+               if (trace)
+                  log.trace("Skipping already installed " + name + " for " + toState.getStateString());
+               removeInstalling(context);
+            }
+            else
+            {
+               toProcess.add(context);
+            }
+         }
+         try
+         {
+            if (toProcess.isEmpty() == false)
+            {
+               for (Iterator<ControllerContext> iter = toProcess.iterator(); iter.hasNext(); )
+               {
+                  ControllerContext context = iter.next();
+                  iter.remove();
+                  Object name = context.getName();
+                  try
+                  {
+                     if (fromState.equals(context.getState()) == false)
+                     {
+                        if (trace)
+                           log.trace("Skipping already installed " + name + " for " + toState.getStateString());
+                     }
+                     else
+                     {
+                        if (trace)
+                           log.trace("Dependencies resolved " + name + " for " + toState.getStateString());
+
+                        if (incrementState(context, trace))
+                        {
+                           resolutions = true;
+                           if (trace)
+                              log.trace(name + " " + toState.getStateString());
+                        }
+                        
+                     }
+                  }
+                  finally
+                  {
+                     removeInstalling(context);
+                  }
+               }
+            }
+         }
+         finally
+         {
+            // If we get here something has gone seriously wrong,
+            // but try to tidyup as much state as possible
+            if (toProcess.isEmpty() == false)
+            {
+               for (ControllerContext context : toProcess)
+                  removeInstalling(context);
+            }
+         }
+      }
+
+      return resolutions;
+   }
+
+   protected Set<ControllerContext> resolveContexts(Set<ControllerContext> contexts, ControllerState fromState, ControllerState toState, boolean trace)
+   {
+      HashSet<ControllerContext> result = new HashSet<ControllerContext>();
+
+      if (contexts.isEmpty() == false)
+      {
+         for (ControllerContext ctx : contexts)
+         {
+            if (checkCanInstall(ctx, fromState, toState, trace))
+            {
+               try
+               {
+                  if (resolveDependencies(ctx, toState))
+                     result.add(ctx);
+                  else
+                     removeInstalling(ctx);
+               }
+               catch (Throwable error)
+               {
+                  errorResolvingContext(ctx, fromState, toState, error, trace);
+               }
+            }
+         }
+      }
+
+      return result;
+   }
+
+   public boolean resolveDependencies(ControllerContext ctx, ControllerState state)
+   {
+      return canMoveToState(ctx, state);
+   }
+
+   @Override
+   public void stateIncremented(ControllerContext context, boolean trace)
+   {
+      //Noop
+   }
+
+   @Override
+   public void registerContext(ControllerContext context)
+   {
+   }
+
+   @Override
+   public void unregisterContext(ControllerContext context)
+   {
+   }
+
+   @Override
+   public void enableOnDemand(ControllerContext context, boolean trace)
+   {
+   }
+
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolverFactory.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolverFactory.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/standard/StandardDependencyResolverFactory.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,39 @@
+/*
+* 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.dependency.plugins.resolver.standard;
+
+import org.jboss.dependency.plugins.AbstractDependencyResolver;
+import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.resolver.DependencyResolverFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class StandardDependencyResolverFactory implements DependencyResolverFactory
+{
+   public AbstractDependencyResolver createResolver(Controller controller)
+   {
+      return new StandardDependencyResolver(controller);
+   }
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/DependencyResolverFactory.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/DependencyResolverFactory.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/DependencyResolverFactory.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,35 @@
+/*
+* 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.dependency.spi.resolver;
+
+import org.jboss.dependency.plugins.AbstractDependencyResolver;
+import org.jboss.dependency.spi.Controller;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface DependencyResolverFactory
+{
+   AbstractDependencyResolver createResolver(Controller controller);
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcher.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcher.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,39 @@
+/*
+* 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.dependency.spi.resolver.indexing;
+
+import java.util.Set;
+
+import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.dependency.spi.DependencyItem;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ResolverMatcher
+{
+   void registerDependency(ControllerContext owner, DependencyItem item);
+   void unregisterDependency(ControllerContext owner, DependencyItem item);
+   Set<ControllerContext> getMatchingContexts(ControllerContext context);
+}

Added: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcherFactory.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcherFactory.java	                        (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/spi/resolver/indexing/ResolverMatcherFactory.java	2010-01-20 20:36:31 UTC (rev 99676)
@@ -0,0 +1,32 @@
+/*
+* 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.dependency.spi.resolver.indexing;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public interface ResolverMatcherFactory
+{
+   ResolverMatcher createMatcher();
+}




More information about the jboss-cvs-commits mailing list