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
>> >> >>
>> >> >>
>> >> >>
>> >>
>>

Reply via email to