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");
}