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/05/15 08:40:03 UTC

svn commit: r1482692 - /tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Author: rmannibucau
Date: Wed May 15 06:40:03 2013
New Revision: 1482692

URL: http://svn.apache.org/r1482692
Log:
TOMEE-937 eager init of local bean proxies in ear webapps to ensure deserialization can work

Modified:
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1482692&r1=1482691&r2=1482692&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java Wed May 15 06:40:03 2013
@@ -1111,22 +1111,7 @@ public class TomcatWebAppBuilder impleme
                     appContext = a.createApplication(contextInfo.appInfo, classLoader);
                     // todo add watched resources to context
 
-                    for (final BeanContext deployment : appContext.getBeanContexts()) {
-                        if (deployment.isLocalbean() && !deployment.isDynamicallyImplemented()) { // init proxy eagerly otherwise deserialization of serialized object can't work
-                            final List<Class> interfaces = new ArrayList<Class>(2);
-                            interfaces.add(Serializable.class);
-                            interfaces.add(IntraVmProxy.class);
-                            final BeanType type = deployment.getComponentType();
-                            if (BeanType.STATEFUL.equals(type) || BeanType.MANAGED.equals(type)) {
-                                interfaces.add(BeanContext.Removable.class);
-                            }
-                            try {
-                                LocalBeanProxyFactory.createProxy(deployment.getBeanClass(), classLoader, interfaces.toArray(new Class<?>[interfaces.size()]));
-                            } catch (final Exception e) {
-                                // no-op: as before
-                            }
-                        }
-                    }
+                    eagerInitOfLocalBeanProxies(appContext.getBeanContexts(), classLoader);
                 } catch (Exception e) {
                     logger.error("Unable to deploy collapsed ear in war " + standardContext, e);
                     undeploy(standardContext, contextInfo);
@@ -1237,6 +1222,7 @@ public class TomcatWebAppBuilder impleme
                     new CdiBuilder().build(contextInfo.appInfo, appContext, beanContexts, webContext);
                     assembler.startEjbs(true, beanContexts);
                     assembler.bindGlobals(appContext.getBindings());
+                    eagerInitOfLocalBeanProxies(beanContexts, standardContext.getLoader().getClassLoader());
                 }
 
                 // jndi bindings
@@ -1273,6 +1259,25 @@ public class TomcatWebAppBuilder impleme
         }
     }
 
+    private static void eagerInitOfLocalBeanProxies(final Collection<BeanContext> beans, final ClassLoader classLoader) {
+        for (final BeanContext deployment : beans) {
+            if (deployment.isLocalbean() && !deployment.isDynamicallyImplemented()) { // init proxy eagerly otherwise deserialization of serialized object can't work
+                final List<Class> interfaces = new ArrayList<Class>(2);
+                interfaces.add(Serializable.class);
+                interfaces.add(IntraVmProxy.class);
+                final BeanType type = deployment.getComponentType();
+                if (BeanType.STATEFUL.equals(type) || BeanType.MANAGED.equals(type)) {
+                    interfaces.add(BeanContext.Removable.class);
+                }
+                try {
+                    LocalBeanProxyFactory.createProxy(deployment.getBeanClass(), classLoader, interfaces.toArray(new Class<?>[interfaces.size()]));
+                } catch (final Exception e) {
+                    // no-op: as before
+                }
+            }
+        }
+    }
+
     private static Reference createReference(final ResourceBase resource) {
         final Reference ref;
         if (resource instanceof ContextResource) {