From: Alexey L. <lou...@us...> - 2004-05-06 18:34:57
|
User: loubyansky Date: 04/05/06 11:34:50 Modified: src/main/org/jboss/ejb/plugins/cmp/bridge EntityBridgeInvocationHandler.java Log: switched back to mapping method objects to ejbSelect bridges, CMP/CMR bridges are still keyed by its method names. Revision Changes Path 1.23 +12 -2 jboss/src/main/org/jboss/ejb/plugins/cmp/bridge/EntityBridgeInvocationHandler.java Index: EntityBridgeInvocationHandler.java =================================================================== RCS file: /cvsroot/jboss/jboss/src/main/org/jboss/ejb/plugins/cmp/bridge/EntityBridgeInvocationHandler.java,v retrieving revision 1.22 retrieving revision 1.23 diff -u -r1.22 -r1.23 --- EntityBridgeInvocationHandler.java 28 Apr 2004 10:09:59 -0000 1.22 +++ EntityBridgeInvocationHandler.java 6 May 2004 18:34:49 -0000 1.23 @@ -30,7 +30,7 @@ * * @author <a href="mailto:da...@da...">Dain Sundstrom</a> * @author <a href="mailto:al...@jb...">Alexey Loubyansky</a> - * @version $Revision: 1.22 $ + * @version $Revision: 1.23 $ */ public class EntityBridgeInvocationHandler implements InvocationHandler { @@ -61,12 +61,22 @@ public Object invoke(Object proxy, Method method, Object[] args) throws FinderException { + // todo find a better workaround + // CMP/CMR field bridges are mapped to its abstract method names because of the bug + // in reflection introduced in Sun's 1.4 JVM, i.e. when an abstract class C1 extends a super class C2 + // and implements interface I and C2 and I both declare method with the same signature M, + // C1.getMethods() will contain M twice. + // ejbSelect methods are mapped to Method objects instead. Because ejbSelect methods having the same name + // might have different signatures. Hopefully, the probability of an ejbSelect method to appear in an interface + // is lower. + String methodName = method.getName(); BridgeInvoker invoker = (BridgeInvoker) fieldMap.get(methodName); if(invoker == null) { - invoker = (BridgeInvoker) selectorMap.get(methodName); + //invoker = (BridgeInvoker) selectorMap.get(methodName); + invoker = (BridgeInvoker) selectorMap.get(method); if(invoker == null) { |