You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/03/23 09:54:27 UTC
svn commit: r1304236 - in /openejb/trunk/openejb:
container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/
container/openejb-core/src/main/java/org/apache/openejb/config/
tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/ t...
Author: rmannibucau
Date: Fri Mar 23 08:54:26 2012
New Revision: 1304236
URL: http://svn.apache.org/viewvc?rev=1304236&view=rev
Log:
skipping myfaces scanning
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppBuilder.java Fri Mar 23 08:54:26 2012
@@ -16,7 +16,11 @@
*/
package org.apache.openejb.assembler.classic;
+import java.util.Map;
+import java.util.Set;
+
public interface WebAppBuilder {
void deployWebApps(AppInfo appInfo, ClassLoader classLoader) throws Exception;
void undeployWebApps(AppInfo appInfo) throws Exception;
+ public Map<ClassLoader, Map<String, Set<String>>> getJsfClasses();
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/WebAppInfo.java Fri Mar 23 08:54:26 2012
@@ -16,6 +16,8 @@
*/
package org.apache.openejb.assembler.classic;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import java.util.List;
@@ -38,4 +40,5 @@ public class WebAppInfo extends CommonIn
public final List<PortInfo> portInfos = new ArrayList<PortInfo>();
public final JndiEncInfo jndiEnc = new JndiEncInfo();
public final List<ServletInfo> servlets = new ArrayList<ServletInfo>();
+ public final Map<String, Set<String>> jsfAnnotatedClasses = new HashMap<String, Set<String>>();
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Fri Mar 23 08:54:26 2012
@@ -237,6 +237,16 @@ public class AnnotationDeployer implemen
public static final Logger startupLogger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, "org.apache.openejb.util.resources");
private static final ThreadLocal<DeploymentModule> currentModule = new ThreadLocal<DeploymentModule>();
private static final Set<String> lookupMissing = new HashSet<String>(2);
+ private static final String[] JSF_CLASSES = new String[] {
+ "javax.faces.bean.ManagedBean",
+ "javax.faces.component.FacesComponent",
+ "javax.faces.component.behavior.FacesBehavior",
+ "javax.faces.convert.FacesConverter",
+ "javax.faces.event.NamedEvent",
+ "javax.faces.render.FacesBehaviorRenderer",
+ "javax.faces.render.FacesRenderer",
+ "javax.faces.validator.FacesValidator"
+ };
public static final Set<String> knownResourceEnvTypes = new TreeSet<String>(asList(
"javax.ejb.EJBContext",
@@ -1035,6 +1045,26 @@ public class AnnotationDeployer implemen
}
}
+ /*
+ * JSF
+ */
+ final ClassLoader classLoader = webModule.getClassLoader();
+ for (String jsfClass : JSF_CLASSES) {
+ final Class<? extends Annotation> clazz;
+ try {
+ clazz = (Class<? extends Annotation>) classLoader.loadClass(jsfClass);
+ } catch (ClassNotFoundException e) {
+ continue;
+ }
+
+ final List<Annotated<Class<?>>> found = finder.findMetaAnnotatedClasses(clazz);
+ final Set<String> convertedClasses = new HashSet<String>(found.size());
+ for (Annotated<Class<?>> annotated : found) {
+ convertedClasses.add(annotated.get().getName());
+ }
+ webModule.getJsfAnnotatedClasses().put(jsfClass, convertedClasses);
+ }
+
return webModule;
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/AppInfoBuilder.java Fri Mar 23 08:54:26 2012
@@ -318,6 +318,7 @@ class AppInfoBuilder {
webAppInfo.restClass.addAll(webModule.getRestClasses());
webAppInfo.ejbWebServices.addAll(webModule.getEjbWebServices());
webAppInfo.ejbRestServices.addAll(webModule.getEjbRestServices());
+ webAppInfo.jsfAnnotatedClasses.putAll(webModule.getJsfAnnotatedClasses());
webAppInfo.host = webModule.getHost();
webAppInfo.contextRoot = webModule.getContextRoot();
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/FinderFactory.java Fri Mar 23 08:54:26 2012
@@ -23,9 +23,7 @@ import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.net.URL;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
-import java.util.Map;
import org.apache.openejb.loader.SystemInstance;
import org.apache.xbean.finder.Annotated;
import org.apache.xbean.finder.AnnotationFinder;
@@ -36,7 +34,6 @@ import org.apache.xbean.finder.archive.C
public class FinderFactory {
private static final FinderFactory factory = new FinderFactory();
- private static final Map<ClassLoader, IAnnotationFinder> FINDERS = new HashMap<ClassLoader, IAnnotationFinder>();
private static FinderFactory get() {
FinderFactory factory = SystemInstance.get().getComponent(FinderFactory.class);
@@ -51,13 +48,6 @@ public class FinderFactory {
return new AnnotationFinder(ClasspathArchive.archive(classLoader, url));
}
- public static IAnnotationFinder getFinder(final ClassLoader classLoader) {
- if (FINDERS.containsKey(classLoader)) {
- return FINDERS.get(classLoader);
- }
- return null; // means not found, another method should be called to built it
- }
-
public IAnnotationFinder create(DeploymentModule module) throws Exception {
IAnnotationFinder finder;
if (module instanceof WebModule) {
@@ -91,7 +81,6 @@ public class FinderFactory {
finder = new AnnotationFinder(new ClassesArchive()).link();
}
- FINDERS.put(module.getClassLoader(), finder);
return new ModuleLimitedFinder(finder);
}
Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/WebModule.java Fri Mar 23 08:54:26 2012
@@ -25,7 +25,6 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
-
import org.apache.openejb.jee.FacesConfig;
import org.apache.openejb.jee.TldTaglib;
import org.apache.openejb.jee.WebApp;
@@ -51,6 +50,7 @@ public class WebModule extends Module im
private final Set<String> ejbWebServices = new TreeSet<String>();
private final Set<String> ejbRestServices = new TreeSet<String>();
private final Set<String> restApplications = new TreeSet<String>();
+ private final Map<String, Set<String>> jsfAnnotatedClasses = new HashMap<String, Set<String>>();
private ID id;
@@ -195,4 +195,8 @@ public class WebModule extends Module im
public void setScannableUrls(List<URL> scannableUrls) {
this.scannableUrls = scannableUrls;
}
+
+ public Map<String, Set<String>> getJsfAnnotatedClasses() {
+ return jsfAnnotatedClasses;
+ }
}
Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Fri Mar 23 08:54:26 2012
@@ -168,6 +168,8 @@ public class TomcatWebAppBuilder impleme
*/
private CoreContainerSystem containerSystem;
+ private Map<ClassLoader, Map<String, Set<String>>> jsfClasses = new HashMap<ClassLoader, Map<String, Set<String>>>();
+
/**
* Creates a new web application builder
* instance.
@@ -622,6 +624,9 @@ public class TomcatWebAppBuilder impleme
appContext = getContainerSystem().getAppContext(contextInfo.appInfo.appId);
}
+ // save jsf stuff
+ jsfClasses.put(standardContext.getLoader().getClassLoader(), webAppInfo.jsfAnnotatedClasses);
+
try {
// determine the injections
@@ -1296,4 +1301,8 @@ public class TomcatWebAppBuilder impleme
return false;
}
}
+
+ public Map<ClassLoader, Map<String, Set<String>>> getJsfClasses() {
+ return jsfClasses;
+ }
}
Modified: openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java?rev=1304236&r1=1304235&r2=1304236&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java (original)
+++ openejb/trunk/openejb/tomee/tomee-myfaces/src/main/java/org/apache/tomee/myfaces/TomEEAnnotationProvider.java Fri Mar 23 08:54:26 2012
@@ -1,55 +1,53 @@
package org.apache.tomee.myfaces;
import java.lang.annotation.Annotation;
+import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.List;
import java.util.Map;
import java.util.Set;
-import javax.faces.bean.ManagedBean;
-import javax.faces.component.FacesComponent;
-import javax.faces.component.behavior.FacesBehavior;
import javax.faces.context.ExternalContext;
-import javax.faces.convert.FacesConverter;
-import javax.faces.event.NamedEvent;
-import javax.faces.render.FacesBehaviorRenderer;
-import javax.faces.render.FacesRenderer;
-import javax.faces.validator.FacesValidator;
import org.apache.myfaces.config.annotation.DefaultAnnotationProvider;
import org.apache.myfaces.shared.util.ClassUtils;
-import org.apache.openejb.config.FinderFactory;
-import org.apache.xbean.finder.Annotated;
-import org.apache.xbean.finder.IAnnotationFinder;
+import org.apache.openejb.assembler.classic.WebAppBuilder;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.util.LogCategory;
+import org.apache.openejb.util.Logger;
public class TomEEAnnotationProvider extends DefaultAnnotationProvider {
- private static final Class<?>[] JSF_CLASSES = new Class<?>[] {
- FacesComponent.class, FacesBehavior.class, FacesConverter.class,
- FacesValidator.class, FacesRenderer.class, ManagedBean.class,
- NamedEvent.class, FacesBehaviorRenderer.class
- };
+ private static final Logger LOGGER = Logger.getInstance(LogCategory.OPENEJB, TomEEAnnotationProvider.class);
@Override
public Map<Class<? extends Annotation>, Set<Class<?>>> getAnnotatedClasses(final ExternalContext ctx) {
final ClassLoader cl = getClassLoader();
- final IAnnotationFinder finder = FinderFactory.getFinder(cl);
- if (finder == null) { // our scanning is probably too slow compared to myfaces one
- return super.getAnnotatedClasses(ctx);
- }
-
+ final WebAppBuilder builder = SystemInstance.get().getComponent(WebAppBuilder.class);
final Map<Class<? extends Annotation>,Set<Class<?>>> map = new HashMap<Class<? extends Annotation>, Set<Class<?>>>();
- for (Class<?> clazz : JSF_CLASSES) {
- map.put((Class<? extends Annotation>) clazz, scannedClasses(finder, clazz));
+ final Map<String, Set<String>> scanned = builder.getJsfClasses().get(cl);
+ if (scanned == null) {
+ return Collections.emptyMap();
}
- return map;
- }
- private Set<Class<?>> scannedClasses(final IAnnotationFinder finder, final Class<?> clazz) {
- final Set<Class<?>> classes = new HashSet<Class<?>>();
- final List<Annotated<Class<?>>> found = finder.findMetaAnnotatedClasses((Class<? extends Annotation>) clazz);
- for (Annotated<Class<?>> foundClass : found) {
- classes.add(foundClass.get());
+ for (Map.Entry<String, Set<String>> entry : scanned.entrySet()) {
+ final Class<? extends Annotation> annotation;
+ try {
+ annotation = (Class<? extends Annotation>) cl.loadClass(entry.getKey());
+ } catch (ClassNotFoundException e) {
+ continue;
+ }
+
+ final Set<String> list = entry.getValue();
+ final Set<Class<?>> annotated = new HashSet<Class<?>>(list.size());
+ for (String name : list) {
+ try {
+ annotated.add(cl.loadClass(name));
+ } catch (ClassNotFoundException ignored) {
+ LOGGER.warning("class '" + name + "' was found but can't be loaded as a JSF class");
+ }
+ }
+
+ map.put(annotation, annotated);
}
- return classes;
+ return map;
}
private ClassLoader getClassLoader() {