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 2013/04/19 16:05:03 UTC
svn commit: r1469836 [2/3] - in /tomee/tomee/trunk: ./
arquillian/arquillian-common/src/main/java/org/apache/openejb/arquillian/common/enrichment/
arquillian/arquillian-openejb-embedded-4/src/main/java/org/apache/openejb/arquillian/openejb/
container/o...
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CdiScanner.java Fri Apr 19 14:05:02 2013
@@ -18,10 +18,10 @@
package org.apache.openejb.cdi;
+import org.apache.openejb.BeanContext;
import org.apache.openejb.assembler.classic.AppInfo;
import org.apache.openejb.assembler.classic.BeansInfo;
import org.apache.openejb.assembler.classic.EjbJarInfo;
-import org.apache.openejb.assembler.classic.EnterpriseBeanInfo;
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.PropertyPlaceHolderHelper;
import org.apache.openejb.util.classloader.ClassLoaderComparator;
@@ -56,11 +56,6 @@ public class CdiScanner implements Scann
private final Set<Class<?>> classes = new HashSet<Class<?>>();
@Override
- public Set<String> getAllAnnotations(String className) {
- return Collections.emptySet();
- }
-
- @Override
public void init(Object object) {
if (!(object instanceof StartupObject)) {
return;
@@ -80,14 +75,6 @@ public class CdiScanner implements Scann
final DecoratorsManager decoratorsManager = webBeansContext.getDecoratorsManager();
final InterceptorsManager interceptorsManager = webBeansContext.getInterceptorsManager();
- final HashSet<String> ejbClasses = new HashSet<String>();
-
- for (EjbJarInfo ejbJar : appInfo.ejbJars) {
- for (EnterpriseBeanInfo bean : ejbJar.enterpriseBeans) {
- ejbClasses.add(bean.ejbClass);
- }
- }
-
final AnnotationManager annotationManager = webBeansContext.getAnnotationManager();
for (EjbJarInfo ejbJar : appInfo.ejbJars) {
@@ -127,8 +114,8 @@ public class CdiScanner implements Scann
throw new WebBeansConfigurationException("Interceptor class : " + clazz.getName() + " must have at least one @InterceptorBindingType");
}
- if (!interceptorsManager.isInterceptorEnabled(clazz)) {
- interceptorsManager.addNewInterceptor(clazz);
+ if (!interceptorsManager.isInterceptorClassEnabled(clazz)) {
+ interceptorsManager.addEnabledInterceptorClass(clazz);
classes.add(clazz);
} /* else { don't do it, check is done when we know the beans.xml path --> org.apache.openejb.config.DeploymentLoader.addBeansXmls
throw new WebBeansConfigurationException("Interceptor class : " + clazz.getName() + " is already defined");
@@ -143,7 +130,7 @@ public class CdiScanner implements Scann
if (clazz != null) {
if (!decoratorsManager.isDecoratorEnabled(clazz)) {
- decoratorsManager.addNewDecorator(clazz);
+ decoratorsManager.addEnabledDecorator(clazz);
classes.add(clazz);
} // same than interceptors regarding throw new WebBeansConfigurationException("Decorator class : " + clazz.getName() + " is already defined");
} else if (shouldThrowCouldNotLoadException(startupObject)) {
@@ -178,14 +165,28 @@ public class CdiScanner implements Scann
final Iterator<String> it = beans.managedClasses.iterator();
while (it.hasNext()) {
- process(classLoader, ejbClasses, it, startupObject, comparator, scl, filterByClassLoader);
+ process(classLoader, it, startupObject, comparator, scl, filterByClassLoader);
}
final Collection<String> otherClasses = ADDITIONAL_CLASSES.get();
if (otherClasses != null) {
final Iterator<String> it2 = otherClasses.iterator();
while (it2.hasNext()) {
- process(classLoader, ejbClasses, it2, startupObject, comparator, scl, filterByClassLoader);
+ process(classLoader, it2, startupObject, comparator, scl, filterByClassLoader);
+ }
+ }
+
+ if (startupObject.getBeanContexts() != null) { // ensure ejbs are in managed beans otherwise they will not be deployed in CDI
+ for (final BeanContext bc : startupObject.getBeanContexts()) {
+ final String name = bc.getBeanClass().getName();
+ if (BeanContext.Comp.class.getName().equals(name)) {
+ continue;
+ }
+
+ final Class<?> load = load(name, classLoader);
+ if (load != null && !classes.contains(name)) {
+ classes.add(load);
+ }
}
}
}
@@ -197,12 +198,8 @@ public class CdiScanner implements Scann
return appInfo.webAppAlone || appInfo.webApps.size() == 0 || startupObject.isFromWebApp();
}
- private void process(final ClassLoader classLoader, final Set<String> ejbClasses, final Iterator<String> it, final StartupObject startupObject, final ClassLoaderComparator comparator, final ClassLoader scl, final boolean filterByClassLoader) {
+ private void process(final ClassLoader classLoader, final Iterator<String> it, final StartupObject startupObject, final ClassLoaderComparator comparator, final ClassLoader scl, final boolean filterByClassLoader) {
final String className = it.next();
- if (ejbClasses.contains(className)) {
- it.remove();
- return;
- }
final Class clazz = load(className, classLoader);
if (clazz == null) {
return;
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ConstructorInjectionBean.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ConstructorInjectionBean.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ConstructorInjectionBean.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ConstructorInjectionBean.java Fri Apr 19 14:05:02 2013
@@ -16,64 +16,46 @@
*/
package org.apache.openejb.cdi;
-import org.apache.webbeans.annotation.DependentScopeLiteral;
-import org.apache.webbeans.component.AbstractInjectionTargetBean;
+import org.apache.openejb.OpenEJBRuntimeException;
+import org.apache.webbeans.component.InjectionTargetBean;
import org.apache.webbeans.component.WebBeansType;
-import org.apache.webbeans.config.DefinitionUtil;
+import org.apache.webbeans.component.creation.BeanAttributesBuilder;
import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.inject.InjectableConstructor;
-import org.apache.webbeans.util.WebBeansUtil;
+import org.apache.webbeans.portable.InjectionTargetImpl;
-import javax.enterprise.context.spi.CreationalContext;
-import java.lang.reflect.Constructor;
+import javax.enterprise.inject.spi.AnnotatedMethod;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.InjectionPoint;
+import java.lang.reflect.Field;
+import java.util.Collections;
+import java.util.Set;
/**
* @version $Rev$ $Date$
*/
-public class ConstructorInjectionBean<T> extends AbstractInjectionTargetBean<T> {
-
- private final Constructor<T> constructor;
-
- public ConstructorInjectionBean(WebBeansContext webBeansContext, Class<T> returnType) {
- super(WebBeansType.DEPENDENT, returnType, webBeansContext);
-
- if (webBeansContext == null) throw new NullPointerException("webBeansContext");
- if (returnType == null) throw new NullPointerException("returnType");
-
- final WebBeansUtil webBeansUtil = webBeansContext.getWebBeansUtil();
-
- if (webBeansUtil == null) throw new NullPointerException("webBeansUtil");
-
- constructor = webBeansUtil.defineConstructor(returnType);
-
- if (constructor == null) throw new NullPointerException("constructor");
-
- final DefinitionUtil definitionUtil = getWebBeansContext().getDefinitionUtil();
-
- if (definitionUtil == null) throw new NullPointerException("definitionUtil");
-
- definitionUtil.addConstructorInjectionPointMetaData(this, constructor);
+public class ConstructorInjectionBean<T> extends InjectionTargetBean<T> { // TODO: see InjectableConstructor
+ private static final Field INJECTION_TARGET_FIELD;
+ static {
+ try {
+ INJECTION_TARGET_FIELD = InjectionTargetBean.class.getDeclaredField("injectionTarget");
+ } catch (final NoSuchFieldException e) {
+ throw new OpenEJBRuntimeException(e);
+ }
+ INJECTION_TARGET_FIELD.setAccessible(true);
}
- public ConstructorInjectionBean<T> complete() {
- // these are not used immediately in createInstance()
+ public ConstructorInjectionBean(WebBeansContext webBeansContext, Class<T> returnType, AnnotatedType<T> at) {
+ super(webBeansContext, WebBeansType.DEPENDENT, at, BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(at).build(), returnType);
try {
- final DefinitionUtil definitionUtil = getWebBeansContext().getDefinitionUtil();
- if (getScope() == null) { // avoid NPE
- setImplScopeType(new DependentScopeLiteral());
- }
- definitionUtil.defineInjectedFields(this);
- definitionUtil.defineInjectedMethods(this);
- } catch (Exception e) {
- e.printStackTrace();
+ INJECTION_TARGET_FIELD.set(this, new ConstructorInjectionTarget<T>(getAnnotatedType(), getInjectionPoints(), getWebBeansContext()));
+ } catch (final Exception e) {
+ throw new OpenEJBRuntimeException(e);
}
-
- return this;
}
- @Override
- protected T createInstance(CreationalContext<T> tCreationalContext) {
- InjectableConstructor<T> ic = new InjectableConstructor<T>(constructor, this, tCreationalContext);
- return ic.doInjection();
+ private static final class ConstructorInjectionTarget<T> extends InjectionTargetImpl<T> {
+ public ConstructorInjectionTarget(final AnnotatedType<T> annotatedType, final Set<InjectionPoint> points, final WebBeansContext webBeansContext) {
+ super(annotatedType, points, webBeansContext, Collections.<AnnotatedMethod<?>>emptyList(), Collections.<AnnotatedMethod<?>>emptyList());
+ }
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/CustomELAdapter.java Fri Apr 19 14:05:02 2013
@@ -18,8 +18,8 @@ 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.el22.WebBeansELResolver;
+import org.apache.webbeans.el22.WrappedExpressionFactory;
import org.apache.webbeans.spi.adaptor.ELAdaptor;
import javax.el.ELResolver;
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ManagedSecurityService.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ManagedSecurityService.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ManagedSecurityService.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ManagedSecurityService.java Fri Apr 19 14:05:02 2013
@@ -45,6 +45,11 @@ public class ManagedSecurityService impl
}
@Override
+ public <T> Constructor<T> doPrivilegedGetConstructor(Class<T> clazz, Class<?>... parameterTypes) {
+ return delegate.doPrivilegedGetConstructor(clazz, parameterTypes);
+ }
+
+ @Override
public <T> Constructor<?>[] doPrivilegedGetDeclaredConstructors(final Class<T> clazz) {
return delegate.doPrivilegedGetDeclaredConstructors(clazz);
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/NewCdiEjbBean.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/NewCdiEjbBean.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/NewCdiEjbBean.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/NewCdiEjbBean.java Fri Apr 19 14:05:02 2013
@@ -18,10 +18,14 @@ package org.apache.openejb.cdi;
import org.apache.webbeans.annotation.NewLiteral;
import org.apache.webbeans.component.NewBean;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.container.InjectionTargetFactoryImpl;
import javax.enterprise.context.Dependent;
+import javax.enterprise.inject.spi.AnnotatedType;
+import javax.enterprise.inject.spi.Bean;
+import javax.enterprise.inject.spi.InjectionTarget;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Set;
@@ -29,19 +33,13 @@ import java.util.Set;
* @version $Rev$ $Date$
*/
public class NewCdiEjbBean<T> extends CdiEjbBean<T> implements NewBean<T> {
+ private static final Set<Annotation> QUALIFIERS = Collections.singleton(Annotation.class.cast(new NewLiteral()));
- public NewCdiEjbBean(CdiEjbBean<T> that) {
- super(that.getBeanContext(), that.getWebBeansContext());
+ private final String id;
- this.addQualifier(new NewLiteral(getReturnType()));
-
- this.apiTypes.clear();
- this.apiTypes.addAll(that.getTypes());
- this.setName(null);
- this.getInjectedFields().addAll(that.getInjectedFields());
- this.getInjectedFromSuperFields().addAll(that.getInjectedFromSuperFields());
- this.getInjectedFromSuperMethods().addAll(that.getInjectedFromSuperMethods());
- this.getInjectedMethods().addAll(that.getInjectedMethods());
+ public NewCdiEjbBean(final CdiEjbBean<T> that) {
+ super(that.getBeanContext(), that.getWebBeansContext(), that.getBeanContext().getManagedClass(), that.getAnnotatedType(), new NewEjbInjectionTargetFactory<T>(that.getAnnotatedType(), that.getWebBeansContext(), that.getInjectionTarget()));
+ this.id = that.getId() + "NewBean";
}
@Override
@@ -51,16 +49,35 @@ public class NewCdiEjbBean<T> extends Cd
@Override
public Set<Class<? extends Annotation>> getStereotypes() {
- return Collections.EMPTY_SET;
+ return Collections.emptySet();
}
@Override
- public Set<Method> getObservableMethods() {
- return Collections.EMPTY_SET;
+ public String getName() {
+ return null;
}
@Override
public String getId() {
- return super.getId()+"@NewBean";
+ return id;
+ }
+
+ @Override
+ public Set<Annotation> getQualifiers() {
+ return QUALIFIERS;
+ }
+
+ private static final class NewEjbInjectionTargetFactory<T> extends InjectionTargetFactoryImpl<T> {
+ private final InjectionTarget<T> injectionTarget;
+
+ public NewEjbInjectionTargetFactory(final AnnotatedType<T> annotatedType, final WebBeansContext webBeansContext, final InjectionTarget<T> it) {
+ super(annotatedType, webBeansContext);
+ this.injectionTarget = it;
+ }
+
+ @Override
+ public InjectionTarget<T> createInjectionTarget(final Bean<T> bean) { // avoid to refire it
+ return injectionTarget;
+ }
}
}
Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanBuilder.java?rev=1469836&view=auto
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanBuilder.java (added)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBBeanBuilder.java Fri Apr 19 14:05:02 2013
@@ -0,0 +1,64 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openejb.cdi;
+
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.assembler.classic.ProxyInterfaceResolver;
+import org.apache.webbeans.component.creation.BeanAttributesBuilder;
+import org.apache.webbeans.config.WebBeansContext;
+import org.apache.webbeans.ejb.common.component.EjbBeanBuilder;
+
+import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
+import java.util.List;
+
+public class OpenEJBBeanBuilder<A> extends EjbBeanBuilder<A, CdiEjbBean<A>> {
+ private final BeanContext beanContext;
+
+ public OpenEJBBeanBuilder(final BeanContext bc, final WebBeansContext webBeansContext, final AnnotatedType<A> annotatedType) {
+ super(webBeansContext, annotatedType, BeanAttributesBuilder.forContext(webBeansContext).newBeanAttibutes(annotatedType).build());
+ this.beanContext = bc;
+ }
+
+ @Override
+ protected CdiEjbBean<A> createBean(final Class<A> beanClass, final boolean beanEnabled) {
+ return new CdiEjbBean<A>(beanContext, webBeansContext, annotatedType);
+ }
+
+ @Override
+ protected A getInstance(final CreationalContext<A> creationalContext) {
+ final List<Class> classes = beanContext.getBusinessLocalInterfaces();
+ final CurrentCreationalContext currentCreationalContext = beanContext.get(CurrentCreationalContext.class);
+ final CreationalContext existing = currentCreationalContext.get();
+ currentCreationalContext.set(creationalContext);
+ try {
+ if (classes.size() == 0 && beanContext.isLocalbean()) {
+ final BeanContext.BusinessLocalBeanHome home = beanContext.getBusinessLocalBeanHome();
+ return (A) home.create();
+ } else {
+ final Class<?> mainInterface = classes.get(0);
+ final List<Class> interfaces = ProxyInterfaceResolver.getInterfaces(beanContext.getBeanClass(), mainInterface, classes);
+ final BeanContext.BusinessLocalHome home = beanContext.getBusinessLocalHome(interfaces, mainInterface);
+ return (A) home.create();
+ }
+ } finally {
+ currentCreationalContext.set(existing);
+ }
+ }
+}
Added: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBJndiService.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBJndiService.java?rev=1469836&view=auto
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBJndiService.java (added)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBJndiService.java Fri Apr 19 14:05:02 2013
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.openejb.cdi;
+
+import org.apache.webbeans.spi.JNDIService;
+
+public class OpenEJBJndiService implements JNDIService {
+ private Object bm;
+
+ @Override
+ public void bind(final String name, final Object object) {
+ bm = object;
+ }
+
+ @Override
+ public void unbind(final String name) {
+ // no-op
+ }
+
+ @Override
+ public <T> T lookup(final String name, final Class<? extends T> expectedClass) {
+ return expectedClass.cast(bm);
+ }
+}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBLifecycle.java Fri Apr 19 14:05:02 2013
@@ -23,17 +23,12 @@ import org.apache.openejb.assembler.clas
import org.apache.openejb.loader.SystemInstance;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.webbeans.component.InjectionPointBean;
-import org.apache.webbeans.component.NewBean;
import org.apache.webbeans.config.OpenWebBeansConfiguration;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.config.WebBeansFinder;
import org.apache.webbeans.container.BeanManagerImpl;
-import org.apache.webbeans.ejb.common.component.EjbBeanCreatorImpl;
-import org.apache.webbeans.ejb.common.util.EjbUtility;
-import org.apache.webbeans.intercept.InterceptorData;
-import org.apache.webbeans.portable.events.ExtensionLoader;
-import org.apache.webbeans.portable.events.ProcessAnnotatedTypeImpl;
+import org.apache.webbeans.intercept.InterceptorResolutionService;
+import org.apache.webbeans.portable.InjectionTargetImpl;
import org.apache.webbeans.portable.events.discovery.BeforeShutdownImpl;
import org.apache.webbeans.spi.ContainerLifecycle;
import org.apache.webbeans.spi.ContextsService;
@@ -46,22 +41,12 @@ import org.apache.webbeans.util.WebBeans
import org.apache.webbeans.xml.WebBeansXMLConfigurator;
import javax.el.ELResolver;
-import javax.enterprise.inject.Specializes;
-import javax.enterprise.inject.spi.AnnotatedType;
import javax.enterprise.inject.spi.BeanManager;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.jsp.JspApplicationContext;
import javax.servlet.jsp.JspFactory;
-import java.io.IOException;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
import java.util.Properties;
-import java.util.Set;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ThreadFactory;
@@ -85,7 +70,7 @@ public class OpenEJBLifecycle implements
private final boolean skipClassNotFoundError;
/**Deploy discovered beans*/
- private final BeansDeployer deployer;
+ private final org.apache.webbeans.config.BeansDeployer deployer;
/**XML discovery. */
//XML discovery is removed from the specification. It is here for next revisions of spec.
@@ -100,11 +85,6 @@ public class OpenEJBLifecycle implements
/**Manages unused conversations*/
private ScheduledExecutorService service = null;
- //TODO make sure this isn't used and remove it
- public OpenEJBLifecycle() {
- this(WebBeansContext.currentInstance());
- }
-
public OpenEJBLifecycle(WebBeansContext webBeansContext)
{
this.webBeansContext = webBeansContext;
@@ -112,7 +92,7 @@ public class OpenEJBLifecycle implements
this.beanManager = webBeansContext.getBeanManagerImpl();
this.xmlDeployer = new WebBeansXMLConfigurator();
- this.deployer = new BeansDeployer(this.xmlDeployer, webBeansContext);
+ this.deployer = new org.apache.webbeans.config.BeansDeployer(this.xmlDeployer, webBeansContext);
this.jndiService = webBeansContext.getService(JNDIService.class);
this.beanManager.setXMLConfigurator(this.xmlDeployer);
this.scannerService = webBeansContext.getScannerService();
@@ -180,18 +160,11 @@ public class OpenEJBLifecycle implements
//Deploy the beans
try {
//Load Extensions
- loadExtensions(appContext);
+ webBeansContext.getExtensionLoader().loadExtensionServices(Thread.currentThread().getContextClassLoader()); // init in OpenEJBLifecycle
//Initialize contexts
this.contextsService.init(startupObject);
- //Configure Default Beans
- // need to be done before fireBeforeBeanDiscoveryEvent
- deployer.configureDefaultBeans();
-
- //Fire Event
- deployer.fireBeforeBeanDiscoveryEvent();
-
//Scanning process
logger.debug("Scanning classpaths for beans artifacts.");
@@ -206,115 +179,23 @@ public class OpenEJBLifecycle implements
this.scannerService.scan();
//Deploy bean from XML. Also configures deployments, interceptors, decorators.
- deployer.deployFromXML(scannerService);
-
- //Checking stereotype conditions
- deployer.checkStereoTypes(scannerService);
-
- //Discover classpath classes
- deployManagedBeans(scannerService.getBeanClasses(), stuff.getBeanContexts());
-
- for (BeanContext beanContext : stuff.getBeanContexts()) {
- if (!beanContext.isCdiCompatible()) continue;
-
- final Class implClass = beanContext.getManagedClass();
-
- //Define annotation type
- final AnnotatedType<Object> annotatedType = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(implClass);
-
- //Fires ProcessAnnotatedType
- final ProcessAnnotatedTypeImpl<?> processAnnotatedEvent = webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(annotatedType);
-
- // TODO Can you really veto an EJB?
- //if veto() is called
- if (processAnnotatedEvent.isVeto()) {
- continue;
- }
-
- final CdiEjbBean<Object> bean = new CdiEjbBean<Object>(beanContext, webBeansContext);
- bean.setAnnotatedType((AnnotatedType<Object>) processAnnotatedEvent.getAnnotatedType()); // update AnnotatedType -- can be updated in extensions
-
- 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);
-
- beanContext.initIsPassivationScope();
-
- webBeansContext.getWebBeansUtil().setInjectionTargetBeanEnableFlag(bean);
-
- Class clazz = beanContext.getBeanClass();
- while (clazz.isAnnotationPresent(Specializes.class)) {
- clazz = clazz.getSuperclass();
-
- if (clazz == null || Object.class.equals(clazz)) break;
-
- final CdiEjbBean<Object> superBean = new CdiEjbBean<Object>(beanContext, webBeansContext, clazz);
-
- 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()));
-
- bean.specialize(superBean);
-
- EjbUtility.defineSpecializedData(clazz, bean);
- }
- }
-
- //Check Specialization
- deployer.checkSpecializations(scannerService);
-
- //Fire Event
- deployer.fireAfterBeanDiscoveryEvent();
-
- //Validate injection Points
- deployer.validateInjectionPoints();
-
- for (BeanContext beanContext : stuff.getBeanContexts()) {
- if (!beanContext.isCdiCompatible() || 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);
- }
-
- //Fire Event
- deployer.fireAfterDeploymentValidationEvent();
-
- for (BeanContext beanContext : stuff.getBeanContexts()) {
-
- final CdiEjbBean<Object> bean = beanContext.get(CdiEjbBean.class);
-
- if (bean == null) continue;
-
- final BeanManagerImpl manager = webBeansContext.getBeanManagerImpl();
- manager.addBean(new NewCdiEjbBean<Object>(bean));
- }
-
+ deployer.deploy(scannerService);
} catch (Exception e1) {
Assembler.logger.error("CDI Beans module deployment failed", e1);
throw new OpenEJBRuntimeException(e1);
}
+
+ for (final BeanContext bc : stuff.getBeanContexts()) {
+ final CdiEjbBean cdiEjbBean = bc.get(CdiEjbBean.class);
+ if (cdiEjbBean == null) {
+ continue;
+ }
+
+ cdiEjbBean.defineBeanInterceptorStack();
+ bc.mergeOWBAndOpenEJBInfo();
+ bc.set(InterceptorResolutionService.BeanInterceptorInfo.class, InjectionTargetImpl.class.cast(cdiEjbBean.getInjectionTarget()).getInterceptorInfo());
+ }
+
//Start actual starting on sub-classes
afterStartApplication(startupObject);
} finally {
@@ -328,83 +209,6 @@ public class OpenEJBLifecycle implements
logger.info("OpenWebBeans Container has started, it took {0} ms.", Long.toString(System.currentTimeMillis() - begin));
}
- public static class NewEjbBean<T> extends CdiEjbBean<T> implements NewBean<T> {
-
- public NewEjbBean(BeanContext beanContext, WebBeansContext webBeansContext) {
- super(beanContext, webBeansContext);
- }
-
-
- }
-
- private void loadExtensions(AppContext appContext) throws IOException, ClassNotFoundException, InstantiationException, IllegalAccessException {
- final ExtensionLoader extensionLoader = webBeansContext.getExtensionLoader();
-
- // Load regularly visible Extensions
- extensionLoader.loadExtensionServices(Thread.currentThread().getContextClassLoader()); // init in OpenEJBLifecycle
-
-
- // Load any potentially misplaced extensions -- TCK seems to be full of them
- // This could perhaps be improved or addressed elsewhere
-// final String s = "WEB-INF/classes/META-INF/services/javax.enterprise.inject.spi.Extension";
-// final ArrayList<URL> list = Collections.list(appContext.getClassLoader().getResources(s));
-// for (URL url : list) {
-// final String className = readContents(url).trim();
-//
-// final Class<?> extensionClass = appContext.getClassLoader().loadClass(className);
-//
-// if (Extension.class.isAssignableFrom(extensionClass)) {
-// final Extension extension = (Extension) extensionClass.newInstance();
-// extensionLoader.addExtension(extension);
-// }
-// }
- }
-
- private void deployManagedBeans(Set<Class<?>> beanClasses, List<BeanContext> ejbs) {
- Set<Class<?>> managedBeans = new HashSet<Class<?>>(beanClasses);
- for (BeanContext beanContext: ejbs) {
- if (beanContext.getComponentType().isSession()) {
- managedBeans.remove(beanContext.getBeanClass());
- }
- }
- // Start from the class
- final Map<Class<?>, AnnotatedType<?>> annotatedTypes = new LinkedHashMap<Class<?>, AnnotatedType<?>>();
- for (Class<?> implClass : managedBeans) { // create all annotated types first to be sure extensions can use it during the fire
- //Define annotation type
- final AnnotatedType<?> at = webBeansContext.getAnnotatedElementFactory().newAnnotatedType(implClass);
- if (at != null) {
- annotatedTypes.put(implClass, at);
- } else {
- logger.warning("an error occured create AnnotatedType for class "
- + implClass.getName() + ". Skipping.");
- }
- }
- for (Map.Entry<Class<?>, AnnotatedType<?>> implClass : annotatedTypes.entrySet()) {
- //Fires ProcessAnnotatedType
- final ProcessAnnotatedTypeImpl<?> processAnnotatedEvent;
- try {
- processAnnotatedEvent = webBeansContext.getWebBeansUtil().fireProcessAnnotatedTypeEvent(implClass.getValue());
- } catch (RuntimeException cnfe) {
- if (skipClassNotFoundError && rootCauseIsClassNotFound(cnfe)) {
- logger.error("an error occured firing ProcessAnnotatedEvent for class "
- + implClass.getValue().getJavaClass().getName() + ". Skipping the bean.");
- logger.debug("Skipping bean cause", cnfe);
- continue;
- } else {
- throw cnfe;
- }
- }
-
- //if veto() is called
- if (processAnnotatedEvent.isVeto()) {
- continue;
- }
-
- deployer.defineManagedBean((Class<Object>) implClass.getKey(), (ProcessAnnotatedTypeImpl<Object>) processAnnotatedEvent);
- }
- annotatedTypes.clear();
- }
-
private static boolean rootCauseIsClassNotFound(final RuntimeException re) {
Throwable e = re;
e.getStackTrace();
@@ -431,7 +235,7 @@ public class OpenEJBLifecycle implements
if (beanManager instanceof WebappBeanManager) {
((WebappBeanManager) beanManager).beforeStop();
}
- this.beanManager.fireEvent(new BeforeShutdownImpl(), BeansDeployer.EMPTY_ANNOTATION_ARRAY);
+ this.beanManager.fireEvent(new BeforeShutdownImpl());
//Destroys context
this.contextsService.destroy(null);
@@ -451,9 +255,6 @@ public class OpenEJBLifecycle implements
//Delete Resolutions Cache
beanManager.getInjectionResolver().clearCaches();
- //Delte proxies
- webBeansContext.getProxyFactory().clear();
-
//Delete AnnotateTypeCache
webBeansContext.getAnnotatedElementFactory().clear();
@@ -491,14 +292,6 @@ public class OpenEJBLifecycle implements
}
/**
- * @return the deployer
- */
- protected BeansDeployer getDeployer()
- {
- return deployer;
- }
-
- /**
* @return the xmlDeployer
*/
protected WebBeansXMLConfigurator getXmlDeployer()
@@ -607,22 +400,10 @@ public class OpenEJBLifecycle implements
//Comment out for commit OWB-502
//ContextFactory.cleanUpContextFactory();
- this.cleanupShutdownThreadLocals();
-
WebBeansFinder.clearInstances(WebBeansUtil.getCurrentClassLoader());
}
/**
- * Ensures that all ThreadLocals, which could have been set in this
- * (shutdown-) Thread, are removed in order to prevent memory leaks.
- */
- private void cleanupShutdownThreadLocals()
- {
- // TODO maybe there are more to cleanup
- InjectionPointBean.removeThreadLocal();
- }
-
- /**
* Returns servelt context otherwise throws exception.
* @param object object
* @return servlet context
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBTransactionService.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBTransactionService.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBTransactionService.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/OpenEJBTransactionService.java Fri Apr 19 14:05:02 2013
@@ -23,7 +23,7 @@ import org.apache.openejb.loader.SystemI
import org.apache.openejb.spi.ContainerSystem;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.webbeans.ee.event.TransactionalEventNotifier;
+import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.spi.TransactionService;
import javax.enterprise.event.TransactionPhase;
@@ -41,6 +41,7 @@ public class OpenEJBTransactionService i
private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_CDI, OpenEJBTransactionService.class);
private final ContainerSystem containerSystem;
+ private WebBeansContext webBeansContext;
public OpenEJBTransactionService() {
containerSystem = SystemInstance.get().getComponent(ContainerSystem.class);
@@ -79,6 +80,14 @@ public class OpenEJBTransactionService i
@Override
public void registerTransactionSynchronization(TransactionPhase phase, ObserverMethod<? super Object> observer, Object event) throws Exception {
- TransactionalEventNotifier.registerTransactionSynchronization(phase, observer, event);
+ webBeansContext.getService(TransactionService.class).registerTransactionSynchronization(phase, observer, event);
+ }
+
+ public void setWebBeansContext(WebBeansContext webBeansContext) {
+ this.webBeansContext = webBeansContext;
+ }
+
+ public WebBeansContext getWebBeansContext() {
+ return webBeansContext;
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cdi/ThreadSingletonServiceImpl.java Fri Apr 19 14:05:02 2013
@@ -32,12 +32,10 @@ import org.apache.webbeans.config.OpenWe
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.intercept.ApplicationScopedBeanInterceptorHandler;
import org.apache.webbeans.intercept.NormalScopedBeanInterceptorHandler;
-import org.apache.webbeans.proxy.Factory;
-import org.apache.webbeans.proxy.ProxyFactory;
-import org.apache.webbeans.proxy.javassist.JavassistFactory;
import org.apache.webbeans.spi.ContainerLifecycle;
import org.apache.webbeans.spi.ContextsService;
import org.apache.webbeans.spi.ConversationService;
+import org.apache.webbeans.spi.JNDIService;
import org.apache.webbeans.spi.LoaderService;
import org.apache.webbeans.spi.ResourceInjectionService;
import org.apache.webbeans.spi.ScannerService;
@@ -61,7 +59,6 @@ public class ThreadSingletonServiceImpl
public static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP, ThreadSingletonServiceImpl.class);
- public static final String OPENEJB_OWB_PROXY_FACTORY = "openejb.owb.proxy-factory";
private static final String SESSION_CONTEXT_CLAZZ = SystemInstance.get().getProperty("openejb.session-context", null);
//this needs to be static because OWB won't tell us what the existing SingletonService is and you can't set it twice.
@@ -73,13 +70,6 @@ public class ThreadSingletonServiceImpl
// no-op
}
- public static Factory owbProxyFactory() {
- if ("asm".equals(SystemInstance.get().getProperty(OPENEJB_OWB_PROXY_FACTORY))) {
- return new AsmFactory();
- }
- return new JavassistFactory();
- }
-
@Override
public void initialize(StartupObject startupObject) {
final AppContext appContext = startupObject.getAppContext();
@@ -126,6 +116,7 @@ public class ThreadSingletonServiceImpl
properties.putAll(appContext.getProperties());
services.put(AppContext.class, appContext);
+ services.put(JNDIService.class, new OpenEJBJndiService());
services.put(TransactionService.class, new OpenEJBTransactionService());
if (startupObject.getWebContext() == null) {
services.put(ELAdaptor.class,new CustomELAdapter(appContext));
@@ -135,7 +126,6 @@ public class ThreadSingletonServiceImpl
services.put(ResourceInjectionService.class, new CdiResourceInjectionService());
services.put(ScannerService.class, new CdiScanner());
services.put(LoaderService.class, new OptimizedLoaderService());
- services.put(org.apache.webbeans.proxy.ProxyFactory.class, new ProxyFactory(owbProxyFactory()));
optional(services, ConversationService.class, "org.apache.webbeans.jsf.DefaultConversationService");
@@ -157,6 +147,7 @@ public class ThreadSingletonServiceImpl
webBeansContext = new WebappWebBeansContext(services, properties, appContext.getWebBeansContext());
startupObject.getWebContext().setWebbeansContext(webBeansContext);
}
+ OpenEJBTransactionService.class.cast(services.get(TransactionService.class)).setWebBeansContext(webBeansContext);
// do it only here to get the webbeanscontext
services.put(ContextsService.class, new CdiAppContextsService(webBeansContext, true));
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=1469836&r1=1469835&r2=1469836&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 Fri Apr 19 14:05:02 2013
@@ -22,6 +22,7 @@ import org.apache.webbeans.component.Bui
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;
@@ -89,7 +90,7 @@ public class WebappBeanManager extends B
}
@Override
- public <T> CreationalContext<T> createCreationalContext(Contextual<T> contextual) {
+ public <T> CreationalContextImpl<T> createCreationalContext(Contextual<T> contextual) {
try {
return super.createCreationalContext(contextual);
} catch (RuntimeException e) { // can happen?
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java Fri Apr 19 14:05:02 2013
@@ -23,6 +23,7 @@ import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.enterprise.context.Dependent;
import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.AnnotatedType;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
@@ -108,41 +109,24 @@ public class WebContext {
public Object newInstance(Class beanClass) throws OpenEJBException {
- final WebBeansContext webBeansContext = getWebBeansContext();
-
- final ConstructorInjectionBean<Object> beanDefinition = new ConstructorInjectionBean<Object>(webBeansContext, beanClass).complete();
-
- final CreationalContext<Object> creationalContext = webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
-
- // Create bean instance
- final Object o = beanDefinition.create(creationalContext);
- final Context unwrap = InjectionProcessor.unwrap(getInitialContext());
- final InjectionProcessor injectionProcessor = new InjectionProcessor(o, injections, unwrap);
+ final WebBeansContext webBeansContext = getWebBeansContext();
- final Object beanInstance = injectionProcessor.createInstance();
+ final ConstructorInjectionBean<Object> beanDefinition = new ConstructorInjectionBean<Object>(webBeansContext, beanClass, webBeansContext.getAnnotatedElementFactory().newAnnotatedType(beanClass));
- final Object oldInstanceUnderInjection = AbstractInjectable.instanceUnderInjection.get();
+ final CreationalContext<Object> creationalContext = webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
- try {
- AbstractInjectable.instanceUnderInjection.set(null);
+ // Create bean instance
+ final Object o = beanDefinition.create(creationalContext);
+ final Context unwrap = InjectionProcessor.unwrap(getInitialContext());
+ final InjectionProcessor injectionProcessor = new InjectionProcessor(o, injections, unwrap);
- InjectionTargetBean<Object> bean = InjectionTargetBean.class.cast(beanDefinition);
+ final Object beanInstance = injectionProcessor.createInstance();
- bean.injectResources(beanInstance, creationalContext);
- bean.injectSuperFields(beanInstance, creationalContext);
- bean.injectSuperMethods(beanInstance, creationalContext);
- bean.injectFields(beanInstance, creationalContext);
- bean.injectMethods(beanInstance, creationalContext);
- } finally {
- if (oldInstanceUnderInjection != null) {
- AbstractInjectable.instanceUnderInjection.set(oldInstanceUnderInjection);
- } else {
- AbstractInjectable.instanceUnderInjection.remove();
- }
- }
+ InjectionTargetBean<Object> bean = InjectionTargetBean.class.cast(beanDefinition);
+ bean.getInjectionTarget().inject(beanInstance, creationalContext);
- creatonalContexts.put(beanInstance, creationalContext);
- return beanInstance;
+ creatonalContexts.put(beanInstance, creationalContext);
+ return beanInstance;
}
private WebBeansContext getWebBeansContext() {
@@ -152,12 +136,12 @@ public class WebContext {
return webbeansContext;
}
- public Object inject(Object o) throws OpenEJBException {
+ public Object inject(final Object o) throws OpenEJBException {
try {
final WebBeansContext webBeansContext = getWebBeansContext();
- final ConstructorInjectionBean<Object> beanDefinition = new ConstructorInjectionBean(webBeansContext, o.getClass()).complete();
+ final ConstructorInjectionBean<Object> beanDefinition = new ConstructorInjectionBean(webBeansContext, o.getClass(), webBeansContext.getAnnotatedElementFactory().newAnnotatedType(o.getClass()));
final CreationalContext<Object> creationalContext = webBeansContext.getBeanManagerImpl().createCreationalContext(beanDefinition);
@@ -168,25 +152,8 @@ public class WebContext {
final Object beanInstance = injectionProcessor.createInstance();
- final Object oldInstanceUnderInjection = AbstractInjectable.instanceUnderInjection.get();
-
- try {
- AbstractInjectable.instanceUnderInjection.set(null);
-
- InjectionTargetBean<Object> bean = InjectionTargetBean.class.cast(beanDefinition);
-
- bean.injectResources(beanInstance, creationalContext);
- bean.injectSuperFields(beanInstance, creationalContext);
- bean.injectSuperMethods(beanInstance, creationalContext);
- bean.injectFields(beanInstance, creationalContext);
- bean.injectMethods(beanInstance, creationalContext);
- } finally {
- if (oldInstanceUnderInjection != null) {
- AbstractInjectable.instanceUnderInjection.set(oldInstanceUnderInjection);
- } else {
- AbstractInjectable.instanceUnderInjection.remove();
- }
- }
+ InjectionTargetBean<Object> bean = InjectionTargetBean.class.cast(beanDefinition);
+ bean.getInjectionTarget().inject(beanInstance, creationalContext);
// if the bean is dependent simply cleanup the creational context once it is created
final Class<? extends Annotation> scope = beanDefinition.getScope();
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/ReflectionInvocationContext.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/ReflectionInvocationContext.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/ReflectionInvocationContext.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/interceptor/ReflectionInvocationContext.java Fri Apr 19 14:05:02 2013
@@ -75,9 +75,9 @@ public class ReflectionInvocationContext
public Object[] getParameters() {
//TODO Need to figure out what is going on with afterCompletion call back here ?
- if (operation.isCallback() && !operation.equals(Operation.AFTER_COMPLETION) && !operation.equals(Operation.TIMEOUT)) {
- throw new IllegalStateException(getIllegalParameterAccessMessage());
- }
+ //if (operation.isCallback() && !operation.equals(Operation.AFTER_COMPLETION) && !operation.equals(Operation.TIMEOUT)) {
+ // throw new IllegalStateException(getIllegalParameterAccessMessage());
+ //}
return this.parameters;
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/singleton/SingletonContainer.java Fri Apr 19 14:05:02 2013
@@ -22,6 +22,7 @@ import org.apache.openejb.InterfaceType;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.ProxyInfo;
import org.apache.openejb.RpcContainer;
+import org.apache.openejb.cdi.CurrentCreationalContext;
import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
@@ -161,6 +162,7 @@ public class SingletonContainer implemen
ThreadContext callContext = new ThreadContext(beanContext, primKey);
ThreadContext oldCallContext = ThreadContext.enter(callContext);
+ CurrentCreationalContext currentCreationalContext = beanContext.get(CurrentCreationalContext.class);
try {
boolean authorized = type == InterfaceType.TIMEOUT || getSecurityService().isCallerAuthorized(callMethod, type);
if (!authorized)
@@ -183,10 +185,17 @@ public class SingletonContainer implemen
callContext.set(Method.class, runMethod);
callContext.setInvokedInterface(callInterface);
+ if (currentCreationalContext != null) {
+ currentCreationalContext.set(instance.creationalContext);
+ }
+
return _invoke(callMethod, runMethod, args, instance, callContext, type);
} finally {
ThreadContext.exit(oldCallContext);
+ if (currentCreationalContext != null) {
+ currentCreationalContext.remove();
+ }
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulContainer.java Fri Apr 19 14:05:02 2013
@@ -27,6 +27,7 @@ import org.apache.openejb.ProxyInfo;
import org.apache.openejb.RpcContainer;
import org.apache.openejb.SystemException;
import org.apache.openejb.cdi.CdiEjbBean;
+import org.apache.openejb.cdi.CurrentCreationalContext;
import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.InstanceContext;
import org.apache.openejb.core.Operation;
@@ -615,6 +616,7 @@ public class StatefulContainer implement
protected Object businessMethod(final BeanContext beanContext, final Object primKey, final Class callInterface, final Method callMethod, final Object[] args, final InterfaceType interfaceType) throws OpenEJBException {
final ThreadContext callContext = new ThreadContext(beanContext, primKey);
final ThreadContext oldCallContext = ThreadContext.enter(callContext);
+ final CurrentCreationalContext currentCreationalContext = beanContext.get(CurrentCreationalContext.class);
try {
// Security check
checkAuthorization(callMethod, interfaceType);
@@ -651,6 +653,10 @@ public class StatefulContainer implement
final Method runMethod = beanContext.getMatchingBeanMethod(callMethod);
callContext.set(Method.class, runMethod);
+ if (currentCreationalContext != null) {
+ currentCreationalContext.set(instance.creationalContext);
+ }
+
// Initialize interceptor stack
final List<InterceptorData> interceptors = beanContext.getMethodInterceptors(runMethod);
final InterceptorStack interceptorStack = new InterceptorStack(instance.bean, runMethod, Operation.BUSINESS, interceptors, instance.interceptors);
@@ -669,6 +675,9 @@ public class StatefulContainer implement
return returnValue;
} finally {
ThreadContext.exit(oldCallContext);
+ if (currentCreationalContext != null) {
+ currentCreationalContext.remove();
+ }
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessContainer.java Fri Apr 19 14:05:02 2013
@@ -23,6 +23,7 @@ import org.apache.openejb.InterfaceType;
import org.apache.openejb.OpenEJBException;
import org.apache.openejb.ProxyInfo;
import org.apache.openejb.SystemException;
+import org.apache.openejb.cdi.CurrentCreationalContext;
import org.apache.openejb.core.ExceptionType;
import org.apache.openejb.core.Operation;
import org.apache.openejb.core.ThreadContext;
@@ -150,7 +151,8 @@ public class StatelessContainer implemen
final Method runMethod = beanContext.getMatchingBeanMethod(callMethod);
final ThreadContext callContext = new ThreadContext(beanContext, primKey);
final ThreadContext oldCallContext = ThreadContext.enter(callContext);
- Object bean = null;
+ Instance bean = null;
+ CurrentCreationalContext currentCreationalContext = beanContext.get(CurrentCreationalContext.class);
try {
final boolean authorized = (type == InterfaceType.TIMEOUT || this.securityService.isCallerAuthorized(callMethod, type));
if (!authorized) {
@@ -174,7 +176,10 @@ public class StatelessContainer implemen
callContext.setCurrentOperation(type == InterfaceType.TIMEOUT ? Operation.TIMEOUT : Operation.BUSINESS);
callContext.set(Method.class, runMethod);
callContext.setInvokedInterface(callInterface);
- return _invoke(callMethod, runMethod, args, (Instance) bean, callContext, type);
+ if (currentCreationalContext != null) {
+ currentCreationalContext.set(bean.creationalContext);
+ }
+ return _invoke(callMethod, runMethod, args, bean, callContext, type);
} finally {
if (bean != null) {
@@ -185,6 +190,9 @@ public class StatelessContainer implemen
}
}
ThreadContext.exit(oldCallContext);
+ if (currentCreationalContext != null) {
+ currentCreationalContext.remove();
+ }
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java Fri Apr 19 14:05:02 2013
@@ -179,7 +179,7 @@ public class StatelessInstanceManager {
* @return Object
* @throws OpenEJBException
*/
- public Object getInstance(final ThreadContext callContext) throws OpenEJBException {
+ public Instance getInstance(final ThreadContext callContext) throws OpenEJBException {
final BeanContext beanContext = callContext.getBeanContext();
final Data data = (Data) beanContext.getContainerData();
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/monitoring/DynamicMBeanWrapper.java Fri Apr 19 14:05:02 2013
@@ -26,7 +26,6 @@ import org.apache.openejb.api.jmx.Notifi
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
import org.apache.webbeans.config.WebBeansContext;
-import org.apache.webbeans.proxy.ProxyFactory;
import javax.management.Attribute;
import javax.management.AttributeList;
@@ -91,8 +90,7 @@ public class DynamicMBeanWrapper impleme
// javaassist looses annotation so simply unwrap it
if (wc != null) {
- final ProxyFactory pf = wc.getProxyFactory();
- if (pf.isProxyInstance(givenInstance)) {
+ if (givenInstance.getClass().getName().contains("$Owb")) { // isProxy
annotatedMBean = annotatedMBean.getSuperclass();
}
}
Modified: tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/testing/ApplicationComposers.java Fri Apr 19 14:05:02 2013
@@ -56,7 +56,6 @@ import org.apache.openejb.util.Join;
import org.apache.openejb.util.ServiceManagerProxy;
import org.apache.openejb.util.URLs;
import org.apache.openejb.web.LightweightWebAppBuilder;
-import org.apache.webbeans.inject.AbstractInjectable;
import org.apache.webbeans.inject.OWBInjector;
import org.apache.webbeans.spi.ContextsService;
import org.apache.webbeans.web.lifecycle.test.MockHttpSession;
@@ -175,7 +174,8 @@ public final class ApplicationComposers
for (final Method method : classes) {
final Class<?> returnType = method.getReturnType();
if (!returnType.equals(WebModule.class) && !returnType.equals(EjbModule.class)
- && !returnType.equals(WebApp.class) && !returnType.equals(EjbJar.class)) {
+ && !returnType.equals(WebApp.class) && !returnType.equals(EjbJar.class)
+ && !EnterpriseBean.class.isAssignableFrom(returnType)) {
errors.add(new Exception("@Classes can't be used on a method returning " + returnType));
}
}
@@ -416,9 +416,19 @@ public final class ApplicationComposers
final EjbJar ejbJar = new EjbJar(method.getName());
ejbJar.addEnterpriseBean(bean);
final EjbModule ejbModule = new EjbModule(ejbJar);
+ final Beans beans = new Beans();
+ beans.addManagedClass(bean.getEjbClass());
+ ejbModule.setBeans(beans);
final Class<?> clazz = Thread.currentThread().getContextClassLoader().loadClass(bean.getEjbClass());
- ejbModule.setFinder(new AnnotationFinder(new ClassesArchive(clazz)).link());
+ if (classes != null) {
+ ejbModule.setFinder(finderFromClasses(classes));
+ } else {
+ ejbModule.setFinder(new AnnotationFinder(new ClassesArchive(clazz)).link());
+ }
appModule.getEjbModules().add(ejbModule);
+ if (cdi) {
+ ejbModule.setBeans(beans(new Beans(), cdiDecorators, cdiInterceptors, cdiAlternatives));
+ }
} else if (obj instanceof Application) {
@@ -515,6 +525,20 @@ public final class ApplicationComposers
appModule = newModule;
}
+ // copy ejb into beans if cdi is activated
+ for (final EjbModule ejb : appModule.getEjbModules()) {
+ final Beans beans = ejb.getBeans();
+ if (beans != null && ejb.getEjbJar() != null) {
+ for (final EnterpriseBean bean : ejb.getEjbJar().getEnterpriseBeans()) {
+ if (beans.getManagedClasses().contains(bean.getEjbClass())) {
+ continue;
+ }
+
+ beans.addManagedClass(bean.getEjbClass());
+ }
+ }
+ }
+
if (webModulesNb > 0 && SystemInstance.get().getComponent(WebAppBuilder.class) == null) {
SystemInstance.get().setComponent(WebAppBuilder.class, new LightweightWebAppBuilder());
}
@@ -565,15 +589,12 @@ public final class ApplicationComposers
final InjectionProcessor processor = new InjectionProcessor(testInstance, context.getInjections(), context.getJndiContext());
processor.createInstance();
- AbstractInjectable.instanceUnderInjection.set(testInstance);
try {
OWBInjector.inject(appContext.getBeanManager(), testInstance, null);
} catch (Throwable t) {
// TODO handle this differently
// this is temporary till the injector can be rewritten
t.printStackTrace();
- } finally {
- AbstractInjectable.instanceUnderInjection.remove();
}
} finally {
ThreadContext.exit(oldContext);
@@ -652,11 +673,8 @@ public final class ApplicationComposers
}
public void after() throws Exception {
-
- final ContextsService contextsService = appContext.getWebBeansContext().getContextsService();
-
if (assembler != null) {
-
+ final ContextsService contextsService = appContext.getWebBeansContext().getContextsService();
contextsService.endContext(SessionScoped.class, session);
contextsService.endContext(RequestScoped.class, null);
contextsService.endContext(ConversationScoped.class, null);
@@ -666,8 +684,6 @@ public final class ApplicationComposers
} catch (Exception e) {
// no-op
}
- }
- if (servletContext != null || session != null) {
try {
ScopeHelper.stopContexts(contextsService, servletContext, session);
@@ -675,6 +691,7 @@ public final class ApplicationComposers
// no-op
}
}
+
if (serviceManager != null) {
try {
@@ -683,6 +700,7 @@ public final class ApplicationComposers
// no-op
}
}
+
OpenEJB.destroy();
}
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/AbstractInjectionTest.java Fri Apr 19 14:05:02 2013
@@ -52,6 +52,8 @@ public class AbstractInjectionTest {
final Beans beans = new Beans();
beans.addManagedClass(PlcBaseDAO.class);
beans.addManagedClass(PlcBaseJpaDAO.class);
+ beans.addManagedClass(AppCDI.class);
+ beans.addManagedClass(AppJpaDAO.class);
final EjbModule jar = new EjbModule(ejbJar);
jar.setBeans(beans);
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/BasicInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/BasicInjectionTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/BasicInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/BasicInjectionTest.java Fri Apr 19 14:05:02 2013
@@ -20,7 +20,9 @@ import junit.framework.TestCase;
import org.apache.openejb.jee.Empty;
import org.apache.openejb.jee.StatelessBean;
import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.testing.Classes;
import org.apache.openejb.testing.Module;
+import org.junit.Test;
import org.junit.runner.RunWith;
import javax.annotation.PostConstruct;
@@ -41,6 +43,7 @@ import java.net.URI;
public class BasicInjectionTest extends TestCase {
@Module
+ @Classes(cdi = true, value = { Configuration.class })
public StatelessBean app() throws Exception {
final StatelessBean bean = new StatelessBean(WidgetBean.class);
@@ -49,6 +52,14 @@ public class BasicInjectionTest extends
return bean;
}
+ @Inject
+ private WidgetBean bean;
+
+ @Test
+ public void test() {
+ assertNotNull(bean.getJmsLocation());
+ assertNotNull(bean.getWebLocation());
+ }
public static class WidgetBean {
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiDecoratorMultipleDelegateCallsTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiDecoratorMultipleDelegateCallsTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiDecoratorMultipleDelegateCallsTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/CdiDecoratorMultipleDelegateCallsTest.java Fri Apr 19 14:05:02 2013
@@ -78,7 +78,7 @@ public class CdiDecoratorMultipleDelegat
private Service service;
@Test
- @Ignore("currently broken")
+ //@Ignore("currently broken")
public void check() {
assertTrue(service.touch().startsWith("org.apache.openejb.cdi.CdiDecoratorMultipleDelegateCallsTest$ServiceImpl"));
}
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/DependentScopedTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/DependentScopedTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/DependentScopedTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/DependentScopedTest.java Fri Apr 19 14:05:02 2013
@@ -31,6 +31,7 @@ import javax.enterprise.context.spi.Crea
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.inject.Inject;
+import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@@ -133,7 +134,7 @@ public class DependentScopedTest extends
}
}
- public static class Color {
+ public static class Color implements Serializable {
public Class get() {
return getClass();
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/ProducedExtendedEmTest.java Fri Apr 19 14:05:02 2013
@@ -21,6 +21,7 @@ import org.apache.openejb.jee.jpa.unit.P
import org.apache.openejb.junit.ApplicationComposer;
import org.apache.openejb.testing.Configuration;
import org.apache.openejb.testing.Module;
+import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -95,6 +96,7 @@ public class ProducedExtendedEmTest {
private A a;
@Test
+ @Ignore("will be done thanks to OWB new impl")
public void checkEm() {
try {
a.getDelegateClassName();
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDecoratorInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDecoratorInjectionTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDecoratorInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDecoratorInjectionTest.java Fri Apr 19 14:05:02 2013
@@ -29,14 +29,17 @@ import javax.decorator.Decorator;
import javax.decorator.Delegate;
import javax.ejb.ApplicationException;
import javax.ejb.EJB;
+import javax.ejb.EJBException;
import javax.ejb.Local;
import javax.ejb.SessionContext;
import javax.ejb.Stateful;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
+import java.io.Serializable;
import java.security.Principal;
import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
/**
@@ -58,8 +61,8 @@ public class StatefulDecoratorInjectionT
orange.someBusinessMethod();
fail("call should not be allowed");
- } catch (AccessDeniedException e) {
- // pass
+ } catch (EJBException e) {
+ assertTrue(AccessDeniedException.class.isInstance(e.getCause()));
}
}
@@ -95,7 +98,7 @@ public class StatefulDecoratorInjectionT
}
@Decorator
- public static class OrangeSecurity implements OrangeStateful {
+ public static class OrangeSecurity implements OrangeStateful, Serializable {
@Inject
private SessionContext sessionContext;
Modified: tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDependentInjectionTest.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDependentInjectionTest.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDependentInjectionTest.java (original)
+++ tomee/tomee/trunk/container/openejb-core/src/test/java/org/apache/openejb/cdi/StatefulDependentInjectionTest.java Fri Apr 19 14:05:02 2013
@@ -26,12 +26,14 @@ import org.junit.runner.RunWith;
import javax.annotation.Resource;
import javax.ejb.EJB;
+import javax.ejb.EJBException;
import javax.ejb.SessionContext;
import javax.ejb.Stateful;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import static junit.framework.Assert.assertNotNull;
+import static junit.framework.Assert.assertTrue;
import static junit.framework.Assert.fail;
/**
@@ -53,8 +55,8 @@ public class StatefulDependentInjectionT
orange.someBusinessMethod();
fail("call should not be allowed");
- } catch (IllegalStateException e) {
- // pass
+ } catch (final EJBException e) {
+ assertTrue(IllegalStateException.class.isInstance(e.getCause()));
}
}
Modified: tomee/tomee/trunk/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/pom.xml?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/pom.xml (original)
+++ tomee/tomee/trunk/pom.xml Fri Apr 19 14:05:02 2013
@@ -143,7 +143,7 @@
<junit.version>4.11</junit.version>
<org.apache.axis2.version>1.4.1</org.apache.axis2.version>
<scannotation.version>1.0.2</scannotation.version>
- <org.apache.openwebbeans.version>1.1.8</org.apache.openwebbeans.version>
+ <org.apache.openwebbeans.version>1.2.0-SNAPSHOT</org.apache.openwebbeans.version>
<geronimo.connector.version>3.1.1</geronimo.connector.version>
<geronimo-osgi.version>1.1</geronimo-osgi.version>
<geronimo-javamail_1.4_spec.version>1.7.1</geronimo-javamail_1.4_spec.version>
Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBEJBInvoker.java Fri Apr 19 14:05:02 2013
@@ -42,10 +42,10 @@ public class OpenEJBEJBInvoker extends J
private final Map<Class<?>, Collection<Class<?>>> contextTypes = new HashMap<Class<?>, Collection<Class<?>>>();
public OpenEJBEJBInvoker(final Collection<BeanContext> restEjbs) {
- for (BeanContext context : restEjbs) {
+ for (final BeanContext context : restEjbs) {
final Collection<Class<?>> classes = new HashSet<Class<?>>();
Contexts.findContextFields(context.getBeanClass(), classes);
- for (Collection<InterceptorData> list :
+ for (final Collection<InterceptorData> list :
Arrays.asList(
context.getInterceptorData(),
context.getInstanceScopedInterceptors(),
Modified: tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java (original)
+++ tomee/tomee/trunk/server/openejb-cxf-rs/src/main/java/org/apache/openejb/server/cxf/rs/OpenEJBPerRequestPojoResourceProvider.java Fri Apr 19 14:05:02 2013
@@ -23,18 +23,19 @@ import org.apache.cxf.message.Message;
import org.apache.openejb.Injection;
import org.apache.openejb.InjectionProcessor;
import org.apache.openejb.OpenEJBException;
-import org.apache.webbeans.component.AbstractInjectionTargetBean;
+import org.apache.webbeans.component.InjectionTargetBean;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.container.BeanManagerImpl;
-import org.apache.webbeans.inject.AbstractInjectable;
import org.apache.webbeans.inject.OWBInjector;
-import org.apache.webbeans.intercept.InterceptorData;
+import org.apache.webbeans.intercept.InterceptorResolutionService;
+import org.apache.webbeans.portable.InjectionTargetImpl;
import org.apache.webbeans.util.WebBeansUtil;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.InjectionException;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
+import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.Interceptor;
import javax.naming.Context;
import javax.naming.InitialContext;
@@ -48,7 +49,6 @@ import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
-import java.util.List;
import java.util.Set;
public class OpenEJBPerRequestPojoResourceProvider implements ResourceProvider {
@@ -88,17 +88,28 @@ public class OpenEJBPerRequestPojoResour
throw new WebApplicationException(Response.serverError().entity(msg).build());
}
- if (bean instanceof AbstractInjectionTargetBean<?>) {
- final List<InterceptorData> stack = ((AbstractInjectionTargetBean) bean).getInterceptorStack();
- if (stack != null) {
- for (InterceptorData id : stack) {
- final Interceptor<?> webBeansInterceptor = id.getWebBeansInterceptor();
- if (webBeansInterceptor == null || webBeansInterceptor.getBeanClass() == null) {
- continue;
- }
+ if (bean instanceof InjectionTargetBean<?>) {
+ final InterceptorResolutionService.BeanInterceptorInfo info = InjectionTargetImpl.class.cast(InjectionTargetBean.class.cast(bean).getInjectionTarget()).getInterceptorInfo();
+ for (final Interceptor<?> interceptor : info.getCdiInterceptors()) {
+ if (interceptor == null || interceptor.getBeanClass() == null) {
+ continue;
+ }
- Contexts.findContextFields(webBeansInterceptor.getBeanClass(), contextTypes);
+ Contexts.findContextFields(interceptor.getBeanClass(), contextTypes);
+ }
+ for (final Interceptor<?> interceptor : info.getEjbInterceptors()) {
+ if (interceptor == null || interceptor.getBeanClass() == null) {
+ continue;
}
+
+ Contexts.findContextFields(interceptor.getBeanClass(), contextTypes);
+ }
+ for (final Decorator<?> decorator : info.getDecorators()) {
+ if (decorator == null || decorator.getBeanClass() == null) {
+ continue;
+ }
+
+ Contexts.findContextFields(decorator.getBeanClass(), contextTypes);
}
}
} else {
@@ -255,18 +266,10 @@ public class OpenEJBPerRequestPojoResour
final BeanManager bm = webbeansContext.getBeanManagerImpl();
creationalContext = bm.createCreationalContext(null);
- final Object oldValue = AbstractInjectable.instanceUnderInjection.get();
- AbstractInjectable.instanceUnderInjection.set(instance);
try {
OWBInjector.inject(bm, instance, creationalContext);
} catch (Exception e) {
// ignored
- } finally {
- if (oldValue != null) {
- AbstractInjectable.instanceUnderInjection.set(oldValue);
- } else {
- AbstractInjectable.instanceUnderInjection.remove();
- }
}
// injector.postConstruct(); // it doesn't know it
Modified: tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java?rev=1469836&r1=1469835&r2=1469836&view=diff
==============================================================================
--- tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java (original)
+++ tomee/tomee/trunk/server/openejb-http/src/main/java/org/apache/openejb/server/httpd/EndWebBeansListener.java Fri Apr 19 14:05:02 2013
@@ -20,12 +20,10 @@ import org.apache.openejb.cdi.ThreadSing
import org.apache.openejb.cdi.WebappWebBeansContext;
import org.apache.openejb.util.LogCategory;
import org.apache.openejb.util.Logger;
-import org.apache.webbeans.component.InjectionPointBean;
import org.apache.webbeans.config.WebBeansContext;
import org.apache.webbeans.conversation.ConversationManager;
import org.apache.webbeans.el.ELContextStore;
import org.apache.webbeans.spi.FailOverService;
-import org.apache.webbeans.web.context.WebContextsService;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.context.SessionScoped;
@@ -93,11 +91,6 @@ public class EndWebBeansListener impleme
}
}
endRequestRunnables.remove();
-
- if (webBeansContext != null) {
- InjectionPointBean.removeThreadLocal();
- WebContextsService.removeThreadLocals();
- }
}
public static void pushRequestReleasable(final Runnable runnable) {