[jboss-cvs] JBossAS SVN: r96646 - in projects/kernel/trunk: dependency/src/main/java/org/jboss/dependency/plugins/helpers and 6 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 20 11:42:42 EST 2009


Author: alesj
Date: 2009-11-20 11:42:40 -0500 (Fri, 20 Nov 2009)
New Revision: 96646

Added:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/ContextTracker.java
Modified:
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionDependencyItem.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionValueMetaData.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAttributeCallbackItem.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextKernelRegistryPlugin.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassSingleCallbackItem.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ScopedKernelController.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/StatelessKernelController.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/validation/AbstractKernelBeanValidator.java
   projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/spi/dependency/KernelController.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java
Log:
[JBKERNEL-61]; move context tracking logic to dependency module level.


Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -40,6 +40,7 @@
 import org.jboss.dependency.plugins.action.ControllerContextAction;
 import org.jboss.dependency.plugins.action.SimpleControllerContextAction;
 import org.jboss.dependency.spi.CallbackItem;
+import org.jboss.dependency.spi.ContextTracker;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerContextActions;
@@ -64,7 +65,7 @@
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision$
  */
-public class AbstractController extends JBossObject implements Controller, GraphController, AbstractControllerMBean, AsynchronousController
+public class AbstractController extends JBossObject implements Controller, GraphController, AbstractControllerMBean, AsynchronousController, ContextTracker
 {
    /** The lock */
    private ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
@@ -114,7 +115,10 @@
    
    /** The install stats */
    private volatile StateStatistics installStats = null;
-   
+
+   /** The contexts by class Map<Class, Set<ControllerContext>> */
+   private Map<Class<?>, ClassContext> contextsByClass = new ConcurrentHashMap<Class<?>, ClassContext>();
+
    /**
     * Create an abstract controller
     */
@@ -504,6 +508,9 @@
       try
       {
          ControllerContext result = getRegisteredControllerContext(name, false);
+         if (result == null && name instanceof Class) // check type matching
+            result = getContextByClass((Class<?>)name);
+
          if (result != null && state != null && stateModel.isBeforeState(result.getState(), state))
          {
             return null;
@@ -2525,4 +2532,195 @@
          }
       }
    }
