You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2012/12/18 22:23:34 UTC

svn commit: r1423669 - in /openejb/trunk/openejb: container/openejb-core/src/main/java/org/apache/openejb/ container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src/test/java/org/apache/openejb/core/ containe...

Author: rmannibucau
Date: Tue Dec 18 21:23:33 2012
New Revision: 1423669

URL: http://svn.apache.org/viewvc?rev=1423669&view=rev
Log:
TOMEE-665 trying to deploy ejb from webapp even for ears

Modified:
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ModuleContext.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/InheritedAppExceptionTest.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java
    openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java
    openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ModuleContext.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ModuleContext.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ModuleContext.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/ModuleContext.java Tue Dec 18 21:23:33 2012
@@ -28,13 +28,19 @@ public class ModuleContext extends Deplo
     private final Context moduleJndiContext;
     private final String uniqueId;
     private final URI moduleURI;
+    private final ClassLoader loader;
 
-    public ModuleContext(String id, URI moduleURI, String uniqueId, AppContext appContext, Context moduleJndiContext) {
+    public ModuleContext(String id, URI moduleURI, String uniqueId, AppContext appContext, Context moduleJndiContext, ClassLoader classLoader) {
         super(id, appContext.getOptions());
         this.moduleURI = moduleURI;
         this.appContext = appContext;
         this.moduleJndiContext = moduleJndiContext;
         this.uniqueId = uniqueId;
+        if (classLoader != null) {
+            this.loader = classLoader;
+        } else { // in tests for instance but shouldn't be the case in main part of the program
+            this.loader = Thread.currentThread().getContextClassLoader();
+        }
     }
 
     public AppContext getAppContext() {
@@ -42,7 +48,7 @@ public class ModuleContext extends Deplo
     }
 
     public ClassLoader getClassLoader() {
-        return appContext.getClassLoader();
+        return loader;
     }
 
     public Context getModuleJndiContext() {

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Tue Dec 18 21:23:33 2012
@@ -708,102 +708,7 @@ public class Assembler extends Assembler
 
             List<BeanContext> allDeployments = new ArrayList<BeanContext>();
 
-            // EJB
-            final EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(props, appContext);
-            for (final EjbJarInfo ejbJar : appInfo.ejbJars) {
-                final HashMap<String, BeanContext> deployments = ejbJarBuilder.build(ejbJar, injections);
-
-                final JaccPermissionsBuilder jaccPermissionsBuilder = new JaccPermissionsBuilder();
-                final PolicyContext policyContext = jaccPermissionsBuilder.build(ejbJar, deployments);
-                jaccPermissionsBuilder.install(policyContext);
-
-                final TransactionPolicyFactory transactionPolicyFactory = createTransactionPolicyFactory(ejbJar, classLoader);
-                for (final BeanContext beanContext : deployments.values()) {
-
-                    beanContext.setTransactionPolicyFactory(transactionPolicyFactory);
-                }
-
-                final MethodTransactionBuilder methodTransactionBuilder = new MethodTransactionBuilder();
-                methodTransactionBuilder.build(deployments, ejbJar.methodTransactions);
-
-                final MethodConcurrencyBuilder methodConcurrencyBuilder = new MethodConcurrencyBuilder();
-                methodConcurrencyBuilder.build(deployments, ejbJar.methodConcurrency);
-
-                for (final BeanContext beanContext : deployments.values()) {
-                    containerSystem.addDeployment(beanContext);
-                }
-
-                //bind ejbs into global jndi
-                jndiBuilder.build(ejbJar, deployments);
-
-                // setup timers/asynchronous methods - must be after transaction attributes are set
-                for (final BeanContext beanContext : deployments.values()) {
-                    if (beanContext.getComponentType() != BeanType.STATEFUL) {
-                        final Method ejbTimeout = beanContext.getEjbTimeout();
-                        boolean timerServiceRequired = false;
-                        if (ejbTimeout != null) {
-                            // If user set the tx attribute to RequiresNew change it to Required so a new transaction is not started
-                            if (beanContext.getTransactionType(ejbTimeout) == TransactionType.RequiresNew) {
-                                beanContext.setMethodTransactionAttribute(ejbTimeout, TransactionType.Required);
-                            }
-                            timerServiceRequired = true;
-                        }
-                        for (Iterator<Map.Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
-                            final Map.Entry<Method, MethodContext> entry = it.next();
-                            final MethodContext methodContext = entry.getValue();
-                            if (methodContext.getSchedules().size() > 0) {
-                                timerServiceRequired = true;
-                                final Method method = entry.getKey();
-                                //TODO Need ?
-                                if (beanContext.getTransactionType(method) == TransactionType.RequiresNew) {
-                                    beanContext.setMethodTransactionAttribute(method, TransactionType.Required);
-                                }
-                            }
-                        }
-                        if (timerServiceRequired) {
-                            // Create the timer
-                            final EjbTimerServiceImpl timerService = new EjbTimerServiceImpl(beanContext);
-                            //Load auto-start timers
-                            final TimerStore timerStore = timerService.getTimerStore();
-                            for (Iterator<Map.Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
-                                final Map.Entry<Method, MethodContext> entry = it.next();
-                                final MethodContext methodContext = entry.getValue();
-                                for (final ScheduleData scheduleData : methodContext.getSchedules()) {
-                                    timerStore.createCalendarTimer(timerService, (String) beanContext.getDeploymentID(), null, entry.getKey(), scheduleData.getExpression(), scheduleData.getConfig());
-                                }
-                            }
-                            beanContext.setEjbTimerService(timerService);
-                        } else {
-                            beanContext.setEjbTimerService(new NullEjbTimerServiceImpl());
-                        }
-                    }
-                    //set asynchronous methods transaction
-                    //TODO ???
-                    for (Iterator<Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
-                        final Entry<Method, MethodContext> entry = it.next();
-                        if (entry.getValue().isAsynchronous() && beanContext.getTransactionType(entry.getKey()) == TransactionType.RequiresNew) {
-                            beanContext.setMethodTransactionAttribute(entry.getKey(), TransactionType.Required);
-                        }
-                    }
-                }
-                // process application exceptions
-                for (final ApplicationExceptionInfo exceptionInfo : ejbJar.applicationException) {
-                    try {
-                        final Class exceptionClass = classLoader.loadClass(exceptionInfo.exceptionClass);
-                        for (final BeanContext beanContext : deployments.values()) {
-                            beanContext.addApplicationException(exceptionClass, exceptionInfo.rollback, exceptionInfo.inherited);
-                        }
-                    } catch (ClassNotFoundException e) {
-                        logger.error("createApplication.invalidClass", e, exceptionInfo.exceptionClass, e.getMessage());
-                    }
-                }
-
-                allDeployments.addAll(deployments.values());
-            }
-
-            allDeployments = sort(allDeployments);
-
-            appContext.getBeanContexts().addAll(allDeployments);
+            initEjbs(classLoader, appInfo, appContext, injections, allDeployments, null);
 
             new CdiBuilder().build(appInfo, appContext, allDeployments);
 
@@ -812,46 +717,7 @@ public class Assembler extends Assembler
             appJndiContext.bind("app/BeanManager", appContext.getBeanManager());
             appContext.getBindings().put("app/BeanManager", appContext.getBeanManager());
 
-            // now that everything is configured, deploy to the container
-            if (start) {
-                final Collection<BeanContext> toStart = new ArrayList<BeanContext>();
-
-                // deploy
-                for (final BeanContext deployment : allDeployments) {
-                    try {
-                        final Container container = deployment.getContainer();
-                        if (container.getBeanContext(deployment.getDeploymentID()) == null) {
-                            container.deploy(deployment);
-                            if (!((String) deployment.getDeploymentID()).endsWith(".Comp")
-                                && !deployment.isHidden()) {
-                                logger.info("createApplication.createdEjb", deployment.getDeploymentID(), deployment.getEjbName(), container.getContainerID());
-                            }
-                            if (logger.isDebugEnabled()) {
-                                for (final Map.Entry<Object, Object> entry : deployment.getProperties().entrySet()) {
-                                    logger.info("createApplication.createdEjb.property", deployment.getEjbName(), entry.getKey(), entry.getValue());
-                                }
-                            }
-                            toStart.add(deployment);
-                        }
-                    } catch (Throwable t) {
-                        throw new OpenEJBException("Error deploying '" + deployment.getEjbName() + "'.  Exception: " + t.getClass() + ": " + t.getMessage(), t);
-                    }
-                }
-
-                // start
-                for (final BeanContext deployment : toStart) {
-                    try {
-                        final Container container = deployment.getContainer();
-                        container.start(deployment);
-                        if (!((String) deployment.getDeploymentID()).endsWith(".Comp")
-                            && !deployment.isHidden()) {
-                            logger.info("createApplication.startedEjb", deployment.getDeploymentID(), deployment.getEjbName(), container.getContainerID());
-                        }
-                    } catch (Throwable t) {
-                        throw new OpenEJBException("Error starting '" + deployment.getEjbName() + "'.  Exception: " + t.getClass() + ": " + t.getMessage(), t);
-                    }
-                }
-            }
+            startEjbs(start, allDeployments);
 
             // App Client
             for (final ClientInfo clientInfo : appInfo.clients) {
@@ -960,6 +826,158 @@ public class Assembler extends Assembler
         }
     }
 
+    public List<BeanContext> initEjbs(final ClassLoader classLoader, final AppInfo appInfo, final AppContext appContext,
+                         final Set<Injection> injections, final List<BeanContext> allDeployments, final String webappId) throws OpenEJBException {
+        final EjbJarBuilder ejbJarBuilder = new EjbJarBuilder(props, appContext);
+        for (final EjbJarInfo ejbJar : appInfo.ejbJars) {
+            boolean skip = false;
+            for (WebAppInfo webapp : appInfo.webApps) {
+                if ((webappId == null && ejbJar.moduleId.equals(webapp.moduleId))
+                        || (webappId != null && !ejbJar.moduleId.equals(webappId))) {
+                    skip = true;
+                }
+            }
+            if (skip) {
+                continue;
+            }
+
+            final HashMap<String, BeanContext> deployments = ejbJarBuilder.build(ejbJar, injections, classLoader);
+
+            final JaccPermissionsBuilder jaccPermissionsBuilder = new JaccPermissionsBuilder();
+            final PolicyContext policyContext = jaccPermissionsBuilder.build(ejbJar, deployments);
+            jaccPermissionsBuilder.install(policyContext);
+
+            final TransactionPolicyFactory transactionPolicyFactory = createTransactionPolicyFactory(ejbJar, classLoader);
+            for (final BeanContext beanContext : deployments.values()) {
+                beanContext.setTransactionPolicyFactory(transactionPolicyFactory);
+            }
+
+            final MethodTransactionBuilder methodTransactionBuilder = new MethodTransactionBuilder();
+            methodTransactionBuilder.build(deployments, ejbJar.methodTransactions);
+
+            final MethodConcurrencyBuilder methodConcurrencyBuilder = new MethodConcurrencyBuilder();
+            methodConcurrencyBuilder.build(deployments, ejbJar.methodConcurrency);
+
+            for (final BeanContext beanContext : deployments.values()) {
+                containerSystem.addDeployment(beanContext);
+            }
+
+            //bind ejbs into global jndi
+            jndiBuilder.build(ejbJar, deployments);
+
+            // setup timers/asynchronous methods - must be after transaction attributes are set
+            for (final BeanContext beanContext : deployments.values()) {
+                if (beanContext.getComponentType() != BeanType.STATEFUL) {
+                    final Method ejbTimeout = beanContext.getEjbTimeout();
+                    boolean timerServiceRequired = false;
+                    if (ejbTimeout != null) {
+                        // If user set the tx attribute to RequiresNew change it to Required so a new transaction is not started
+                        if (beanContext.getTransactionType(ejbTimeout) == TransactionType.RequiresNew) {
+                            beanContext.setMethodTransactionAttribute(ejbTimeout, TransactionType.Required);
+                        }
+                        timerServiceRequired = true;
+                    }
+                    for (Iterator<Map.Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
+                        final Map.Entry<Method, MethodContext> entry = it.next();
+                        final MethodContext methodContext = entry.getValue();
+                        if (methodContext.getSchedules().size() > 0) {
+                            timerServiceRequired = true;
+                            final Method method = entry.getKey();
+                            //TODO Need ?
+                            if (beanContext.getTransactionType(method) == TransactionType.RequiresNew) {
+                                beanContext.setMethodTransactionAttribute(method, TransactionType.Required);
+                            }
+                        }
+                    }
+                    if (timerServiceRequired) {
+                        // Create the timer
+                        final EjbTimerServiceImpl timerService = new EjbTimerServiceImpl(beanContext);
+                        //Load auto-start timers
+                        final TimerStore timerStore = timerService.getTimerStore();
+                        for (Iterator<Map.Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
+                            final Map.Entry<Method, MethodContext> entry = it.next();
+                            final MethodContext methodContext = entry.getValue();
+                            for (final ScheduleData scheduleData : methodContext.getSchedules()) {
+                                timerStore.createCalendarTimer(timerService, (String) beanContext.getDeploymentID(), null, entry.getKey(), scheduleData.getExpression(), scheduleData.getConfig());
+                            }
+                        }
+                        beanContext.setEjbTimerService(timerService);
+                    } else {
+                        beanContext.setEjbTimerService(new NullEjbTimerServiceImpl());
+                    }
+                }
+                //set asynchronous methods transaction
+                //TODO ???
+                for (Iterator<Entry<Method, MethodContext>> it = beanContext.iteratorMethodContext(); it.hasNext(); ) {
+                    final Entry<Method, MethodContext> entry = it.next();
+                    if (entry.getValue().isAsynchronous() && beanContext.getTransactionType(entry.getKey()) == TransactionType.RequiresNew) {
+                        beanContext.setMethodTransactionAttribute(entry.getKey(), TransactionType.Required);
+                    }
+                }
+            }
+            // process application exceptions
+            for (final ApplicationExceptionInfo exceptionInfo : ejbJar.applicationException) {
+                try {
+                    final Class exceptionClass = classLoader.loadClass(exceptionInfo.exceptionClass);
+                    for (final BeanContext beanContext : deployments.values()) {
+                        beanContext.addApplicationException(exceptionClass, exceptionInfo.rollback, exceptionInfo.inherited);
+                    }
+                } catch (ClassNotFoundException e) {
+                    logger.error("createApplication.invalidClass", e, exceptionInfo.exceptionClass, e.getMessage());
+                }
+            }
+
+            allDeployments.addAll(deployments.values());
+        }
+
+        final List<BeanContext> ejbs = sort(allDeployments);
+        appContext.getBeanContexts().addAll(ejbs);
+        return ejbs;
+    }
+
+    public void startEjbs(final boolean start, final List<BeanContext> allDeployments) throws OpenEJBException {
+        // now that everything is configured, deploy to the container
+        if (start) {
+            final Collection<BeanContext> toStart = new ArrayList<BeanContext>();
+
+            // deploy
+            for (final BeanContext deployment : allDeployments) {
+                try {
+                    final Container container = deployment.getContainer();
+                    if (container.getBeanContext(deployment.getDeploymentID()) == null) {
+                        container.deploy(deployment);
+                        if (!((String) deployment.getDeploymentID()).endsWith(".Comp")
+                                && !deployment.isHidden()) {
+                            logger.info("createApplication.createdEjb", deployment.getDeploymentID(), deployment.getEjbName(), container.getContainerID());
+                        }
+                        if (logger.isDebugEnabled()) {
+                            for (final Map.Entry<Object, Object> entry : deployment.getProperties().entrySet()) {
+                                logger.info("createApplication.createdEjb.property", deployment.getEjbName(), entry.getKey(), entry.getValue());
+                            }
+                        }
+                        toStart.add(deployment);
+                    }
+                } catch (Throwable t) {
+                    throw new OpenEJBException("Error deploying '" + deployment.getEjbName() + "'.  Exception: " + t.getClass() + ": " + t.getMessage(), t);
+                }
+            }
+
+            // start
+            for (final BeanContext deployment : toStart) {
+                try {
+                    final Container container = deployment.getContainer();
+                    container.start(deployment);
+                    if (!((String) deployment.getDeploymentID()).endsWith(".Comp")
+                            && !deployment.isHidden()) {
+                        logger.info("createApplication.startedEjb", deployment.getDeploymentID(), deployment.getEjbName(), container.getContainerID());
+                    }
+                } catch (Throwable t) {
+                    throw new OpenEJBException("Error starting '" + deployment.getEjbName() + "'.  Exception: " + t.getClass() + ": " + t.getMessage(), t);
+                }
+            }
+        }
+    }
+
     @SuppressWarnings("unchecked")
     private static void deployMBean(final BeanManager bm, final ClassLoader cl, final String mbeanClass, final Properties appMbeans, final String id) {
         final Class<?> clazz;

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EjbJarBuilder.java Tue Dec 18 21:23:33 2012
@@ -25,7 +25,6 @@ import org.apache.openejb.OpenEJBExcepti
 import org.apache.openejb.util.Messages;
 
 import javax.naming.Context;
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.List;
@@ -45,24 +44,24 @@ public class EjbJarBuilder {
         this.context = context;
     }
 
-    public HashMap<String, BeanContext> build(EjbJarInfo ejbJar, Collection<Injection> appInjections) throws OpenEJBException {
-        InjectionBuilder injectionBuilder = new InjectionBuilder(context.getClassLoader());
+    public HashMap<String, BeanContext> build(final EjbJarInfo ejbJar, final Collection<Injection> appInjections, final ClassLoader classLoader) throws OpenEJBException {
+        InjectionBuilder injectionBuilder = new InjectionBuilder(classLoader);
         List<Injection> moduleInjections = injectionBuilder.buildInjections(ejbJar.moduleJndiEnc);
         moduleInjections.addAll(appInjections);
-        Context moduleJndiContext = new JndiEncBuilder(ejbJar.moduleJndiEnc, moduleInjections, null, ejbJar.moduleName, ejbJar.moduleUri, ejbJar.uniqueId, context.getClassLoader())
+        Context moduleJndiContext = new JndiEncBuilder(ejbJar.moduleJndiEnc, moduleInjections, null, ejbJar.moduleName, ejbJar.moduleUri, ejbJar.uniqueId, classLoader)
             .build(JndiEncBuilder.JndiScope.module);
 
         HashMap<String, BeanContext> deployments = new HashMap<String, BeanContext>();
 
-        ModuleContext moduleContext = new ModuleContext(ejbJar.moduleName, ejbJar.moduleUri, ejbJar.uniqueId, context, moduleJndiContext);
+        ModuleContext moduleContext = new ModuleContext(ejbJar.moduleName, ejbJar.moduleUri, ejbJar.uniqueId, context, moduleJndiContext, classLoader);
         moduleContext.getProperties().putAll(ejbJar.properties);
-        InterceptorBindingBuilder interceptorBindingBuilder = new InterceptorBindingBuilder(context.getClassLoader(), ejbJar);
+        InterceptorBindingBuilder interceptorBindingBuilder = new InterceptorBindingBuilder(classLoader, ejbJar);
 
         MethodScheduleBuilder methodScheduleBuilder = new MethodScheduleBuilder();
         
         for (EnterpriseBeanInfo ejbInfo : ejbJar.enterpriseBeans) {
             try {
-                EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(ejbInfo, new ArrayList<String>(), moduleContext, moduleInjections);
+                EnterpriseBeanBuilder deploymentBuilder = new EnterpriseBeanBuilder(ejbInfo, moduleContext, moduleInjections);
                 BeanContext bean = deploymentBuilder.build();
 
                 interceptorBindingBuilder.build(bean, ejbInfo);

Modified: openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java Tue Dec 18 21:23:33 2012
@@ -47,16 +47,14 @@ import java.util.concurrent.TimeUnit;
 class EnterpriseBeanBuilder {
     protected static final Messages messages = new Messages("org.apache.openejb.util.resources");
     private final EnterpriseBeanInfo bean;
-    private final List<String> defaultInterceptors;
     private final BeanType ejbType;
     private final List<Exception> warnings = new ArrayList<Exception>();
     private final ModuleContext moduleContext;
     private final List<Injection> moduleInjections;
 
-    public EnterpriseBeanBuilder(EnterpriseBeanInfo bean, List<String> defaultInterceptors, ModuleContext moduleContext, List<Injection> moduleInjections) {
+    public EnterpriseBeanBuilder(EnterpriseBeanInfo bean, ModuleContext moduleContext, List<Injection> moduleInjections) {
         this.moduleContext = moduleContext;
         this.bean = bean;
-        this.defaultInterceptors = defaultInterceptors;
         this.moduleInjections = moduleInjections;
 
         if (bean.type == EnterpriseBeanInfo.STATEFUL) {

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/InheritedAppExceptionTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/InheritedAppExceptionTest.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/InheritedAppExceptionTest.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/InheritedAppExceptionTest.java Tue Dec 18 21:23:33 2012
@@ -56,7 +56,7 @@ public class InheritedAppExceptionTest {
     @Test
     public void testRollback() throws Exception {
         SystemInstance.init(new Properties());
-        BeanContext cdi = new BeanContext("foo", null, new ModuleContext("foo",null, "bar", new AppContext("foo", SystemInstance.get(), null, null, null, false), null), Object.class, null, new HashMap<String, String>());
+        BeanContext cdi = new BeanContext("foo", null, new ModuleContext("foo",null, "bar", new AppContext("foo", SystemInstance.get(), null, null, null, false), null, null), Object.class, null, new HashMap<String, String>());
         cdi.addApplicationException(AE1.class, true, true);
         cdi.addApplicationException(AE3.class, true, false);
         cdi.addApplicationException(AE6.class, false, true);

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/AuthorBean.java Tue Dec 18 21:23:33 2012
@@ -36,7 +36,7 @@ public class AuthorBean implements Entit
     public static Object deploymentInfo;
     static {
         try {
-            deploymentInfo = new BeanContext("author", null, new ModuleContext("", null, "", new AppContext("", SystemInstance.get(), Author.class.getClassLoader(), new IvmContext(), new IvmContext(), false), new IvmContext()),
+            deploymentInfo = new BeanContext("author", null, new ModuleContext("", null, "", new AppContext("", SystemInstance.get(), Author.class.getClassLoader(), new IvmContext(), new IvmContext(), false), new IvmContext(), null),
                     AuthorBean.class,
                     null,
                     null,

Modified: openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java (original)
+++ openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/core/cmp/jpa/BookBean.java Tue Dec 18 21:23:33 2012
@@ -36,7 +36,7 @@ public class BookBean implements EntityB
     public static Object deploymentInfo;
     static {
         try {
-            deploymentInfo = new BeanContext("book", null, new ModuleContext("", null, "", new AppContext("", SystemInstance.get(), Book.class.getClassLoader(), new IvmContext(), new IvmContext(), false), new IvmContext()),
+            deploymentInfo = new BeanContext("book", null, new ModuleContext("", null, "", new AppContext("", SystemInstance.get(), Book.class.getClassLoader(), new IvmContext(), new IvmContext(), false), new IvmContext(), null),
                     BookBean.class,
                     null,
                     null,

Modified: openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1423669&r1=1423668&r2=1423669&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Tue Dec 18 21:23:33 2012
@@ -500,8 +500,6 @@ public class TomcatWebAppBuilder impleme
                 if (classLoader != null) {
                     standardContext.setParentClassLoader(classLoader);
                     standardContext.setDelegate(true);
-                    //standardContext.setLoader(new TomEEWebappLoader(appInfo.path, classLoader));
-                    //standardContext.getLoader().setDelegate(true);
                 }
 
                 String host = webApp.host;
@@ -1043,7 +1041,7 @@ public class TomcatWebAppBuilder impleme
             for (final ClassListInfo info : webAppInfo.jsfAnnotatedClasses) {
                 scannedJsfClasses.put(info.name, info.list);
             }
-            jsfClasses.put(standardContext.getLoader().getClassLoader(), scannedJsfClasses);
+            jsfClasses.put(classLoader, scannedJsfClasses);
 
             try {
 
@@ -1080,7 +1078,7 @@ public class TomcatWebAppBuilder impleme
                             final ReloadableEntityManagerFactory remf =
                                 (ReloadableEntityManagerFactory) SystemInstance.get().getComponent(ContainerSystem.class)
                                         .getJNDIContext().lookup(Assembler.PERSISTENCE_UNIT_NAMING_CONTEXT + unitInfo.id);
-                            remf.overrideClassLoader(standardContext.getLoader().getClassLoader());
+                            remf.overrideClassLoader(classLoader);
                             remf.createDelegate();
                         } catch (NameNotFoundException nnfe) {
                             logger.warning("Can't find " + unitInfo.id + " persistence unit");
@@ -1100,7 +1098,11 @@ public class TomcatWebAppBuilder impleme
                 cs.addWebContext(webContext);
 
                 if (!contextInfo.appInfo.webAppAlone) {
+                    final List<BeanContext> beanContexts = new ArrayList<BeanContext>();
+                    assembler.initEjbs(classLoader, contextInfo.appInfo, appContext, injections, beanContexts, webAppInfo.moduleId  );
+                    appContext.getBeanContexts().addAll(beanContexts);
                     new CdiBuilder().build(contextInfo.appInfo, appContext, appContext.getBeanContexts(), webContext);
+                    assembler.startEjbs(true, beanContexts);
                 }
 
                 standardContext.setInstanceManager(new JavaeeInstanceManager(webContext, standardContext));