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


Reply via email to