+
+   /**
+    * Get contexts by class.
+    * This method should be taken with read lock.
+    *
+    * @param clazz the class type
+    * @return contexts by class
+    */
+   protected Set<ControllerContext> getContexts(Class<?> clazz)
+   {
+      ClassContext classContext = contextsByClass.get(clazz);
+      if (classContext != null)
+      {
+         if (log.isTraceEnabled())
+         {
+            log.trace("Marking class " + clazz + " as used.");
+         }
+         classContext.used = true;
+         return classContext.contexts;
+      }
+      return null;
+   }
+
+   /**
+    * Get instantiated contexts.
+    *
+    * @param clazz the class to match
+    * @return all instantiated contexts whose target is instance of this class clazz param
+    */
+   public Set<ControllerContext> getInstantiatedContexts(Class<?> clazz)
+   {
+      lockRead();
+      try
+      {
+         Set<ControllerContext> contexts = getContexts(clazz);
+         return contexts != null && contexts.isEmpty() == false ? Collections.unmodifiableSet(contexts) : null;
+      }
+      finally
+      {
+         unlockRead();
+      }
+   }
+
+   public Set<ControllerContext> getContexts(Class<?> clazz, ControllerState state)
+   {
+      lockRead();
+      try
+      {
+         Set<ControllerContext> contexts = getContexts(clazz);
+         if (contexts != null && contexts.isEmpty() == false)
+         {
+            Set<ControllerContext> kccs = new HashSet<ControllerContext>();
+            for(ControllerContext context : contexts)
+            {
+               if (getStates().isBeforeState(context.getState(), state) == false)
+                  kccs.add(context);
+            }
+            return kccs;
+         }
+         else
+            return null;
+      }
+      finally
+      {
+         unlockRead();
+      }
+   }
+
+   public void addInstantiatedContext(ControllerContext context)
+   {
+      prepareToTraverse(context, true);
+   }
+
+   public void removeInstantiatedContext(ControllerContext context)
+   {
+      prepareToTraverse(context, false);
+   }
+
+   protected void prepareToTraverse(ControllerContext context, boolean addition)
+   {
+      lockWrite();
+      try
+      {
+         Object target = addition ? context.getTarget() : context.ungetTarget();
+         if (target != null)
+         {
+            traverseBean(context, target.getClass(), addition, log.isTraceEnabled());
+         }
+      }
+      finally
+      {
+         unlockWrite();
+      }
+   }
+
+   /**
+    * Traverse over target and map it to all its superclasses
+    * and interfaces - using recursion.
+    *
+    * @param context context whose target is instance of clazz
+    * @param clazz current class to map context to
+    * @param addition whether this is an addition
+    * @param trace whether trace is enabled
+    */
+   protected void traverseBean(ControllerContext context, Class<?> clazz, boolean addition, boolean trace)
+   {
+      if (clazz == null || clazz == Object.class)
+      {
+         return;
+      }
+      ClassContext classContext = contextsByClass.get(clazz);
+      if (addition)
+      {
+         if (classContext == null)
+         {
+            classContext = new ClassContext();
+            classContext.contexts = new HashSet<ControllerContext>();
+            contextsByClass.put(clazz, classContext);
+         }
+         else if (classContext.used)
+         {
+            log.debug("Additional matching bean - contextual injection already used for class: " + clazz);
+         }
+         if (trace)
+         {
+            log.trace("Mapping contex " + context + " to class: " + clazz);
+         }
+         classContext.contexts.add(context);
+      }
+      else
+      {
+         if (classContext != null)
+         {
+            if (trace)
+            {
+               log.trace("Removing contex " + context + " to class: " + clazz);
+            }
+            classContext.contexts.remove(context);
+         }
+      }
+      // traverse superclass
+      traverseBean(context, clazz.getSuperclass(), addition, trace);
+      Class<?>[] interfaces = clazz.getInterfaces();
+      // traverse interfaces
+      for(Class<?> intface : interfaces)
+      {
+         traverseBean(context, intface, addition, trace);
+      }
+   }
+
+   private static class ClassContext
+   {
+      private boolean used;
+      private Set<ControllerContext> contexts;
+   }
+
+   /**
+    * If zero or multiple instances match class clazz
+    * a warning is issued, but no throwable is thrown
+    *
+    * @param clazz the class to match
+    * @return context whose target is instance of this class clazz param or null if zero or multiple such instances
+    */
+   public ControllerContext getContextByClass(Class<?> clazz)
+   {
+      Set<ControllerContext> contexts = getInstantiatedContexts(clazz);
+      int numberOfMatchingBeans = 0;
+      if (contexts != null)
+      {
+         numberOfMatchingBeans = contexts.size();
+      }
+
+      if (log.isTraceEnabled())
+      {
+         log.trace("Checking for contextual injection, current matches: " + numberOfMatchingBeans + " - " + clazz);
+      }
+
+      if (numberOfMatchingBeans != 1)
+      {
+         if (numberOfMatchingBeans > 1)
+         {
+            log.warn("Multiple beans match class type [enable trace log for details]: " + clazz);
+            if (log.isTraceEnabled())
+            {
+               log.trace("Matching contexts: " + contexts);
+            }
+         }
+         return null;
+      }
+      return contexts.iterator().next();
+   }
 }

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/ScopedController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -22,6 +22,8 @@
 package org.jboss.dependency.plugins;
 
 import java.util.concurrent.Executor;
+import java.util.Set;
+import java.util.HashSet;
 
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
@@ -154,6 +156,58 @@
          super.removeControllerContext(context);
    }
 
+   public Set<ControllerContext> getInstantiatedContexts(Class<?> clazz)
+   {
+      lockRead();
+      try
+      {
+         Set<ControllerContext> contexts = new HashSet<ControllerContext>();
+         Set<ControllerContext> currentContexts = super.getInstantiatedContexts(clazz);
+         if (currentContexts != null && currentContexts.size() > 0)
+         {
+            contexts.addAll(currentContexts);
+         }
+         if (getParentController() != null)
+         {
+            Set<ControllerContext> parentContexts = getParentController().getInstantiatedContexts(clazz);
+            if (parentContexts != null && parentContexts.size() > 0)
+            {
+               contexts.addAll(parentContexts);
+            }
+         }
+         return contexts.size() > 0 ? contexts : null;
+      }
+      finally{
+         unlockRead();
+      }
+   }
+
+   public Set<ControllerContext> getContexts(Class<?> clazz, ControllerState state)
+   {
+      lockRead();
+      try
+      {
+         Set<ControllerContext> contexts = new HashSet<ControllerContext>();
+         Set<ControllerContext> currentContexts = super.getContexts(clazz, state);
+         if (currentContexts != null && currentContexts.size() > 0)
+         {
+            contexts.addAll(currentContexts);
+         }
+         if (getParentController() != null)
+         {
+            Set<ControllerContext> parentContexts = getParentController().getContexts(clazz, state);
+            if (parentContexts != null && parentContexts.size() > 0)
+            {
+               contexts.addAll(parentContexts);
+            }
+         }
+         return contexts.size() > 0 ? contexts : null;
+      }
+      finally{
+         unlockRead();
+      }
+   }
+
    /**
     * Add scope key info to toString.
     *

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/helpers/StatelessController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -21,10 +21,14 @@
 */
 package org.jboss.dependency.plugins.helpers;
 
