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/03/25 09:26:07 UTC

svn commit: r1460544 - in /tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina: TomcatWebAppBuilder.java session/OWBStandardManager.java session/QuickSessionManager.java

Author: rmannibucau
Date: Mon Mar 25 08:26:07 2013
New Revision: 1460544

URL: http://svn.apache.org/r1460544
Log:
TOMEE-842 avoiding to throw exception when unserializing cdi/ejb at startup

Added:
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/OWBStandardManager.java
Modified:
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/QuickSessionManager.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=1460544&r1=1460543&r2=1460544&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 Mon Mar 25 08:26:07 2013
@@ -62,6 +62,7 @@ import org.apache.naming.ResourceEnvRef;
 import org.apache.naming.ResourceRef;
 import org.apache.openejb.AppContext;
 import org.apache.openejb.BeanContext;
+import org.apache.openejb.BeanType;
 import org.apache.openejb.ClassLoaderUtil;
 import org.apache.openejb.Injection;
 import org.apache.openejb.OpenEJBException;
@@ -92,6 +93,7 @@ import org.apache.openejb.config.sys.Res
 import org.apache.openejb.core.CoreContainerSystem;
 import org.apache.openejb.core.ParentClassLoaderFinder;
 import org.apache.openejb.core.WebContext;
+import org.apache.openejb.core.ivm.IntraVmProxy;
 import org.apache.openejb.core.ivm.naming.SystemComponentReference;
 import org.apache.openejb.jee.EnvEntry;
 import org.apache.openejb.jee.WebApp;
@@ -102,6 +104,7 @@ import org.apache.openejb.server.httpd.E
 import org.apache.openejb.spi.ContainerSystem;
 import org.apache.openejb.util.LogCategory;
 import org.apache.openejb.util.Logger;
+import org.apache.openejb.util.proxy.LocalBeanProxyFactory;
 import org.apache.openejb.util.reflection.Reflections;
 import org.apache.tomcat.InstanceManager;
 import org.apache.tomcat.util.digester.Digester;
@@ -109,6 +112,7 @@ import org.apache.tomee.catalina.cluster
 import org.apache.tomee.catalina.cluster.TomEEClusterListener;
 import org.apache.tomee.catalina.event.AfterApplicationCreated;
 import org.apache.tomee.catalina.routing.RouterValve;
+import org.apache.tomee.catalina.session.OWBStandardManager;
 import org.apache.tomee.common.LegacyAnnotationProcessor;
 import org.apache.tomee.common.NamingUtil;
 import org.apache.tomee.common.TomcatVersion;
@@ -135,6 +139,7 @@ import javax.transaction.TransactionSync
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
+import java.io.Serializable;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.net.URL;
@@ -751,7 +756,7 @@ public class TomcatWebAppBuilder impleme
                     sessionManagerClass = TomcatHelper.getServer().getParentClassLoader().loadClass(sessionManager);
                 } catch (ClassNotFoundException e) {
                     logger.error("can't find '" + sessionManager + "', StandardManager will be used", e);
-                    sessionManagerClass = StandardManager.class;
+                    sessionManagerClass = OWBStandardManager.class;
                 }
             }
 
@@ -761,6 +766,8 @@ public class TomcatWebAppBuilder impleme
             } catch (Exception e) {
                 logger.error("can't instantiate '" + sessionManager + "', StandardManager will be used", e);
             }
+        } else if (standardContext.getCluster() == null) { // else let it use the cluster to create the manager
+            standardContext.setManager(new OWBStandardManager());
         }
 
         if (standardContext.getConfigFile() == null) {
@@ -1060,6 +1067,23 @@ 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()) { // 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
+                            }
+                        }
+                    }
                 } catch (Exception e) {
                     logger.error("Unable to deploy collapsed ear in war " + standardContext, e);
                     undeploy(standardContext, contextInfo);

Added: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/OWBStandardManager.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/OWBStandardManager.java?rev=1460544&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/OWBStandardManager.java (added)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/OWBStandardManager.java Mon Mar 25 08:26:07 2013
@@ -0,0 +1,54 @@
+/*
+ * 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.tomee.catalina.session;
+
+import org.apache.catalina.session.StandardManager;
+import org.apache.webbeans.proxy.javassist.OpenWebBeansClassLoaderProvider;
+
+import java.io.IOException;
+
+public class OWBStandardManager extends StandardManager {
+    @Override
+    public void load() throws ClassNotFoundException, IOException {
+        initOWBJavassistLoaderprovider();
+        try {
+            super.load();
+        } finally {
+            resetOWBJavassistLoaderProvider();
+        }
+    }
+
+    private void initOWBJavassistLoaderprovider() {
+        try {
+            if(javassist.util.proxy.ProxyFactory.classLoaderProvider instanceof OpenWebBeansClassLoaderProvider) {
+                OpenWebBeansClassLoaderProvider.class.cast(javassist.util.proxy.ProxyFactory.classLoaderProvider).useCurrentClassLoader();
+            }
+        } catch (final Throwable t) {
+            // no-op: using asm
+        }
+    }
+
+    private void resetOWBJavassistLoaderProvider() {
+        try {
+            if(javassist.util.proxy.ProxyFactory.classLoaderProvider instanceof OpenWebBeansClassLoaderProvider) {
+                OpenWebBeansClassLoaderProvider.class.cast(javassist.util.proxy.ProxyFactory.classLoaderProvider).reset();
+            }
+        } catch (final Throwable t) {
+            // no-op
+        }
+    }
+}

Modified: tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/QuickSessionManager.java
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/QuickSessionManager.java?rev=1460544&r1=1460543&r2=1460544&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/QuickSessionManager.java (original)
+++ tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/session/QuickSessionManager.java Mon Mar 25 08:26:07 2013
@@ -16,9 +16,7 @@
  */
 package org.apache.tomee.catalina.session;
 
-import org.apache.catalina.session.StandardManager;
-
-public class QuickSessionManager extends StandardManager {
+public class QuickSessionManager extends OWBStandardManager {
     public QuickSessionManager() {
         setSecureRandomClass("org.apache.tomee.catalina.session.FastNonSecureRandom");
     }