This didn't fix my log4j issue, but there's a workaround: adding -Dlog4j.ignoreTCL to the VM arguments fixes it.
On Wed, Mar 25, 2009 at 3:51 PM, Toby Reyelts <to...@google.com> wrote: > Overall, the change to treat server classes vs system classes separately, > such that system classes are "API classes" and server classes are > "implementation classes" looks good. > > I'm concerned that there will still be places where things will clash - > such as the sharing of log4j across both server and webapps. Given the > complexity of the situation, I understand the desire to change behavior as > little as possible in this area, though. There's also an argument that, > since this is the way Jetty currently functions, you're just exposing Jetty > behavior, as is. > > I think the situation would be simpler if GWT didn't treat the system > classpath as a "user-level" classpath. > > > On Wed, Mar 25, 2009 at 9:15 AM, <codesite-nore...@google.com> wrote: > >> >> Author: sco...@google.com >> Date: Wed Mar 25 05:43:19 2009 >> New Revision: 5078 >> >> Modified: >> >> >> releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java >> >> Log: >> Amending r5077: >> - Catch ClassNotFound in outside loader and allow internal load >> - Allow "system" resources to be loaded internally if they're not found >> externally >> - jat suggestion to extract constant >> - Fix comments >> >> Review by: tobyr (TBR) >> >> Modified: >> >> releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java >> >> ============================================================================== >> --- >> >> releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java >> (original) >> +++ >> >> releases/1.6/dev/core/src/com/google/gwt/dev/shell/jetty/JettyLauncher.java >> Wed Mar 25 05:43:19 2009 >> @@ -249,6 +249,8 @@ >> */ >> private class WebAppClassLoaderExtension extends WebAppClassLoader { >> >> + private static final String META_INF_SERVICES = >> "META-INF/services/"; >> + >> public WebAppClassLoaderExtension() throws IOException { >> super(bootStrapOnlyClassLoader, WebAppContextWithReload.this); >> } >> @@ -257,17 +259,21 @@ >> public URL findResource(String name) { >> // Specifically for >> META-INF/services/javax.xml.parsers.SAXParserFactory >> String checkName = name; >> - if (checkName.startsWith("META-INF/services/")) { >> - checkName = checkName.substring("META-INF/services/".length()); >> + if (checkName.startsWith(META_INF_SERVICES)) { >> + checkName = checkName.substring(META_INF_SERVICES.length()); >> } >> >> - // For system/server path, just try the outside world quietly. >> + // For a system path, load from the outside world. >> + URL found; >> if (isSystemPath(checkName)) { >> - return systemClassLoader.getResource(name); >> + found = systemClassLoader.getResource(name); >> + if (found != null) { >> + return found; >> + } >> } >> >> // Always check this ClassLoader first. >> - URL found = super.findResource(name); >> + found = super.findResource(name); >> if (found != null) { >> return found; >> } >> @@ -303,14 +309,18 @@ >> >> @Override >> protected Class<?> findClass(String name) throws >> ClassNotFoundException { >> - // For system/server path, just try the outside world quietly. >> + // For system path, always prefer the outside world. >> if (isSystemPath(name)) { >> - return systemClassLoader.loadClass(name); >> + try { >> + return systemClassLoader.loadClass(name); >> + } catch (ClassNotFoundException e) { >> + } >> } >> >> try { >> return super.findClass(name); >> } catch (ClassNotFoundException e) { >> + // Don't allow server classes to be loaded from the outside. >> if (isServerPath(name)) { >> throw e; >> } >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ http://groups.google.com/group/Google-Web-Toolkit-Contributors -~----------~----~----~----~------~----~------~--~---