Author: rmannibucau
Date: Thu May 10 17:41:19 2012
New Revision: 1336812
URL: http://svn.apache.org/viewvc?rev=1336812&view=rev
Log:
TOMEE-189 separate beanmanager of 'common classloader of ear' and the 'web
classloader of ear'
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppElResolver.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappWebBeansContext.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1336812&r1=1336811&r2=1336812&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
Thu May 10 17:41:19 2012
@@ -142,10 +142,17 @@ public class CdiScanner implements Scann
}
}
+ // here for ears we need to skip classes in the parent classloader
+ final ClassLoader scl = ClassLoader.getSystemClassLoader();
for (String className : beans.managedClasses) {
if (ejbClasses.contains(className)) continue;
final Class clazz = load(className, classLoader);
- if (clazz != null) { // can happen in standalone
+ if (clazz == null) {
+ continue;
+ }
+
+ final ClassLoader cl = clazz.getClassLoader();
+ if (classLoader.equals(cl) || cl.equals(scl)) {
classes.add(clazz);
}
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java?rev=1336812&r1=1336811&r2=1336812&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java
Thu May 10 17:41:19 2012
@@ -17,6 +17,7 @@
package org.apache.openejb.cdi;
import org.apache.openejb.AppContext;
+import org.apache.openejb.core.WebContext;
import org.apache.webbeans.el.WebBeansELResolver;
import org.apache.webbeans.el.WrappedExpressionFactory;
import org.apache.webbeans.spi.adaptor.ELAdaptor;
@@ -30,10 +31,15 @@ import javax.el.ExpressionFactory;
public class CustomELAdapter implements ELAdaptor {
private final AppContext appContext;
+ private final WebContext webContext;
public CustomELAdapter(AppContext appContext) {
- this.appContext = appContext;
+ this(appContext, null);
+ }
+ public CustomELAdapter(AppContext appContext, WebContext webContext) {
+ this.appContext = appContext;
+ this.webContext = webContext;
}
@Override
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1336812&r1=1336811&r2=1336812&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
Thu May 10 17:41:19 2012
@@ -226,53 +226,57 @@ public class OpenEJBLifecycle implements
//Discover classpath classes
deployManagedBeans(scannerService.getBeanClasses(),
stuff.getBeanContexts());
- for (BeanContext beanContext : stuff.getBeanContexts()) {
- if (!beanContext.getComponentType().isCdiCompatible())
continue;
+ boolean deployEjb = stuff.getWebContext() == null;
- final Class implClass = beanContext.getManagedClass();
+ if (deployEjb) {
+ for (BeanContext beanContext : stuff.getBeanContexts()) {
+ if (!beanContext.getComponentType().isCdiCompatible())
continue;
- //Define annotation type
- AnnotatedType<?> annotatedType =
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(implClass);
+ final Class implClass = beanContext.getManagedClass();
- //Fires ProcessAnnotatedType
- ProcessAnnotatedTypeImpl<?> processAnnotatedEvent =
webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(annotatedType);
+ //Define annotation type
+ AnnotatedType<?> annotatedType =
webBeansContext.getAnnotatedElementFactory().newAnnotatedType(implClass);
- // TODO Can you really veto an EJB?
- //if veto() is called
- if (processAnnotatedEvent.isVeto()) {
- continue;
- }
+ //Fires ProcessAnnotatedType
+ ProcessAnnotatedTypeImpl<?> processAnnotatedEvent =
webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(annotatedType);
+
+ // TODO Can you really veto an EJB?
+ //if veto() is called
+ if (processAnnotatedEvent.isVeto()) {
+ continue;
+ }
- CdiEjbBean<Object> bean = new CdiEjbBean<Object>(beanContext,
webBeansContext);
+ CdiEjbBean<Object> bean = new
CdiEjbBean<Object>(beanContext, webBeansContext);
- beanContext.set(CdiEjbBean.class, bean);
- beanContext.set(CurrentCreationalContext.class, new
CurrentCreationalContext());
- beanContext.addSystemInterceptor(new CdiInterceptor(bean,
beanManager, cdiPlugin.getContexsServices()));
+ beanContext.set(CdiEjbBean.class, bean);
+ beanContext.set(CurrentCreationalContext.class, new
CurrentCreationalContext());
+ beanContext.addSystemInterceptor(new CdiInterceptor(bean,
beanManager, cdiPlugin.getContexsServices()));
- EjbUtility.fireEvents((Class<Object>) implClass, bean,
(ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
+ EjbUtility.fireEvents((Class<Object>) implClass, bean,
(ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
-
webBeansContext.getWebBeansUtil().setInjectionTargetBeanEnableFlag(bean);
+
webBeansContext.getWebBeansUtil().setInjectionTargetBeanEnableFlag(bean);
- Class clazz = beanContext.getBeanClass();
- while (clazz.isAnnotationPresent(Specializes.class)) {
- clazz = clazz.getSuperclass();
+ Class clazz = beanContext.getBeanClass();
+ while (clazz.isAnnotationPresent(Specializes.class)) {
+ clazz = clazz.getSuperclass();
- if (clazz == null || Object.class.equals(clazz)) break;
+ if (clazz == null || Object.class.equals(clazz)) break;
- final CdiEjbBean<Object> superBean = new
CdiEjbBean<Object>(beanContext, webBeansContext, clazz);
+ final CdiEjbBean<Object> superBean = new
CdiEjbBean<Object>(beanContext, webBeansContext, clazz);
- EjbBeanCreatorImpl<?> ejbBeanCreator = new
EjbBeanCreatorImpl(superBean);
+ EjbBeanCreatorImpl<?> ejbBeanCreator = new
EjbBeanCreatorImpl(superBean);
- //Define meta-data
- ejbBeanCreator.defineSerializable();
- ejbBeanCreator.defineStereoTypes();
- ejbBeanCreator.defineScopeType("Session Bean
implementation class : " + clazz.getName() + " stereotypes must declare same
@ScopeType annotations", false);
- ejbBeanCreator.defineQualifier();
-
ejbBeanCreator.defineName(WebBeansUtil.getManagedBeanDefaultName(clazz.getSimpleName()));
+ //Define meta-data
+ ejbBeanCreator.defineSerializable();
+ ejbBeanCreator.defineStereoTypes();
+ ejbBeanCreator.defineScopeType("Session Bean
implementation class : " + clazz.getName() + " stereotypes must declare same
@ScopeType annotations", false);
+ ejbBeanCreator.defineQualifier();
+
ejbBeanCreator.defineName(WebBeansUtil.getManagedBeanDefaultName(clazz.getSimpleName()));
- bean.specialize(superBean);
+ bean.specialize(superBean);
- EjbUtility.defineSpecializedData(clazz, bean);
+ EjbUtility.defineSpecializedData(clazz, bean);
+ }
}
}
@@ -285,39 +289,43 @@ public class OpenEJBLifecycle implements
//Validate injection Points
deployer.validateInjectionPoints();
- for (BeanContext beanContext : stuff.getBeanContexts()) {
- if (!beanContext.getComponentType().isSession() ||
beanContext.isDynamicallyImplemented()) continue;
- final CdiEjbBean bean = beanContext.get(CdiEjbBean.class);
-
- // The interceptor stack is empty until
validateInjectionPoints is called as it does more than validate.
- final List<InterceptorData> datas = bean.getInterceptorStack();
-
- final
List<org.apache.openejb.core.interceptor.InterceptorData> converted = new
ArrayList<org.apache.openejb.core.interceptor.InterceptorData>();
- for (InterceptorData data : datas) {
- // todo this needs to use the code in
InterceptorBindingBuilder that respects override rules and private methods
- final org.apache.openejb.core.interceptor.InterceptorData
openejbData =
org.apache.openejb.core.interceptor.InterceptorData.scan(data.getInterceptorClass());
- if (data.isDefinedInMethod()) {
- final Method method =
data.getInterceptorBindingMethod();
- beanContext.addCdiMethodInterceptor(method,
openejbData);
- } else {
- converted.add(openejbData);
+ if (deployEjb) {
+ for (BeanContext beanContext : stuff.getBeanContexts()) {
+ if (!beanContext.getComponentType().isSession() ||
beanContext.isDynamicallyImplemented()) continue;
+ final CdiEjbBean bean = beanContext.get(CdiEjbBean.class);
+
+ // The interceptor stack is empty until
validateInjectionPoints is called as it does more than validate.
+ final List<InterceptorData> datas =
bean.getInterceptorStack();
+
+ final
List<org.apache.openejb.core.interceptor.InterceptorData> converted = new
ArrayList<org.apache.openejb.core.interceptor.InterceptorData>();
+ for (InterceptorData data : datas) {
+ // todo this needs to use the code in
InterceptorBindingBuilder that respects override rules and private methods
+ final
org.apache.openejb.core.interceptor.InterceptorData openejbData =
org.apache.openejb.core.interceptor.InterceptorData.scan(data.getInterceptorClass());
+ if (data.isDefinedInMethod()) {
+ final Method method =
data.getInterceptorBindingMethod();
+ beanContext.addCdiMethodInterceptor(method,
openejbData);
+ } else {
+ converted.add(openejbData);
+ }
}
- }
- beanContext.setCdiInterceptors(converted);
+ beanContext.setCdiInterceptors(converted);
+ }
}
//Fire Event
deployer.fireAfterDeploymentValidationEvent();
- for (BeanContext beanContext : stuff.getBeanContexts()) {
+ if (deployEjb) {
+ for (BeanContext beanContext : stuff.getBeanContexts()) {
- final CdiEjbBean<Object> bean =
beanContext.get(CdiEjbBean.class);;
+ final CdiEjbBean<Object> bean =
beanContext.get(CdiEjbBean.class);;
- if (bean == null) continue;
+ if (bean == null) continue;
- final BeanManagerImpl manager =
webBeansContext.getBeanManagerImpl();
- manager.addBean(new NewCdiEjbBean<Object>(bean));
+ final BeanManagerImpl manager =
webBeansContext.getBeanManagerImpl();
+ manager.addBean(new NewCdiEjbBean<Object>(bean));
+ }
}
} catch (Exception e1) {
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java?rev=1336812&r1=1336811&r2=1336812&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
Thu May 10 17:41:19 2012
@@ -81,7 +81,11 @@ public class ThreadSingletonServiceImpl
services.put(AppContext.class, appContext);
services.put(TransactionService.class, new
OpenEJBTransactionService());
- services.put(ELAdaptor.class,new CustomELAdapter(appContext));
+ if (startupObject.getWebContext() == null) {
+ services.put(ELAdaptor.class,new CustomELAdapter(appContext));
+ } else {
+ services.put(ELAdaptor.class,new CustomELAdapter(appContext,
startupObject.getWebContext()));
+ }
services.put(ContextsService.class, new CdiAppContextsService(true));
services.put(ResourceInjectionService.class, new
CdiResourceInjectionService());
services.put(ScannerService.class, new CdiScanner());
@@ -100,8 +104,14 @@ public class ThreadSingletonServiceImpl
WebBeansContext webBeansContext;
Object old = null;
try {
- webBeansContext = new WebBeansContext(services, properties);
- appContext.set(WebBeansContext.class, webBeansContext);
+ if (startupObject.getWebContext() == null) {
+ webBeansContext = new WebBeansContext(services, properties);
+ appContext.set(WebBeansContext.class, webBeansContext);
+ } else {
+ webBeansContext = new WebappWebBeansContext(services,
properties, appContext.getWebBeansContext());
+
startupObject.getWebContext().setWebbeansContext(webBeansContext);
+ }
+
old = contextEntered(webBeansContext);
setConfiguration(webBeansContext.getOpenWebBeansConfiguration());
try {
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppElResolver.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppElResolver.java?rev=1336812&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppElResolver.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebAppElResolver.java
Thu May 10 17:41:19 2012
@@ -0,0 +1,57 @@
+package org.apache.openejb.cdi;
+
+import java.beans.FeatureDescriptor;
+import java.util.Iterator;
+import javax.el.ELContext;
+import javax.el.ELException;
+import javax.el.ELResolver;
+import javax.el.PropertyNotFoundException;
+import javax.el.PropertyNotWritableException;
+
+public class WebAppElResolver extends ELResolver {
+ private final ELResolver parent;
+ private final ELResolver resolver;
+
+ public WebAppElResolver(ELResolver elResolver, ELResolver elResolver1) {
+ resolver = elResolver;
+ parent = elResolver1;
+ }
+
+ @Override
+ public Object getValue(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException {
+ Object value = resolver.getValue(context, base, property);
+ if (value == null) {
+ value = parent.getValue(context, base, property);
+ }
+ return value;
+ }
+
+ @Override
+ public Class<?> getType(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException {
+ Class<?> value = resolver.getType(context, base, property);
+ if (value == null) {
+ value = parent.getType(context, base, property);
+ }
+ return value;
+ }
+
+ @Override
+ public void setValue(ELContext context, Object base, Object property,
Object value) throws NullPointerException, PropertyNotFoundException,
PropertyNotWritableException, ELException {
+ // no-op
+ }
+
+ @Override
+ public boolean isReadOnly(ELContext context, Object base, Object property)
throws NullPointerException, PropertyNotFoundException, ELException {
+ return false;
+ }
+
+ @Override
+ public Iterator<FeatureDescriptor> getFeatureDescriptors(ELContext
context, Object base) {
+ return null;
+ }
+
+ @Override
+ public Class<?> getCommonPropertyType(ELContext context, Object base) {
+ return null;
+ }
+}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java?rev=1336812&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappBeanManager.java
Thu May 10 17:41:19 2012
@@ -0,0 +1,317 @@
+package org.apache.openejb.cdi;
+
+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 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.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.BeanManager;
+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 org.apache.webbeans.container.BeanManagerImpl;
+
+public class WebappBeanManager extends BeanManagerImpl {
+ private final WebappWebBeansContext webappCtx;
+
+ public WebappBeanManager(WebappWebBeansContext ctx) {
+ super(ctx);
+ webappCtx = ctx;
+ }
+
+ @Override
+ public Object getReference(Bean<?> bean, Type beanType,
CreationalContext<?> ctx) {
+ try {
+ return super.getReference(bean, beanType, ctx);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().getReference(bean, beanType, ctx);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public Object getInjectableReference(InjectionPoint injectionPoint,
CreationalContext<?> ctx) {
+ try {
+ return super.getInjectableReference(injectionPoint, ctx);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().getInjectableReference(injectionPoint,
ctx);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public <T> CreationalContext<T> createCreationalContext(Contextual<T>
contextual) {
+ try {
+ return super.createCreationalContext(contextual);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().createCreationalContext(contextual);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public Set<Bean<?>> getBeans(Type beanType, Annotation... qualifiers) {
+ final Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ beans.addAll(super.getBeans(beanType, qualifiers));
+ beans.addAll(getParentBm().getBeans(beanType, qualifiers));
+ return beans;
+ }
+
+ @Override
+ public Set<Bean<?>> getBeans(String name) {
+ final Set<Bean<?>> beans = new HashSet<Bean<?>>();
+ beans.addAll(super.getBeans(name));
+ beans.addAll(getParentBm().getBeans(name));
+ return beans;
+ }
+
+ @Override
+ public Bean<?> getPassivationCapableBean(String id) {
+ try {
+ return super.getPassivationCapableBean(id);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().getPassivationCapableBean(id);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @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) {
+ try {
+ super.fireEvent(event, qualifiers);
+ } catch (RuntimeException e) {
+ try {
+ getParentBm().fireEvent(event, qualifiers);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public <T> Set<ObserverMethod<? super T>> resolveObserverMethods(T event,
Annotation... qualifiers) {
+ final Set<ObserverMethod<? super T>> mtds = new
HashSet<ObserverMethod<? super T>>();
+ mtds.addAll(super.resolveObserverMethods(event, qualifiers));
+ mtds.addAll(getParentBm().resolveObserverMethods(event, qualifiers));
+ return mtds;
+ }
+
+ @Override
+ public List<Decorator<?>> resolveDecorators(Set<Type> types, Annotation...
qualifiers) {
+ final List<Decorator<?>> decorators = new ArrayList<Decorator<?>>();
+ decorators.addAll(super.resolveDecorators(types, qualifiers));
+ decorators.addAll(getParentBm().resolveDecorators(types, qualifiers));
+ return decorators;
+ }
+
+ @Override
+ public List<Interceptor<?>> resolveInterceptors(InterceptionType type,
Annotation... qualifiers) {
+ final List<Interceptor<?>> interceptors = new
ArrayList<Interceptor<?>>();
+ interceptors.addAll(super.resolveInterceptors(type, qualifiers));
+ interceptors.addAll(getParentBm().resolveInterceptors(type,
qualifiers));
+ return interceptors;
+ }
+
+ @Override
+ public void validate(InjectionPoint injectionPoint) {
+ try {
+ super.validate(injectionPoint);
+ } catch (RuntimeException e) {
+ try {
+ getParentBm().validate(injectionPoint);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @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);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().isNormalScope(annotationType);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public boolean isPassivatingScope(Class<? extends Annotation>
annotationType) {
+ try {
+ return super.isPassivatingScope(annotationType);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().isPassivatingScope(annotationType);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+
+ @Override
+ public boolean isQualifier(Class<? extends Annotation> annotationType) {
+ try {
+ return super.isQualifier(annotationType);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().isQualifier(annotationType);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public boolean isInterceptorBinding(Class<? extends Annotation>
annotationType) {
+ try {
+ return super.isInterceptorBinding(annotationType);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().isInterceptorBinding(annotationType);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+
+ @Override
+ public boolean isStereotype(Class<? extends Annotation> annotationType) {
+ try {
+ return super.isStereotype(annotationType);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().isStereotype(annotationType);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public Set<Annotation> getInterceptorBindingDefinition(Class<? extends
Annotation> qualifier) {
+ try {
+ return super.getInterceptorBindingDefinition(qualifier);
+ } catch (RuntimeException e) {
+ try {
+ return
getParentBm().getInterceptorBindingDefinition(qualifier);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public Set<Annotation> getStereotypeDefinition(Class<? extends Annotation>
stereotype) {
+ final Set<Annotation> mtds = new HashSet<Annotation>();
+ mtds.addAll(super.getStereotypeDefinition(stereotype));
+ mtds.addAll(getParentBm().getStereotypeDefinition(stereotype));
+ return mtds;
+ }
+
+ @Override
+ public Context getContext(Class<? extends Annotation> scope) {
+ try {
+ return super.getContext(scope);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().getContext(scope);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public ELResolver getELResolver() {
+ return new WebAppElResolver(super.getELResolver(),
getParentBm().getELResolver());
+ }
+
+ @Override
+ public <T> AnnotatedType<T> createAnnotatedType(Class<T> type) {
+ try {
+ return super.createAnnotatedType(type);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().createAnnotatedType(type);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public <T> InjectionTarget<T> createInjectionTarget(AnnotatedType<T> type)
{
+ try {
+ return super.createInjectionTarget(type);
+ } catch (RuntimeException e) {
+ try {
+ return getParentBm().createInjectionTarget(type);
+ } catch (RuntimeException ignored) {
+ throw e;
+ }
+ }
+ }
+
+ @Override
+ public ExpressionFactory wrapExpressionFactory(javax.el.ExpressionFactory
expressionFactory) {
+ return
super.wrapExpressionFactory(getParentBm().wrapExpressionFactory(expressionFactory));
+ }
+
+ public BeanManager getParentBm() {
+ return webappCtx.getParent().getBeanManagerImpl();
+ }
+}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappWebBeansContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappWebBeansContext.java?rev=1336812&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappWebBeansContext.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/cdi/WebappWebBeansContext.java
Thu May 10 17:41:19 2012
@@ -0,0 +1,28 @@
+package org.apache.openejb.cdi;
+
+import java.util.Map;
+import java.util.Properties;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.container.BeanManagerImpl;
+
+public class WebappWebBeansContext extends WebBeansContext {
+ private WebBeansContext parent;
+ private BeanManagerImpl bm;
+
+ public WebappWebBeansContext(Map<Class<?>, Object> services, Properties
properties, WebBeansContext webBeansContext) {
+ super(services, properties);
+ parent = webBeansContext;
+ }
+
+ @Override
+ public BeanManagerImpl getBeanManagerImpl() {
+ if (bm == null) { // should be done in the constructor
+ bm = new WebappBeanManager(this);
+ }
+ return bm;
+ }
+
+ public WebBeansContext getParent() {
+ return parent;
+ }
+}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java?rev=1336812&r1=1336811&r2=1336812&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
Thu May 10 17:41:19 2012
@@ -39,6 +39,7 @@ public class WebContext {
private Context jndiEnc;
private final AppContext appContext;
private Map<String,Object> bindings;
+ private WebBeansContext webbeansContext;
public Context getInitialContext() {
if (initialContext != null) return initialContext;
@@ -175,4 +176,12 @@ public class WebContext {
public Map<String, Object> getBindings() {
return bindings;
}
+
+ public void setWebbeansContext(WebBeansContext webbeansContext) {
+ this.webbeansContext = webbeansContext;
+ }
+
+ public WebBeansContext getWebbeansContext() {
+ return webbeansContext;
+ }
}
Modified:
openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml?rev=1336812&r1=1336811&r2=1336812&view=diff
==============================================================================
--- openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
(original)
+++ openejb/trunk/openejb/tck/cdi-tomee-embedded/src/test/resources/passing.xml
Thu May 10 17:41:19 2012
@@ -18,7 +18,11 @@
<suite name="CDI TCK" verbose="0">
<test name="CDI TCK">
<classes>
+ <class
name="org.jboss.jsr299.tck.tests.extensions.container.event.ContainerEventTest"
/>
+ <!--
<class
name="org.jboss.jsr299.tck.tests.deployment.packaging.bundledLibrary.LibraryInEarTest"/>
+ <class
name="org.jboss.jsr299.tck.tests.context.application.ejb.ApplicationContextSharedTest"
/>
+ -->
</classes>
</test>
</suite>
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=1336812&r1=1336811&r2=1336812&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
Thu May 10 17:41:19 2012
@@ -902,10 +902,17 @@ public class TomcatWebAppBuilder impleme
if (appContext == null) return null;
- final WebBeansContext webBeansContext =
appContext.getWebBeansContext();
+ WebBeansContext webBeansContext = appContext.getWebBeansContext();
if (webBeansContext == null) return null;
+ for (WebContext web : appContext.getWebContexts()) {
+ if (contextInfo.standardContext.getName().equals(web.getId())) {
+ webBeansContext = web.getWebbeansContext();
+ break;
+ }
+ }
+
return new WebBeansListener(webBeansContext);
}