+import java.util.Collections;
+import java.util.Set;
+
+import org.jboss.dependency.plugins.AbstractController;
+import org.jboss.dependency.spi.ContextTracker;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
-import org.jboss.dependency.plugins.AbstractController;
 
 /**
  * Stateless controller.
@@ -85,4 +89,32 @@
    public void shutdown()
    {
    }
+
+   @Override
+   public Set<ControllerContext> getInstantiatedContexts(Class<?> clazz)
+   {
+      if (controller instanceof ContextTracker)
+         return ContextTracker.class.cast(controller).getInstantiatedContexts(clazz);
+      else
+         return Collections.emptySet();
+   }
+
+   @Override
+   public Set<ControllerContext> getContexts(Class<?> clazz, ControllerState state)
+   {
+      if (controller instanceof ContextTracker)
+         return ContextTracker.class.cast(controller).getContexts(clazz, state);
+      else
+         return Collections.emptySet();
+   }
+
+   @Override
+   public void addInstantiatedContext(ControllerContext context)
+   {
+   }
+
+   @Override
+   public void removeInstantiatedContext(ControllerContext context)
+   {
+   }
 }
\ No newline at end of file

Copied: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/ContextTracker.java (from rev 96594, projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/Controller.java)
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/ContextTracker.java	                        (rev 0)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/ContextTracker.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -0,0 +1,75 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2005, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt 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;
+
+import java.util.Set;
+
+/**
+ * Track contexts.
+ *
+ * @author <a href="ales.justin at jboss.org">Ales Justin</a>
+ */
+public interface ContextTracker
+{
+   /**
+    * Get all instantiated contexts of a given type
+    *
+    * @param clazz the type
+    * @return the contexts
+    */
+   Set<ControllerContext> getInstantiatedContexts(Class<?> clazz);
+
+   /**
+    * Get all contexts of a type which are in the given state or above
+    *
+    * @param clazz the type
+    * @param state the required state
+    * @return the contexts
+    */
+   Set<ControllerContext> getContexts(Class<?> clazz, ControllerState state);
+
+   /**
+    * Get an instantiated context that is of the type passed in.
+    * If zero or multiple instances match class clazz
+    * a warning is issued, but no throwable is thrown
+    *
+    * @param clazz the type
+    * @return context whose target is instance of this class clazz param or null if zero or multiple such instances
+    */
+   ControllerContext getContextByClass(Class<?> clazz);
+
+   /**
+    * Add instantiated context into the map used by {@link #getContextByClass(Class)}.
+    * Look at all the context's target's superclasses and interfaces.
+    *
+    * @param context the context
+    */
+   void addInstantiatedContext(ControllerContext context);
+
+   /**
+    * Remove instantiated context from the map used by {@link #getContextByClass(Class)}.
+    * Look at all target's superclasses and interfaces.
+    *
+    * @param context the context
+    */
+   void removeInstantiatedContext(ControllerContext context);
+}
\ No newline at end of file

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionDependencyItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionDependencyItem.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionDependencyItem.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -24,10 +24,10 @@
 import java.lang.annotation.Annotation;
 
 import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.kernel.plugins.dependency.ClassDependencyItem;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * Web beans injection dependency item.
@@ -52,7 +52,7 @@
          throw new IllegalArgumentException("Can only handle kernel controller: " + controller);
 
       KernelController kernelController = (KernelController)controller;
-      KernelControllerContext context = WBInjectionResolver.resolve(kernelController, getDemandClass(), annotations);
+      ControllerContext context = WBInjectionResolver.resolve(kernelController, getDemandClass(), annotations);
       setResolved(context != null);
       return isResolved();
    }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionResolver.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -22,20 +22,20 @@
 package org.jboss.kernel.plugins.annotations.wb;
 
 import java.lang.annotation.Annotation;
+import java.util.ArrayList;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.WeakHashMap;
-import java.util.List;
-import java.util.ArrayList;
 
+import org.jboss.beans.metadata.api.annotations.Inject;
+import org.jboss.beans.metadata.spi.ValueMetaData;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.logging.Logger;
 import org.jboss.metadata.spi.MetaData;
