Errors generated classes around complex interfaces
--------------------------------------------------

         Key: HIVEMIND-76
         URL: http://nagoya.apache.org/jira/browse/HIVEMIND-76
     Project: HiveMind
        Type: Bug
  Components: framework  
    Versions: 1.0, 1.1    
    Reporter: Howard M. Lewis Ship
 Assigned to: Howard M. Lewis Ship 
     Fix For: 1.1


For certain complex interfaces, HiveMind gets runtime errors generating a class:

                            PM [DEBUG] Creating SingletonProxy for service kd.PM
org.apache.hivemind.ApplicationRuntimeException: Unable to add method void 
close() throws javax.resource.ResourceExcepti
on to class $SingletonProxy_1001ed04167_14: duplicate method: close
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxy(SingletonServiceModel.java:114)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.getService(SingletonServiceModel.java:58)
        at 
org.apache.hivemind.impl.ServicePointImpl.getService(ServicePointImpl.java:171)
        at 
org.apache.hivemind.impl.ServicePointImpl.getService(ServicePointImpl.java:184)
        at 
org.apache.hivemind.impl.RegistryInfrastructureImpl.getService(RegistryInfrastructureImpl.java:162)
        at 
org.apache.hivemind.impl.RegistryImpl.getService(RegistryImpl.java:66)
        at kd.Main.main(Main.java:25)
Caused by: org.apache.hivemind.ApplicationRuntimeException: Unable to add 
method void close() throws javax.resource.Reso
urceException to class $SingletonProxy_1001ed04167_14: duplicate method: close
        at 
org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:310)
        at 
org.apache.hivemind.impl.ProxyBuilder.addServiceMethods(ProxyBuilder.java:93)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxyClass(SingletonServiceModel.java:169
)
        at 
org.apache.hivemind.impl.servicemodel.SingletonServiceModel.createSingletonProxy(SingletonServiceModel.java:89)
        ... 6 more
Caused by: javassist.CannotCompileException: duplicate method: close
        at javassist.bytecode.ClassFile.testExistingMethod(ClassFile.java:456)
        at javassist.bytecode.ClassFile.addMethod(ClassFile.java:440)
        at javassist.CtClassType.addMethod(CtClassType.java:848)
        at 
org.apache.hivemind.service.impl.ClassFabImpl.addMethod(ClassFabImpl.java:306)
        ... 9 more
Exception in thread "main" 

Investigation found that the interface in question, 
kodo.runtime.KodoPersistenceManager extended a number of other interfaces,
and has conflicting definitions for method close():

void close() throws Exception ... from com.solarmetric.util.Closeable
void close() throws javax.resource.ResourceException ... from 
javax.resource.cci.Connection
void close() ... from javax.jdo.PersistenceManager


HiveMind was attempting to implement all of these, causing problems (same 
return type, same name, same parameters means there can be only one such 
method).

HiveMind needs to more carefully analyze these method signatures and implement 
the most general case; in this case "void close() throws Exception".  This 
logic is centralized in the MethodIterator and MethodSignature classes.



-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://nagoya.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to