well, the issue is without doing it the classloader used for cxf (http://svn.apache.org/repos/asf/tomee/tomee/trunk/server/openejb-cxf-transport/src/main/java/org/apache/openejb/server/cxf/transport/util/CxfContainerClassLoader.java) and the webapp loader are different. I'm 100% sure that's a regression even if build passes and we can't keep it.
This makes equals not symmetric so using JVM equals/hashCode is the best we can do. If you have time to add tests it would be great, the issue can come from client/server and jaxws/jaxrs. It can cause linkagerror, classcast or even prevent deployment. Romain Manni-Bucau Twitter: @rmannibucau Blog: http://rmannibucau.wordpress.com/ LinkedIn: http://fr.linkedin.com/in/rmannibucau Github: https://github.com/rmannibucau 2013/12/3 Thiago Veronezi <[email protected]>: > It didn't locally. It takes ~2 hrs to have an exception or not. > It should happen in the next 1:15 hrs. If anything happens we can always > revert it back. :) > > > > > > On Tue, Dec 3, 2013 at 4:19 PM, Romain Manni-Bucau > <[email protected]>wrote: > >> it does for sure, not sure we have tests btw >> Romain Manni-Bucau >> Twitter: @rmannibucau >> Blog: http://rmannibucau.wordpress.com/ >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> Github: https://github.com/rmannibucau >> >> >> >> 2013/12/3 Thiago Veronezi <[email protected]>: >> > I tested it locally without the methods. >> > Committed the code to see if the build server complains. >> > >> > []s, >> > Thiago. >> > >> > >> > >> > On Tue, Dec 3, 2013 at 1:11 PM, Romain Manni-Bucau < >> [email protected]>wrote: >> > >> >> hashcode is just a cached impl, equals is mandatory because of the >> >> hack we have to isolate a bit cxf from apps. >> >> >> >> If you fix isolation you can remove it ;). >> >> Romain Manni-Bucau >> >> Twitter: @rmannibucau >> >> Blog: http://rmannibucau.wordpress.com/ >> >> LinkedIn: http://fr.linkedin.com/in/rmannibucau >> >> Github: https://github.com/rmannibucau >> >> >> >> >> >> >> >> 2013/12/3 Thiago Veronezi <[email protected]>: >> >> > The equals and hashCode look weird. >> >> > >> >> > **************************************** >> >> > @Override >> >> > public boolean equals(final Object other) { >> >> > return other != null && ClassLoader.class.isInstance(other) && >> >> > hashCode() == other.hashCode(); >> >> > } >> >> > >> >> > @Override >> >> > public int hashCode() { >> >> > return hashCode; >> >> > } >> >> > **************************************** >> >> > >> >> > I wonder if we need these methods at all. Usually equal hashCodes does >> >> not >> >> > mean that "equals" is true, right? >> >> > >> >> > []s, >> >> > Thiago. >> >> > >> >> > >> >> > >> >> > >> >> > On Tue, Dec 3, 2013 at 12:57 PM, <[email protected]> wrote: >> >> > >> >> >> Author: rmannibucau >> >> >> Date: Tue Dec 3 17:57:19 2013 >> >> >> New Revision: 1547499 >> >> >> >> >> >> URL: http://svn.apache.org/r1547499 >> >> >> Log: >> >> >> correct hashcode in lazywebappclassloader >> >> >> >> >> >> Modified: >> >> >> >> >> >> >> >> >> tomee/tomee/trunk/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/LazyStopWebappClassLoader.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=1547499&r1=1547498&r2=1547499&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 Dec 3 17:57:19 2013 >> >> >> @@ -41,19 +41,21 @@ public class LazyStopWebappClassLoader e >> >> >> private boolean restarting = false; >> >> >> private boolean forceStopPhase = >> >> >> >> >> >> Boolean.parseBoolean(SystemInstance.get().getProperty("tomee.webappclassloader.force-stop-phase", >> >> >> "false")); >> >> >> private ClassLoaderConfigurer configurer = null; >> >> >> + private final int hashCode; >> >> >> >> >> >> public LazyStopWebappClassLoader() { >> >> >> - construct(); >> >> >> + hashCode = construct(); >> >> >> } >> >> >> >> >> >> public LazyStopWebappClassLoader(final ClassLoader parent) { >> >> >> super(parent); >> >> >> - construct(); >> >> >> + hashCode = construct(); >> >> >> } >> >> >> >> >> >> - private void construct() { >> >> >> + private int construct() { >> >> >> setDelegate(isDelegate()); >> >> >> configurer = INIT_CONFIGURER.get(); >> >> >> + return super.hashCode(); >> >> >> } >> >> >> >> >> >> @Override >> >> >> @@ -211,12 +213,8 @@ public class LazyStopWebappClassLoader e >> >> >> } >> >> >> >> >> >> @Override >> >> >> - public int hashCode() { // could be improved a bit adding the >> host >> >> >> and ensuring contextName != null, an alternative is getURLs() but it >> is >> >> >> longer >> >> >> - final String name = getContextName(); >> >> >> - if (name != null) { >> >> >> - return name.hashCode(); >> >> >> - } >> >> >> - return super.hashCode(); >> >> >> + public int hashCode() { >> >> >> + return hashCode; >> >> >> } >> >> >> >> >> >> @Override >> >> >> >> >> >> >> >> >> >> >> >>
