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