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) {