[jboss-cvs] JBossAS SVN: r97439 - in projects/kernel/trunk: dependency/src/main/java/org/jboss/dependency/plugins/tracker and 2 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Dec 3 23:01:59 EST 2009


Author: alesj
Date: 2009-12-03 23:01:59 -0500 (Thu, 03 Dec 2009)
New Revision: 97439

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/tracker/AbstractContextRegistry.java
   projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextQueries.java
   projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java
Log:
[JBKERNEL-67]; Cache context's classes info.

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-12-04 03:31:02 UTC (rev 97438)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/AbstractController.java	2009-12-04 04:01:59 UTC (rev 97439)
@@ -1742,7 +1742,7 @@
             Set<CallbackItem<?>> existingCallbacks = new HashSet<CallbackItem<?>>();
             existingCallbacks.addAll(getCallbacks(context.getName(), isInstallPhase));
             // match by classes
-            Collection<Class<?>> classes = getClassesImplemented(context);
+            Collection<Class<?>> classes = getExposedClasses(context);
             if (classes != null && classes.isEmpty() == false)
             {
                for (Class<?> clazz : classes)
@@ -1836,55 +1836,6 @@
    }
 
    /**
-    * Get implemented classes.
-    *
-    * @param context the context
-    * @return collection of implementing classes by target
-    */
-   protected Collection<Class<?>> getClassesImplemented(ControllerContext context)
-   {
-      Object target = context.getTarget();
-      return getClassesImplemented(target);
-   }
-
-   /**
-    * Get implemented classes.
-    *
-    * @param target the target
-    * @return collection of implementing classes by target
-    */
-   protected Collection<Class<?>> getClassesImplemented(Object target)
-   {
-      if (target == null)
-         return null;
-      
-      Set<Class<?>> classes = new HashSet<Class<?>>();
-      traverseClass(target.getClass(), classes);
-      return classes;
-   }
-
-   /**
-    * Recurse over classes.
-    *
-    * @param clazz current class
-    * @param classes classes holder set
-    */
-   protected void traverseClass(Class<?> clazz, Set<Class<?>> classes)
-   {
-      if (clazz != null && Object.class.equals(clazz) == false)
-      {
-         classes.add(clazz);
-         traverseClass(clazz.getSuperclass(), classes);
-         Class<?>[] interfaces = clazz.getInterfaces();
-         // traverse interfaces
-         for (Class<?> intface : interfaces)
-         {
-            traverseClass(intface, classes);
-         }
-      }
-   }
-
-   /**
     * Install a context<p>
     * <p/>
     * This method must be invoked with NO locks taken
@@ -2582,4 +2533,9 @@
    {
       registry.removeInstantiatedContext(context);
    }
+
+   public Set<Class<?>> getExposedClasses(ControllerContext context)
+   {
+      return registry.getExposedClasses(context);
+   }
 }

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextRegistry.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextRegistry.java	2009-12-04 03:31:02 UTC (rev 97438)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/plugins/tracker/AbstractContextRegistry.java	2009-12-04 04:01:59 UTC (rev 97439)
@@ -21,7 +21,9 @@
 */
 package org.jboss.dependency.plugins.tracker;
 
+import java.util.Arrays;
 import java.util.Collections;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
@@ -45,6 +47,9 @@
    /** The contexts by class Map<Class, Set<ControllerContext>> */
    private Map<Class<?>, ClassContext> contextsByClass = new ConcurrentHashMap<Class<?>, ClassContext>();
 
+   /** The classes by contexts */
+   private Map<ControllerContext, Set<Class<?>>> classesByContext = new HashMap<ControllerContext, Set<Class<?>>>();
+
    /** The controller */
    private Controller controller;
 
