[ 
https://issues.apache.org/jira/browse/OPENEJB-1108?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marc Zbyszynski resolved OPENEJB-1108.
--------------------------------------

    Resolution: Invalid

Sorry, after more research it appears that this not actually an issue. 
InterceptorBindingBuilder is correctly dealing with methods and method 
parameters. The problem I am having has something to do with 
InterceptorBindingBuilder.implies. My method annotated with 
@ExcludeClassInterceptors has an input parameter that for some reason is not 
being found by the class loader in line 229 of InterceptorBindingBuilder . 
Probably something to do with my environment. 

Please ignore this issue. Sorry for the noise.

> CoreDeploymentInfo should not be using Method objects as keys in HashMaps 
> since Method.hashCode() returns the same for overloaded methods.
> ------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: OPENEJB-1108
>                 URL: https://issues.apache.org/jira/browse/OPENEJB-1108
>             Project: OpenEJB
>          Issue Type: Bug
>          Components: container system
>    Affects Versions: 3.1.2
>         Environment: Windows XP, Java JDK 1.6.0_12
>            Reporter: Marc Zbyszynski
>
> I think I found a bug in org.apache.openejb.core.CoreDeploymentInfo.java. 
> Apologies if it has already been reported (I searched around in Jira and 
> couldn't find anything).
> The issue is with this method:
>     public void mapMethods(Method interfaceMethod, Method beanMethod){
>         methodMap.put(interfaceMethod, beanMethod);
>     }
> methodMap is a HashMap:
> private final Map<Method, Method> methodMap = new HashMap<Method, Method>();
> The problem I found is with overloaded methods. The hashCode implementation 
> of Method is:
>     public int hashCode() {
>       return getDeclaringClass().getName().hashCode() ^ getName().hashCode();
>     }
> I found that if I had a session bean with two methods with the same name but 
> different method signatures like so:
> public void startEditing(Long,Long);
> public void startEditing(Long,String);
> then the second method was over-writing the first in that HashMap. The 
> problem this was causing for me had to do with interceptors. In my 
> implementation class I was declaring interceptors at the class level, but for 
> the two methods above I was using @ExcludeClassInterceptors. When I ran my 
> tests, I found that one of the above methods was ignoring the class-level 
> interceptors as expected, but the other was not.
> I believe this is because one of the method signatures is missing in from 
> that map of messages since they both have the same hashCode value.
> It seems pretty strange that Method.hashCode() doesn't take into account the 
> method parameters, but since that's not something that they are likely to 
> change any time soon, CoreDeploymentInfo should not use HashMap<Method, 
> Method> to store ejb methods....
> Sorry again if I got any of this wrong or if I did not provide enough 
> information.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to