[jboss-cvs] JBossAS SVN: r99603 - 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
Tue Jan 19 13:53:33 EST 2010
Author: kabir.khan at jboss.com
Date: 2010-01-19 13:53:33 -0500 (Tue, 19 Jan 2010)
New Revision: 99603
Added:
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java
Removed:
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/UnresolvedDependenciesIncrementContextPlugin.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
projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java
Log:
Better initial idea. Precalculate all dependencies when installing the context, currently only works with name based lookups. Need something to handle supply/demand, contextual injection etc.
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-19 18:51:39 UTC (rev 99602)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java 2010-01-19 18:53:33 UTC (rev 99603)
@@ -39,7 +39,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.IndexingDependencyResolver;
+import org.jboss.dependency.plugins.resolver.IndexingDependencyResolver2;
import org.jboss.dependency.plugins.tracker.AbstractContextRegistry;
import org.jboss.dependency.spi.CallbackItem;
import org.jboss.dependency.spi.Controller;
@@ -75,7 +75,7 @@
private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
//AbstractDependencyResolver resolver = new DefaultDependencyResolver(this);
- AbstractDependencyResolver resolver = new IndexingDependencyResolver(this);
+ AbstractDependencyResolver resolver = new IndexingDependencyResolver2(this);
/**
* The executor used to install ASYNCHRONOUS contexts. It must have a saturation policy of
@@ -827,6 +827,7 @@
log.trace("Dependencies for " + name + ": " + dependsOn);
}
+ resolver.registerContext(context);
boolean ok = incrementState(context, trace);
if (ok)
{
@@ -1923,7 +1924,9 @@
{
if (name == null)
throw new IllegalArgumentException("Null name");
- allContexts.remove(name);
+ ControllerContext context = allContexts.remove(name);
+ if (context != null)
+ resolver.unregisterContext(context);
}
// --- alias dependency
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-19 18:51:39 UTC (rev 99602)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/AbstractDependencyResolver.java 2010-01-19 18:53:33 UTC (rev 99603)
@@ -140,4 +140,8 @@
public abstract boolean resolveDependencies(ControllerContext ctx, ControllerState state);
public abstract void stateIncremented(ControllerContext context, boolean trace);
+
+ public abstract void registerContext(ControllerContext context);
+
+ public abstract void unregisterContext(ControllerContext context);
}
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-19 18:51:39 UTC (rev 99602)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/DefaultDependencyResolver.java 2010-01-19 18:53:33 UTC (rev 99603)
@@ -29,7 +29,6 @@
import org.jboss.dependency.spi.Controller;
import org.jboss.dependency.spi.ControllerContext;
import org.jboss.dependency.spi.ControllerState;
-import org.jboss.dependency.spi.DependencyInfo;
/**
* This is the legacy dependency resolution algorithm broken out
@@ -216,4 +215,14 @@
//Noop
}
+ @Override
+ public void registerContext(ControllerContext context)
+ {
+ }
+
+ @Override
+ public void unregisterContext(ControllerContext context)
+ {
+ }
+
}
Added: 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 (rev 0)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/IndexingDependencyResolver2.java 2010-01-19 18:53:33 UTC (rev 99603)
@@ -0,0 +1,168 @@
+/*
+* 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.List;
+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.ControllerState;
+import org.jboss.dependency.spi.DependencyInfo;
+import org.jboss.dependency.spi.DependencyItem;
+
+/**
+ * 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 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(item.getDependentState());
+ if (contexts == null)
+ {
+ contexts = new CopyOnWriteArrayList<ControllerContext>();
+ List<ControllerContext> old = contextsByState.putIfAbsent(item.getDependentState(), 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(item.getDependentState());
+ 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();
+ ControllerState toState = context.getRequiredState();
+ while (getStateModel().isAfterState(toState, fromState))
+ {
+ ControllerState nextState = getStateModel().getNextState(fromState);
+ if (plugin.canMoveToState(context, nextState))
+ {
+ if (incrementState(context, trace))
+ fromState = context.getState();
+ else
+ break;
+ }
+ else
+ {
+ break;
+ }
+ }
+ }
+
+ @Override
+ public boolean resolveDependencies(ControllerContext ctx, ControllerState state)
+ {
+ return plugin.canMoveToState(ctx, state);
+ }
+
+ @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;
+
+ for (ControllerContext context : contexts)
+ {
+ if (context.getDependencyInfo() != null)
+ {
+ ControllerState nextState = getStateModel().getNextState(context.getState());
+
+ // TODO Check that it is not being installed
+ resolveContexts(context, trace);
+ }
+ }
+ }
+
+}
Deleted: projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/UnresolvedDependenciesIncrementContextPlugin.java
===================================================================
--- projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/UnresolvedDependenciesIncrementContextPlugin.java 2010-01-19 18:51:39 UTC (rev 99602)
+++ projects/kernel/branches/resolver/dependency/src/main/java/org/jboss/dependency/plugins/resolver/UnresolvedDependenciesIncrementContextPlugin.java 2010-01-19 18:53:33 UTC (rev 99603)
@@ -1,66 +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.List;
-import java.util.Set;
-
-import org.jboss.dependency.spi.ControllerContext;
-import org.jboss.dependency.spi.ControllerState;
-import org.jboss.dependency.spi.DependencyInfo;
-import org.jboss.dependency.spi.DependencyItem;
-
-/**
- *
- * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
- * @version $Revision: 1.1 $
- */
-public class UnresolvedDependenciesIncrementContextPlugin implements IncrementContextPlugin<List<DependencyItem>>
-{
- public List<DependencyItem> canMoveToState(ControllerContext ctx, ControllerState state)
- {
- List<DependencyItem> unresolved = null;
- DependencyInfo dependencies = ctx.getDependencyInfo();
- if (dependencies != null)
- {
- Set<DependencyItem> items = dependencies.getUnresolvedDependencies(state);
- if (items.isEmpty() == false)
- {
- for (DependencyItem item : items)
- {
- if (item.resolve(ctx.getController()) == false)
- {
- if (unresolved == null)
- unresolved = new ArrayList<DependencyItem>();
- unresolved.add(item);
- }
- }
- }
- }
- if (unresolved != null)
- return unresolved;
- return Collections.<DependencyItem>emptyList();
- }
-
-}
More information about the jboss-cvs-commits
mailing list