Author: rmannibucau Date: Sat Apr 27 18:28:41 2013 New Revision: 1476654 URL: http://svn.apache.org/r1476654 Log: TOMEE-915 TOMEE-916 rework bean manager for webapps in ear + fixing ear lib finder creation
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java?rev=1476654&r1=1476653&r2=1476654&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/AppInfo.java Sat Apr 27 18:28:41 2013 @@ -53,6 +53,7 @@ public class AppInfo extends InfoObject public final Properties jmx = new Properties(); public final Set<String> mbeans = new TreeSet<String>(); public final Set<String> jaxRsProviders = new TreeSet<String>(); + public final Set<String> jsfClasses = new TreeSet<String>(); public final Set<String> eventClassesNeedingAppClassloader = new TreeSet<String>(); public boolean webAppAlone; } Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java?rev=1476654&r1=1476653&r2=1476654&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java Sat Apr 27 18:28:41 2013 @@ -17,47 +17,26 @@ package org.apache.openejb.cdi; import org.apache.openejb.util.reflection.Reflections; -import org.apache.webbeans.component.BeanManagerBean; import org.apache.webbeans.component.BuildInOwbBean; -import org.apache.webbeans.component.ConversationBean; -import org.apache.webbeans.component.InjectionPointBean; import org.apache.webbeans.container.BeanManagerImpl; import org.apache.webbeans.context.creational.CreationalContextImpl; -import org.apache.webbeans.portable.events.generics.GenericBeanEvent; -import org.apache.webbeans.util.WebBeansUtil; import javax.el.ELResolver; import javax.el.ExpressionFactory; import javax.enterprise.context.spi.Context; import javax.enterprise.context.spi.Contextual; import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.UnsatisfiedResolutionException; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.Decorator; import javax.enterprise.inject.spi.InjectionPoint; import javax.enterprise.inject.spi.InjectionTarget; -import javax.enterprise.inject.spi.InterceptionType; -import javax.enterprise.inject.spi.Interceptor; -import javax.enterprise.inject.spi.ObserverMethod; import java.lang.annotation.Annotation; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; public class WebappBeanManager extends BeanManagerImpl { private final WebappWebBeansContext webappCtx; - private final ThreadLocal<Boolean> internalUse = new ThreadLocal<Boolean>() { - @Override - public Boolean initialValue() { - return false; - } - }; private Set<Bean<?>> deploymentBeans; - private boolean started = false; // just to send events faster public WebappBeanManager(WebappWebBeansContext ctx) { super(ctx); @@ -67,20 +46,6 @@ public class WebappBeanManager extends B } @Override - public Object getReference(Bean<?> bean, Type beanType, CreationalContext<?> ctx) { - Object ref; - try { - ref = getParentBm().getReference(bean, beanType, ctx); - if (ref == null) { - ref = super.getReference(bean, beanType, ctx); - } - } catch (RuntimeException e) { - ref = super.getReference(bean, beanType, ctx); - } - return ref; - } - - @Override public Object getInjectableReference(InjectionPoint injectionPoint, CreationalContext<?> ctx) { try { return super.getInjectableReference(injectionPoint, ctx); @@ -103,173 +68,6 @@ public class WebappBeanManager extends B } @Override - public Set<Bean<?>> getBeans(Type beanType, Annotation... qualifiers) { - final Set<Bean<?>> beans = new HashSet<Bean<?>>(); - internalUse.set(true); - try { - beans.addAll(super.getBeans(beanType, qualifiers)); - } finally { - internalUse.set(false); - } - if (!internalUse.get()) { - beans.addAll(getParentBm().getBeans(beanType, qualifiers)); - } - internalUse.remove(); - return beans; - } - - @Override - public Set<Bean<?>> getBeans(String name) { - final Set<Bean<?>> beans = new HashSet<Bean<?>>(); - internalUse.set(true); - try { - beans.addAll(super.getBeans(name)); - } finally { - internalUse.set(false); - } - if (!internalUse.get()) { - beans.addAll(getParentBm().getBeans(name)); - } - internalUse.remove(); - return beans; - } - - @Override - public Bean<?> getPassivationCapableBean(String id) { - try { - return getParentBm().getPassivationCapableBean(id); - } catch (RuntimeException e) { - return super.getPassivationCapableBean(id); - } - } - - @Override - public <X> Bean<? extends X> resolve(Set<Bean<? extends X>> beans) { - try { - return super.resolve(beans); - } catch (RuntimeException e) { - try { - return getParentBm().resolve(beans); - } catch (RuntimeException ignored) { - throw e; - } - } - } - - @Override - public void fireEvent(Object event, Annotation... qualifiers) { - super.fireEvent(event, qualifiers); - - // don't propagate to parent extension events since extensions are already here (loaded from spi) - if (started || !isExtensionEvent(event.getClass())) { - getParentBm().fireEvent(event, qualifiers); - } - } - - private static boolean isExtensionEvent(final Type type) { - if (!(type instanceof Class<?>)) { - return false; - } - - final Class<?> aClass = (Class<?>) type; - if (WebBeansUtil.isExtensionEventType(aClass) - || WebBeansUtil.isExtensionProducerOrObserverEventType(aClass)) { - return true; - } - - final Class<?>[] itfs = aClass.getInterfaces(); - if (itfs != null) { - for (Class<?> i : itfs) { - if (GenericBeanEvent.class.equals(i) - || WebBeansUtil.isExtensionEventType(i) - || WebBeansUtil.isDefaultExtensionBeanEventType(i) - || WebBeansUtil.isDefaultExtensionProducerOrObserverEventType(i)) { - return true; - } - } - } - return false; - } - - @Override - public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(T event, Annotation... qualifiers) { - final Set<ObserverMethod<? super T>> mtds = new HashSet<ObserverMethod<? super T>>(); - internalUse.set(true); - try { - mtds.addAll(super.resolveObserverMethods(event, qualifiers)); - } finally { - internalUse.set(false); - } - if (!internalUse.get()) { - Set<ObserverMethod<? super T>> c = getParentBm().resolveObserverMethods(event, qualifiers); - for (ObserverMethod<? super T> o : c) { - if (!isExtensionEvent(o.getObservedType())) { - mtds.add(o); - } - } - } - internalUse.remove(); - return mtds; - } - - @Override - public List<Decorator<?>> resolveDecorators(Set<Type> types, Annotation... qualifiers) { - final List<Decorator<?>> decorators = new ArrayList<Decorator<?>>(); - internalUse.set(true); - try { - decorators.addAll(super.resolveDecorators(types, qualifiers)); - } finally { - internalUse.set(false); - } - if (!internalUse.get()) { - decorators.addAll(getParentBm().resolveDecorators(types, qualifiers)); - } - return decorators; - } - - @Override - public List<Interceptor<?>> resolveInterceptors(InterceptionType type, Annotation... qualifiers) { - final List<Interceptor<?>> interceptors = new ArrayList<Interceptor<?>>(); - internalUse.set(true); - try { - interceptors.addAll(super.resolveInterceptors(type, qualifiers)); - } finally { - internalUse.set(false); - } - if (!internalUse.get()) { - interceptors.addAll(getParentBm().resolveInterceptors(type, qualifiers)); - } - internalUse.remove(); - return interceptors; - } - - @Override - public void validate(InjectionPoint injectionPoint) { - try { - super.validate(injectionPoint); - } catch (UnsatisfiedResolutionException ure) { - try { - getParentBm().validate(injectionPoint); // prevent injections from webapp only if called directly - } catch (UnsatisfiedResolutionException ure2) { - throw ure; - } - } - } - - @Override - public boolean isScope(Class<? extends Annotation> annotationType) { - try { - return super.isScope(annotationType); - } catch (RuntimeException e) { - try { - return getParentBm().isScope(annotationType); - } catch (RuntimeException ignored) { - throw e; - } - } - } - - @Override public boolean isNormalScope(Class<? extends Annotation> annotationType) { try { return super.isNormalScope(annotationType); @@ -350,22 +148,6 @@ public class WebappBeanManager extends B } @Override - public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation> stereotype) { - final Set<Annotation> mtds = new HashSet<Annotation>(); - internalUse.set(true); - try { - mtds.addAll(super.getStereotypeDefinition(stereotype)); - } finally { - internalUse.set(false); - } - if (!internalUse.get()) { - mtds.addAll(getParentBm().getStereotypeDefinition(stereotype)); - } - internalUse.remove(); - return mtds; - } - - @Override public Context getContext(Class<? extends Annotation> scope) { try { return super.getContext(scope); @@ -441,21 +223,17 @@ public class WebappBeanManager extends B public void afterStart() { deploymentBeans = new CopyOnWriteArraySet<Bean<?>>(); // override parent one with a "webapp" bean list - for (Bean<?> bean : getParentBm().getBeans()) { - if (bean instanceof BeanManagerBean || bean instanceof BuildInOwbBean - || bean instanceof ConversationBean || bean instanceof InjectionPointBean) { - continue; + for (final Bean<?> bean : getParentBm().getBeans()) { + if (!BuildInOwbBean.class.isInstance(bean)) { + deploymentBeans.add(bean); } - deploymentBeans.add(bean); } deploymentBeans.addAll(super.getBeans()); webappCtx.getBeanManagerImpl().getInjectionResolver().clearCaches(); // to force new resolution with new beans - - started = true; } public void beforeStop() { - started = false; + // no-op } } Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java?rev=1476654&r1=1476653&r2=1476654&view=diff ============================================================================== --- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java (original) +++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/config/AnnotationDeployer.java Sat Apr 27 18:28:41 2013 @@ -409,7 +409,7 @@ public class AnnotationDeployer implemen public static class DiscoverAnnotatedBeans implements DynamicDeployer { public AppModule deploy(AppModule appModule) throws OpenEJBException { - if (!appModule.isWebapp() && appModule.getEjbModules() == null) { + if (!appModule.isWebapp() && !appModule.getWebModules().isEmpty()) { // need to scan for jsf stuff at least try { appModule.setEarLibFinder(FinderFactory.createFinder(appModule)); } catch (final Exception e) { Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1476654&r1=1476653&r2=1476654&view=diff ============================================================================== --- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original) +++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Sat Apr 27 18:28:41 2013 @@ -1899,7 +1899,7 @@ public class TomcatWebAppBuilder impleme * * @param standardContext tomcat context instance */ - private void loadWebModule(final AppModule appModule, final StandardContext standardContext) { + private void loadWebModule(final AppModule appModule, final StandardContext standardContext) { final WebModule webModule = appModule.getWebModules().get(0); final WebApp webApp = webModule.getWebApp();