[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