>>If you have time to add tests it would be great
I will test it a little bit further.

But I didn't quite get the problem yet... sorry! :)


This is our implementation (without the cache)...
*****************************************************************************************************
   public boolean equals(final Object other) {
       return other != null && ClassLoader.class.isInstance(other) &&
hashCode() == other.hashCode();
   }

   public int hashCode() {
       return super.hashCode();
   }
*****************************************************************************************************

This is the default implementation...
*****************************************************************************************************
    public boolean equals(Object obj) {
  return (this == obj);
    }

    public native int hashCode();
*****************************************************************************************************

The default method will return the same integer if  "this == other"; and we
are basically comparing the result of both hashCode() calls. Isn't it the
same thing?

[]s,
Thiago.





On Tue, Dec 3, 2013 at 5:11 PM, Romain Manni-Bucau <[email protected]>wrote:

> 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