-import org.jboss.beans.metadata.spi.ValueMetaData;
-import org.jboss.beans.metadata.api.annotations.Inject;
 
 /**
  * Web beans injection resolver.
@@ -48,7 +48,7 @@
    private static final Logger log = Logger.getLogger(WBInjectionResolver.class);
 
    /** The cache */
-   private static final Map<CacheKey, Map<KernelControllerContext, Boolean>> cache = new WeakHashMap<CacheKey, Map<KernelControllerContext, Boolean>>();
+   private static final Map<CacheKey, Map<ControllerContext, Boolean>> cache = new WeakHashMap<CacheKey, Map<ControllerContext, Boolean>>();
 
    /** The excluded annotation */
    private static final Set<Class<? extends Annotation>> excludedAnnotations = new HashSet<Class<? extends Annotation>>();
@@ -98,7 +98,7 @@
     * @param annotations the filter annotations
     * @return single matching context or null if none or multiple
     */
-   public static KernelControllerContext resolve(KernelController controller, Class<?> type, Annotation[] annotations)
+   public static ControllerContext resolve(KernelController controller, Class<?> type, Annotation[] annotations)
    {
       if (controller == null)
          throw new IllegalArgumentException("Null controller");
@@ -107,19 +107,19 @@
       if (annotations == null)
          annotations = new Annotation[]{};
 
-      Set<KernelControllerContext> contexts = controller.getContexts(type, ControllerState.INSTALLED);
+      Set<ControllerContext> contexts = controller.getContexts(type, ControllerState.INSTALLED);
       if (contexts != null && contexts.isEmpty() == false)
       {
          CacheKey key = new CacheKey(type, annotations);
-         Map<KernelControllerContext, Boolean> cachedResults = cache.get(key);
+         Map<ControllerContext, Boolean> cachedResults = cache.get(key);
          if (cachedResults == null)
          {
-            cachedResults = new WeakHashMap<KernelControllerContext, Boolean>();
+            cachedResults = new WeakHashMap<ControllerContext, Boolean>();
             cache.put(key, cachedResults);
          }
 
-         Set<KernelControllerContext> matchingContexts = new HashSet<KernelControllerContext>();
-         for(KernelControllerContext context : contexts)
+         Set<ControllerContext> matchingContexts = new HashSet<ControllerContext>();
+         for(ControllerContext context : contexts)
          {
             Boolean match = cachedResults.get(context);
             if (match == null)

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionValueMetaData.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionValueMetaData.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/annotations/wb/WBInjectionValueMetaData.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -25,6 +25,7 @@
 
 import org.jboss.beans.metadata.plugins.AbstractValueMetaData;
 import org.jboss.beans.metadata.spi.MetaDataVisitor;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.reflect.spi.TypeInfo;
@@ -69,10 +70,21 @@
    public Object getValue(TypeInfo info, ClassLoader cl) throws Throwable
    {
       KernelController controller = context.getKernel().getController();
-      KernelControllerContext result = WBInjectionResolver.resolve(controller, info.getType(), annotations);
+      ControllerContext result = WBInjectionResolver.resolve(controller, info.getType(), annotations);
       if (result != null)
          return result.getTarget();
       else
          throw new IllegalArgumentException("Should not be here, dependency not resolved: " + toString());
    }
+
+   @SuppressWarnings("deprecation")
+   public Object ungetValue(TypeInfo info, ClassLoader cl) throws Throwable
+   {
+      KernelController controller = context.getKernel().getController();
+      ControllerContext result = WBInjectionResolver.resolve(controller, info.getType(), annotations);
+      if (result != null)
+         result.ungetTarget();
+
+      return null;
+   }
 }
\ No newline at end of file

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/AbstractKernelController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -21,9 +21,7 @@
 */
 package org.jboss.kernel.plugins.dependency;
 
-import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -67,9 +65,6 @@
    /** The supplies */
    protected ConcurrentMap<Object, List<KernelControllerContext>> suppliers = new ConcurrentHashMap<Object, List<KernelControllerContext>>();
 
-   /** The contexts by class Map<Class, Set<ControllerContext>> */
-   protected Map<Class<?>, ClassContext> contextsByClass = new ConcurrentHashMap<Class<?>, ClassContext>();
-
    /**
     * Create an abstract kernel controller
     * 
@@ -119,8 +114,6 @@
 
       if (list != null && list.isEmpty() == false)
          return list.get(0);
-      else if (name instanceof Class)
-         return getContextByClass((Class<?>) name);
       else
          return null;
    }
@@ -269,191 +262,4 @@
    {
       emitterDelegate.unregisterListener(listener, filter, handback);
    }
-
-   /**
-    * Get contexts by class.
-    * This method should be taken with read lock.
-    *
-    * @param clazz the class type
-    * @return contexts by class
-    */
-   protected Set<KernelControllerContext> getContexts(Class<?> clazz)
-   {
-      ClassContext classContext = contextsByClass.get(clazz);
-      if (classContext != null)
-      {
-         if (log.isTraceEnabled())
-         {
-            log.trace("Marking class " + clazz + " as used.");
-         }
-         classContext.used = true;
-         return classContext.contexts;
-      }
-      return null;
-   }
-
-   /**
-    * @return all instantiated contexts whose target is instance of this class clazz param
-    */
-   public Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz)
-   {
-      lockRead();
-      try
-      {
-         Set<KernelControllerContext> contexts = getContexts(clazz);
-         return contexts != null && contexts.isEmpty() == false ? Collections.unmodifiableSet(contexts) : null;
-      }
-      finally
-      {
-         unlockRead();
-      }
-   }
-
-   public Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state)
-   {
-      lockRead();
-      try
-      {
-         Set<KernelControllerContext> contexts = getContexts(clazz);
-         if (contexts != null && contexts.isEmpty() == false)
-         {
-            Set<KernelControllerContext> kccs = new HashSet<KernelControllerContext>();
-            for(KernelControllerContext context : contexts)
-            {
-               if (getStates().isBeforeState(context.getState(), state) == false)
-                  kccs.add(context);
-            }
-            return kccs;
-         }
-         else
-            return null;
-      }
-      finally
-      {
-         unlockRead();
-      }
-   }
-
-   public void addInstantiatedContext(KernelControllerContext context)
-   {
-      prepareToTraverse(context, true);
-   }
-
-   public void removeInstantiatedContext(KernelControllerContext context)
-   {
-      prepareToTraverse(context, false);
-   }
-
-   protected void prepareToTraverse(KernelControllerContext context, boolean addition)
-   {
-      lockWrite();
-      try
-      {
-         Object target = context.getTarget();
-         if (target != null)
-         {
-            traverseBean(context, target.getClass(), addition, log.isTraceEnabled());
-         }
-      }
-      finally
-      {
-         unlockWrite();
-      }
-   }
-
-   /**
-    * Traverse over target and map it to all its superclasses
-    * and interfaces - using recursion.
-    *
-    * @param context context whose target is instance of clazz
-    * @param clazz current class to map context to
-    * @param addition whether this is an addition
-    * @param trace whether trace is enabled
-    */
-   protected void traverseBean(KernelControllerContext context, Class<?> clazz, boolean addition, boolean trace)
-   {
-      if (clazz == null || clazz == Object.class)
-      {
-         return;
-      }
-      ClassContext classContext = contextsByClass.get(clazz);
-      if (addition)
-      {
-         if (classContext == null)
-         {
-            classContext = new ClassContext();
-            classContext.contexts = new HashSet<KernelControllerContext>();
-            contextsByClass.put(clazz, classContext);
-         }
-         else if (classContext.used)
-         {
-            log.debug("Additional matching bean - contextual injection already used for class: " + clazz);
-         }
-         if (trace)
-         {
-            log.trace("Mapping contex " + context + " to class: " + clazz);
-         }
-         classContext.contexts.add(context);
-      }
-      else
-      {
-         if (classContext != null)
-         {
-            if (trace)
-            {
-               log.trace("Removing contex " + context + " to class: " + clazz);
-            }
-            classContext.contexts.remove(context);
-         }
-      }
-      // traverse superclass
-      traverseBean(context, clazz.getSuperclass(), addition, trace);
-      Class<?>[] interfaces = clazz.getInterfaces();
-      // traverse interfaces
-      for(Class<?> intface : interfaces)
-      {
-         traverseBean(context, intface, addition, trace);
-      }
-   }
-
-   private static class ClassContext
-   {
-      private boolean used;
-      private Set<KernelControllerContext> contexts;
-   }
-
-   /**
-    * If zero or multiple instances match class clazz
-    * a warning is issued, but no throwable is thrown
-    *
-    * @return context whose target is instance of this class clazz param or null if zero or multiple such instances
-    */
-   public KernelControllerContext getContextByClass(Class<?> clazz)
-   {
-      Set<KernelControllerContext> contexts = getInstantiatedContexts(clazz);
-      int numberOfMatchingBeans = 0;
-      if (contexts != null)
-      {
-         numberOfMatchingBeans = contexts.size();
-      }
-
-      if (log.isTraceEnabled())
-      {
-         log.trace("Checking for contextual injection, current matches: " + numberOfMatchingBeans + " - " + clazz);
-      }
-
-      if (numberOfMatchingBeans != 1)
-      {
-         if (numberOfMatchingBeans > 1)
-         {
-            log.warn("Multiple beans match class type [enable trace log for details]: " + clazz);
-            if (log.isTraceEnabled())
-            {
-               log.trace("Matching contexts: " + contexts);
-            }
-         }
-         return null;
-      }
-      return contexts.iterator().next();
-   }
 }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CallbackDependencyItem.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -25,9 +25,9 @@
 
 import org.jboss.dependency.spi.Cardinality;
 import org.jboss.dependency.spi.Controller;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.util.HashCode;
 import org.jboss.util.JBossStringBuilder;
 
