[jboss-cvs] JBossAS SVN: r99765 - projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 21 15:02:01 EST 2010


Author: kabir.khan at jboss.com
Date: 2010-01-21 15:02:00 -0500 (Thu, 21 Jan 2010)
New Revision: 99765

Added:
   projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcherFactory.java
Modified:
   projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/IndexingKernelDependencyResolverFactory.java
   projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java
Log:
Simple supply/demand support

Modified: projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/IndexingKernelDependencyResolverFactory.java
===================================================================
--- projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/IndexingKernelDependencyResolverFactory.java	2010-01-21 19:58:18 UTC (rev 99764)
+++ projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/IndexingKernelDependencyResolverFactory.java	2010-01-21 20:02:00 UTC (rev 99765)
@@ -34,6 +34,7 @@
    public IndexingKernelDependencyResolverFactory()
    {
       addMatcher(new ContextualInjectionDependencyResolverMatcherFactory());
+      addMatcher(new SupplyDemandDependencyResolverMatcherFactory());
    }
    
 }

Modified: projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java
===================================================================
--- projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java	2010-01-21 19:58:18 UTC (rev 99764)
+++ projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcher.java	2010-01-21 20:02:00 UTC (rev 99765)
@@ -33,61 +33,33 @@
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
+import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
+ * Simple SupplyDemandDependencyResolverMatcher.
+ * This iteration only sees if the controller context has supplies and records which dependencies have demands
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
 public class SupplyDemandDependencyResolverMatcher extends AbstractDependencyResolverMatcher
 {
-   private final ConcurrentMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>> contextsByDemand = new ConcurrentHashMap<Object, ConcurrentMap<ControllerState, List<ControllerContext>>>();
+   private final ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = new ConcurrentHashMap<ControllerState, List<ControllerContext>>();
 
    public Set<ControllerContext> getMatchingContexts(ControllerContext context)
    {
-      Set<ControllerContext> result = null;
-      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByDependentState = contextsByDemand.get(context.getName());
-      result = addContextsDependentOn(result, context.getState(), contextsByDependentState);
+      if (context instanceof KernelControllerContext == false)
+         return null;
       
-      Set<Object> aliases = context.getAliases();
-      if (aliases != null && aliases.size() > 0)
-      {
-         for (Object alias : aliases)
-         {
-            contextsByDependentState = contextsByDemand.get(alias);
-            result = addContextsDependentOn(result, context.getState(), contextsByDependentState);
-         }
-      }
-      return result;
+      List<ControllerContext> contexts = contextsByState.get(context.getState());
+      if (contexts != null && contexts.size() > 0)
+         return new HashSet<ControllerContext>(contexts);
+      
+      return null;
    }
    
-   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 = contextsByDemand.get(name);
-      if (contextsByState == null)
-      {
-         contextsByState = new ConcurrentHashMap<ControllerState, List<ControllerContext>>();
-         ConcurrentMap<ControllerState, List<ControllerContext>> old = contextsByDemand.putIfAbsent(name, contextsByState);
-         if (old != null)
-            contextsByState = old;
-      }
       List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
       if (contexts == null)
       {
@@ -103,18 +75,10 @@
    {
       Object name = item.getIDependOn();
 
-      ConcurrentMap<ControllerState, List<ControllerContext>> contextsByState = contextsByDemand.get(name);
-      if (contextsByState == null)
-         throw new IllegalStateException("Inconsistent state");
-      List<ControllerContext> contexts = contextsByState.get(getDependentState(item));
+      List<ControllerContext> contexts = contextsByState.get(name);
       if (contexts == null)
          throw new IllegalStateException("Inconsistent state");
       if (!contexts.remove(owner))
          throw new IllegalStateException("Inconsistent state");
    }
-
-   public boolean hasDependencies(Object name)
-   {
-      return contextsByDemand.get(name) != null;      
-   }
 }

Added: projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcherFactory.java
===================================================================
--- projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcherFactory.java	                        (rev 0)
+++ projects/kernel/branches/resolver/kernel/src/main/java/org/jboss/kernel/plugins/resolver/indexing/SupplyDemandDependencyResolverMatcherFactory.java	2010-01-21 20:02:00 UTC (rev 99765)
@@ -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.kernel.plugins.resolver.indexing;
+
+import org.jboss.beans.metadata.plugins.AbstractDemandMetaData.DemandDependencyItem;
+import org.jboss.dependency.spi.resolver.indexing.DependencyResolverMatcherFactory;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SupplyDemandDependencyResolverMatcherFactory implements DependencyResolverMatcherFactory<DemandDependencyItem>
+{
+   public SupplyDemandDependencyResolverMatcher createMatcher()
+   {
+      return new SupplyDemandDependencyResolverMatcher();
+   }
+
+   public Class<DemandDependencyItem> getHandled()
+   {
+      return DemandDependencyItem.class;
+   }
+}




More information about the jboss-cvs-commits mailing list