I recently built merlin's jmx facility. Had to tweak the project.xml under facilities/jmx a bit since it was lacking a <currentVersion> tag and thus generated unversioned jars which couldn't be identified by merlin. Then I built and ran the jmx tutorial under platform/tutorials. I did a merlin --offline conf\hello.block and kept getting a ComponentRegistrationException to the effect that HelloComponent did not implement a required interface. I started digging in merlin's source code (int's obviously not for the faint of heart) and reached a tentative conclusion:
- The ComponentRegistrationException is thrown in AbstractComponentRegistrationManager.verifyInterfaces(Object object, Class[] interfaces) and states that "object" doesn't implement one of the interfaces in "interfaces", where "interfaces" are supposedly all MBean interfaces implemented by "object". - In AbstractComponentRegistrationManager.register(ComponentModel componentModel) the "object" above is obtained via componentModel.resolve(). I strongly suspect that resolve() returns not the component proper but a proxy implementing all service interfaces but not necessarily the MBean interfaces implemented by the component. In order to verify my suspicion I patched tutorial.HelloComponent to declare HelloMBean as a service interface in its .xinfo file. This did the trick. Now I can see HelloMBean in the MX4J console and change its output string. So it seems that currently merlin mandates that components declare their MBean interfaces as service interfaces which IMHO is not desirable. Since the ComponentRegistrationManager operates on a ComponentModel I tried to find a way of asking a ComponentModel for the component proper it models - but found none. So I am not sure how to fix this. Cheers, Olaf --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