@@ -53,7 +53,7 @@
       return cardinality;
    }
 
-   protected Set<KernelControllerContext> getContexts(Controller controller)
+   protected Set<ControllerContext> getContexts(Controller controller)
    {
       if (controller instanceof KernelController == false)
          throw new IllegalArgumentException("Controller not KernelController!");
@@ -64,14 +64,14 @@
 
    public boolean resolve(Controller controller)
    {
-      Set<KernelControllerContext> contexts = getContexts(controller);
+      Set<ControllerContext> contexts = getContexts(controller);
       int size = contexts != null ? contexts.size() : 0;
       if (cardinality.isInRange(size))
       {
          setIDependOn(getIDependOn());
          if (contexts != null)
          {
-            for (KernelControllerContext context : contexts)
+            for (ControllerContext context : contexts)
                addDependsOnMe(controller, context);
          }
          setResolved(true);
@@ -88,7 +88,7 @@
       if (getIDependOn() == null)
          return true;
       
-      Set<KernelControllerContext> contexts = getContexts(controller);
+      Set<ControllerContext> contexts = getContexts(controller);
        // minus one, since this is called when unistalling dependent context
       int size = contexts != null ? contexts.size() - 1 : 0;
       return cardinality.isInRange(size) == false;

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAttributeCallbackItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAttributeCallbackItem.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassAttributeCallbackItem.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -29,7 +29,6 @@
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.dependency.spi.dispatch.AttributeDispatchContext;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * Class callback item - class dependency.
@@ -56,7 +55,7 @@
       if (controller instanceof KernelController)
       {
          KernelController kc = (KernelController)controller;
-         KernelControllerContext context = kc.getContextByClass(getIDependOn());
+         ControllerContext context = kc.getContextByClass(getIDependOn());
          if (context != null)
          {
             Object target = context.getTarget();

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextKernelRegistryPlugin.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextKernelRegistryPlugin.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassContextKernelRegistryPlugin.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -24,6 +24,7 @@
 import org.jboss.kernel.spi.registry.KernelRegistryPlugin;
 import org.jboss.kernel.spi.registry.KernelRegistryEntry;
 import org.jboss.kernel.spi.dependency.KernelController;
+import org.jboss.dependency.spi.ControllerContext;
 
 /**
  * Class aware KernelRegistryPlugin.
@@ -44,7 +45,9 @@
    {
       if (name instanceof Class)
       {
-         return controller.getContextByClass((Class)name);
+         ControllerContext context = controller.getContextByClass((Class)name);
+         if (context instanceof KernelRegistryEntry)
+            return KernelRegistryEntry.class.cast(context);
       }
       return null;
    }

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassSingleCallbackItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassSingleCallbackItem.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ClassSingleCallbackItem.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -25,13 +25,12 @@
 
 import org.jboss.dependency.plugins.SingleCallbackItem;
 import org.jboss.dependency.spi.Cardinality;
+import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.dependency.spi.DependencyItem;
-import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * Class single dependency item - class dependency.
@@ -68,10 +67,10 @@
       if (controller instanceof KernelController)
       {
          KernelController kc = (KernelController)controller;
-         Set<KernelControllerContext> contexts = kc.getContexts(getIDependOn(), getDependentState());
+         Set<ControllerContext> contexts = kc.getContexts(getIDependOn(), getDependentState());
          if (contexts != null && contexts.isEmpty() == false)
          {
-            for(KernelControllerContext context : contexts)
+            for(ControllerContext context : contexts)
             {
                Object target = context.getTarget();
                if (signature == null)

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/CollectionCallbackItem.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -32,7 +32,6 @@
 import org.jboss.dependency.spi.DependencyItem;
 import org.jboss.dependency.spi.dispatch.InvokeDispatchContext;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 
 /**
  * Collection callback item.
@@ -80,7 +79,7 @@
             throw new IllegalArgumentException("Illegal collection holder, equals null!");
 
          KernelController kernelController = (KernelController)controller;        
-         Set<KernelControllerContext> contexts = kernelController.getContexts(getIDependOn(), dependentState);
+         Set<ControllerContext> contexts = kernelController.getContexts(getIDependOn(), dependentState);
          if (contexts != null && contexts.isEmpty() == false)
          {
             for(ControllerContext context : contexts)

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ScopedKernelController.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ScopedKernelController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/ScopedKernelController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -39,7 +39,6 @@
 import org.jboss.kernel.spi.config.KernelConfig;
 import org.jboss.kernel.spi.config.KernelConfigurator;
 import org.jboss.kernel.spi.dependency.KernelController;
-import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.kernel.spi.event.KernelEvent;
 import org.jboss.kernel.spi.event.KernelEventFilter;
 import org.jboss.kernel.spi.event.KernelEventListener;
@@ -195,58 +194,6 @@
       }
    }
 
-   public Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz)
-   {
-      lockRead();
-      try
-      {
-         Set<KernelControllerContext> contexts = new HashSet<KernelControllerContext>();
-         Set<KernelControllerContext> currentContexts = super.getInstantiatedContexts(clazz);
-         if (currentContexts != null && currentContexts.size() > 0)
-         {
-            contexts.addAll(currentContexts);
-         }
-         if (isParentKernelController())
-         {
-            Set<KernelControllerContext> parentContexts = getParentKernelController().getInstantiatedContexts(clazz);
-            if (parentContexts != null && parentContexts.size() > 0)
-            {
-               contexts.addAll(parentContexts);
-            }
-         }
-         return contexts.size() > 0 ? contexts : null;
-      }
-      finally{
-         unlockRead();
-      }
-   }
-
-   public Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state)
-   {
-      lockRead();
-      try
-      {
-         Set<KernelControllerContext> contexts = new HashSet<KernelControllerContext>();
-         Set<KernelControllerContext> currentContexts = super.getContexts(clazz, state);
-         if (currentContexts != null && currentContexts.size() > 0)
-         {
-            contexts.addAll(currentContexts);
-         }
-         if (isParentKernelController())
-         {
-            Set<KernelControllerContext> parentContexts = getParentKernelController().getContexts(clazz, state);
-            if (parentContexts != null && parentContexts.size() > 0)
-            {
-               contexts.addAll(parentContexts);
-            }
-         }
-         return contexts.size() > 0 ? contexts : null;
-      }
-      finally{
-         unlockRead();
-      }
-   }
-
    // org.jboss.kernel.spi.registry.KernelRegistry plugin method
 
    public KernelRegistryEntry getEntry(Object name)

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/StatelessKernelController.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/StatelessKernelController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/dependency/StatelessKernelController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -21,11 +21,8 @@
  */
 package org.jboss.kernel.plugins.dependency;
 
-import java.util.Set;
-
 import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.dependency.plugins.helpers.StatelessController;
-import org.jboss.dependency.spi.ControllerState;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.spi.dependency.KernelController;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
@@ -66,29 +63,6 @@
    {
    }
 
-   public Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz)
-   {
-      return delegate.getInstantiatedContexts(clazz);
-   }
-
-   public Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state)
-   {
-      return delegate.getContexts(clazz, state);
-   }
-
-   public KernelControllerContext getContextByClass(Class<?> clazz)
-   {
-      return delegate.getContextByClass(clazz);
-   }
-
-   public void addInstantiatedContext(KernelControllerContext context)
-   {
-   }
-
-   public void removeInstantiatedContext(KernelControllerContext context)
-   {
-   }
-
    public Kernel getKernel()
    {
       return delegate.getKernel();

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/validation/AbstractKernelBeanValidator.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/validation/AbstractKernelBeanValidator.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/plugins/validation/AbstractKernelBeanValidator.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -22,6 +22,7 @@
 package org.jboss.kernel.plugins.validation;
 
 import org.jboss.beans.info.spi.PropertyInfo;
+import org.jboss.dependency.spi.ControllerContext;
 import org.jboss.joinpoint.spi.Joinpoint;
 import org.jboss.kernel.Kernel;
 import org.jboss.kernel.plugins.AbstractKernelObject;
@@ -54,8 +55,20 @@
     */
    protected BeanValidatorBridge getDelegate()
    {
-      KernelControllerContext context = controller.getContextByClass(BeanValidatorBridge.class);
-      return context != null ? BeanValidatorBridge.class.cast(context.getTarget()) : null;
+      ControllerContext context = controller.getContextByClass(BeanValidatorBridge.class);
+      if (context != null)
+      {
+         Object target = context.getTarget();
+         try
+         {
+            return BeanValidatorBridge.class.cast(target);           
+         }
+         finally
+         {
+            context.ungetTarget();
+         }
+      }
+      return null;
    }
 
    public void validateConstructorValues(KernelControllerContext context, Joinpoint joinpoint) throws Throwable

Modified: projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/spi/dependency/KernelController.java
===================================================================
--- projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/spi/dependency/KernelController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/kernel/src/main/java/org/jboss/kernel/spi/dependency/KernelController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -21,9 +21,8 @@
 */
 package org.jboss.kernel.spi.dependency;
 
-import java.util.Set;
-
 import org.jboss.beans.metadata.spi.BeanMetaData;
+import org.jboss.dependency.spi.ContextTracker;
 import org.jboss.dependency.spi.Controller;
 import org.jboss.dependency.spi.ControllerState;
 import org.jboss.kernel.Kernel;
@@ -41,7 +40,7 @@
  * @author <a href="adrian at jboss.com">Adrian Brock</a>
  * @version $Revision$
  */
-public interface KernelController extends KernelObject, Controller
+public interface KernelController extends KernelObject, Controller, ContextTracker
 {
    /**
     * Install a context from a {@link BeanMetaData}.
@@ -80,47 +79,4 @@
     * @param context the context we want to check for supplies
     */
    void removeSupplies(KernelControllerContext context);
-
-   /**
-    * Get all instantiated contexts of a given type
-    * 
-    * @param clazz the type
-    * @return the contexts
-    */
-   Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz);
-
-   /**
-    * Get all contexts of a type which are in the given state or above
-    *
-    * @param clazz the type
-    * @param state the required state
-    * @return the contexts
-    */
-   Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state);
-
-   /**
-    * Get an instantiated context that is of the type passed in.
-    * If zero or multiple instances match class clazz
-    * a warning is issued, but no throwable is thrown
-    *
-    * @param clazz the type
-    * @return context whose target is instance of this class clazz param or null if zero or multiple such instances
-    */
-   KernelControllerContext getContextByClass(Class<?> clazz);
-
-   /**
-    * Add instantiated context into the map used by {@link #getContextByClass(Class)}.
-    * Look at all the context's target's superclasses and interfaces.
-    * 
-    * @param context the context
-    */
-   void addInstantiatedContext(KernelControllerContext context);
-
-   /**
-    * Remove instantiated context from the map used by {@link #getContextByClass(Class)}.
-    * Look at all target's superclasses and interfaces.
-    * 
-    * @param context the context
-    */
-   void removeInstantiatedContext(KernelControllerContext context);
 }

Modified: projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java
===================================================================
--- projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java	2009-11-20 16:30:15 UTC (rev 96645)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java	2009-11-20 16:42:40 UTC (rev 96646)
@@ -43,7 +43,6 @@
  */
 public class MockController extends JBossObject implements KernelController
 {
-
    public void addAlias(Object alias, Object original) throws Throwable
    {
    }
@@ -116,7 +115,7 @@
    {
    }
 
-   public void addInstantiatedContext(KernelControllerContext context)
+   public void addInstantiatedContext(ControllerContext context)
    {
    }
 
@@ -124,17 +123,17 @@
    {
    }
 
-   public KernelControllerContext getContextByClass(Class<?> clazz)
+   public ControllerContext getContextByClass(Class<?> clazz)
    {
       return null;
    }
 
-   public Set<KernelControllerContext> getContexts(Class<?> clazz, ControllerState state)
+   public Set<ControllerContext> getContexts(Class<?> clazz, ControllerState state)
    {
       return null;
    }
 
-   public Set<KernelControllerContext> getInstantiatedContexts(Class<?> clazz)
+   public Set<ControllerContext> getInstantiatedContexts(Class<?> clazz)
    {
       return null;
    }
@@ -149,7 +148,7 @@
       return null;
    }
 
-   public void removeInstantiatedContext(KernelControllerContext context)
+   public void removeInstantiatedContext(ControllerContext context)
    {
    }
 
@@ -179,5 +178,4 @@
          throws Throwable
    {
    }
-
 }




More information about the jboss-cvs-commits mailing list