Author: jlmonteiro
Date: Tue Feb 18 13:13:58 2014
New Revision: 1569305

URL: http://svn.apache.org/r1569305
Log:
Fix from Romain to fix some Tomcat 7.0.52 breaking changes

Modified:
    
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
    
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/LazyStopWebappClassLoader.java
URL: 
http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java?rev=1569305&r1=1569304&r2=1569305&view=diff
==============================================================================
--- 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
 (original)
+++ 
tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.java
 Tue Feb 18 13:13:58 2014
@@ -29,6 +29,8 @@ import org.apache.openejb.util.classload
 
 import java.io.File;
 import java.io.IOException;
+import java.lang.reflect.Field;
+import java.lang.reflect.Modifier;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
@@ -48,12 +50,35 @@ public class LazyStopWebappClassLoader e
     private ClassLoaderConfigurer configurer = null;
     private final int hashCode;
 
+    // ugly but break the whole container in embedded mode at least, tomcat 
change had a lot of side effect
+    private void setj2seClassLoader(final ClassLoader loader) {
+        try {
+            final Field field = 
WebappClassLoader.class.getDeclaredField("j2seClassLoader");
+
+            if (!field.isAccessible()) {
+                field.setAccessible(true);
+            }
+
+            if (Modifier.isFinal(field.getModifiers())) {
+                final Field modifiersField = 
Field.class.getDeclaredField("modifiers");
+                modifiersField.setAccessible(true);
+                modifiersField.setInt(field, field.getModifiers() & 
~Modifier.FINAL);
+            }
+
+            field.set(this, loader);
+        } catch (final Exception e) {
+            LOGGER.warning("Can't set field j2seClassLoader");
+        }
+    }
+
     public LazyStopWebappClassLoader() {
+        setj2seClassLoader(getSystemClassLoader());
         hashCode = construct();
     }
 
     public LazyStopWebappClassLoader(final ClassLoader parent) {
         super(parent);
+        setj2seClassLoader(getSystemClassLoader());
         hashCode = construct();
     }
 
@@ -80,14 +105,14 @@ public class LazyStopWebappClassLoader e
                 || 
"org.apache.tomee.mojarra.TomEEInjectionProvider".equals(name)) {
             // don't load them from system classloader (breaks all in embedded 
mode and no sense in other cases)
             synchronized (this) {
-                final ClassLoader old = system;
-                system = NoClassClassLoader.INSTANCE;
+                final ClassLoader old = j2seClassLoader;
+                setj2seClassLoader(NoClassClassLoader.INSTANCE);
                 final boolean delegate = getDelegate();
                 setDelegate(false);
                 try {
                     return super.loadClass(name);
                 } finally {
-                    system = old;
+                    setj2seClassLoader(old);
                     setDelegate(delegate);
                 }
             }

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=1569305&r1=1569304&r2=1569305&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
 Tue Feb 18 13:13:58 2014
@@ -16,6 +16,47 @@
  */
 package org.apache.tomee.catalina;
 
+import static org.apache.tomee.catalina.BackportUtil.getNamingContextListener;
+import static org.apache.tomee.catalina.Contexts.warPath;
+
+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;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.TreeMap;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import javax.ejb.spi.HandleDelegate;
+import javax.el.ELResolver;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import javax.naming.NameNotFoundException;
+import javax.naming.NamingException;
+import javax.naming.Reference;
+import javax.naming.StringRefAddr;
+import javax.servlet.ServletContext;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.jsp.JspApplicationContext;
+import javax.servlet.jsp.JspFactory;
+import javax.sql.DataSource;
+import javax.transaction.TransactionManager;
+import javax.transaction.TransactionSynchronizationRegistry;
+
 import org.apache.catalina.Cluster;
 import org.apache.catalina.Container;
 import org.apache.catalina.Engine;
@@ -127,46 +168,6 @@ import org.apache.webbeans.config.WebBea
 import org.apache.webbeans.spi.adaptor.ELAdaptor;
 import org.omg.CORBA.ORB;
 
-import javax.ejb.spi.HandleDelegate;
-import javax.el.ELResolver;
-import javax.naming.Context;
-import javax.naming.InitialContext;
-import javax.naming.NameNotFoundException;
-import javax.naming.NamingException;
-import javax.naming.Reference;
-import javax.naming.StringRefAddr;
-import javax.servlet.ServletContext;
-import javax.servlet.SessionTrackingMode;
-import javax.servlet.jsp.JspApplicationContext;
-import javax.servlet.jsp.JspFactory;
-import javax.sql.DataSource;
-import javax.transaction.TransactionManager;
-import javax.transaction.TransactionSynchronizationRegistry;
-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;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Properties;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-import static org.apache.tomee.catalina.BackportUtil.getNamingContextListener;
-import static org.apache.tomee.catalina.Contexts.warPath;
-
 /**
  * Web application builder.
  *
@@ -1055,6 +1056,9 @@ public class TomcatWebAppBuilder impleme
 
         // clear a bit log for default case
         
addMyFacesDefaultParameters(standardContext.getLoader().getClassLoader(), 
standardContext.getServletContext());
+
+        // breaks cdi
+        
standardContext.setTldValidation(Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.tld.validation",
 "false")));
     }
 
     /**


Reply via email to