@@ -176,6 +181,9 @@
     */
    protected void handleInstantiatedContext(ControllerContext context, boolean addition, Class<?>... classes)
    {
+      if (context == null)
+         throw new IllegalArgumentException("Null context");
+
       if (classes != null && classes.length > 0)
       {
          boolean trace = log.isTraceEnabled();
@@ -185,6 +193,16 @@
          {
             for (Class<?> clazz : classes)
                handleContext(context, clazz, addition, trace);
+
+            if (addition)
+            {
+               Set<Class<?>> clazzes = new HashSet<Class<?>>(Arrays.asList(classes));
+               classesByContext.put(context, clazzes);
+            }
+            else
+            {
+               classesByContext.remove(context);
+            }
          }
          finally
          {
@@ -211,7 +229,16 @@
          Object target = context.getTarget();
          if (target != null)
          {
-            traverseBean(context, target.getClass(), addition, log.isTraceEnabled());
+            Set<Class<?>> classes = new HashSet<Class<?>>();
+            traverseBean(context, target.getClass(), addition, classes, log.isTraceEnabled());
+            if (addition)
+            {
+               classesByContext.put(context, classes);
+            }
+            else
+            {
+               classesByContext.remove(context);
+            }
          }
       }
       finally
@@ -227,9 +254,10 @@
     * @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 classes the exposed classes
     * @param trace whether trace is enabled
     */
-   protected void traverseBean(ControllerContext context, Class<?> clazz, boolean addition, boolean trace)
+   protected void traverseBean(ControllerContext context, Class<?> clazz, boolean addition, Set<Class<?>> classes, boolean trace)
    {
       if (clazz == null || clazz == Object.class)
       {
@@ -237,14 +265,15 @@
       }
 
       handleContext(context, clazz, addition, trace);
+      classes.add(clazz);
 
       // traverse superclass
-      traverseBean(context, clazz.getSuperclass(), addition, trace);
+      traverseBean(context, clazz.getSuperclass(), addition, classes, trace);
       Class<?>[] interfaces = clazz.getInterfaces();
       // traverse interfaces
       for(Class<?> intface : interfaces)
       {
-         traverseBean(context, intface, addition, trace);
+         traverseBean(context, intface, addition, classes, trace);
       }
    }
 
@@ -327,6 +356,20 @@
       return contexts.iterator().next();
    }
 
+   public Set<Class<?>> getExposedClasses(ControllerContext context)
+   {
+      lockRead();
+      try
+      {
+         Set<Class<?>> result = classesByContext.get(context);
+         return (result == null) ? Collections.<Class<?>>emptySet() : new HashSet<Class<?>>(result);
+      }
+      finally
+      {
+         unlockRead();
+      }
+   }
+
    private static class ClassContext
    {
       private boolean used;

Modified: projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextQueries.java
===================================================================
--- projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextQueries.java	2009-12-04 03:31:02 UTC (rev 97438)
+++ projects/kernel/trunk/dependency/src/main/java/org/jboss/dependency/spi/tracker/ContextQueries.java	2009-12-04 04:01:59 UTC (rev 97439)
@@ -102,4 +102,12 @@
     * @return filtered contexts
     */
    Set<ControllerContext> filter(Iterable<ControllerContext> contexts, ContextFilter filter);
+
+   /**
+    * Get the exposed classes for context.
+    *
+    * @param context the context
+    * @return exposed classes
+    */
+   Set<Class<?>> getExposedClasses(ControllerContext context);
 }
\ No newline at end of file

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-12-04 03:31:02 UTC (rev 97438)
+++ projects/kernel/trunk/weld-int/src/test/java/org/jboss/test/kernel/weld/mctowb/support/mock/MockController.java	2009-12-04 04:01:59 UTC (rev 97439)
@@ -152,6 +152,11 @@
       return null;
    }
 
+   public Set<Class<?>> getExposedClasses(ControllerContext context)
+   {
+      return null;
+   }
+
    public KernelControllerContext install(BeanMetaData metaData) throws Throwable
    {
       return null;




More information about the jboss-cvs-commits mailing list