Description courtesy of David Potter:
When running serviceMix V3.0 on WebSphere 6.1.0.0 I get the following error
after stopping and starting serviceMix from the WebSphere console.
ERROR - ContextLoader - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean
with name 'jbi' defined in ServletContext resource
[/WEB-INF/servicemix.xml]: Invocation of init method failed;
nested exception is
javax.jbi.JBIException: javax.management.InstanceAlreadyExistsException:
org.apache.servicemix:Name=ManagementContext,cell=SD1464Node01Cell,Type=SystemService,ContainerName=ServiceMix,node=SD1464Node01,process=server1
I have traced the error to the fact that when you register an mbean IBM adds
additional information to the bean. So when serviceMix regesters the bean
org.apache.servicemix:Name=ManagementContext,Type=SystemService,ContainerName=ServiceMix
IBM, in the method
com.ibm.ws.management.PlatformMBeanServer.registerMBean(PlatformMBeanServer.java:469)
, adds the attributes cell=SD1464Node01Cell,
node=SD1464Node01,process=server1
These means that when we try to unregister the bean on application shutdown
we cannot find it (as we look the been up by name).
Solution Ideas:
1) In AsyncBaseLifeCycle.doInit() use queryNames() instead of isRegistered().
Care would need to be taken in unregistering the bean is case the bean is
not ours.
2) After a bean is registered, update its name (or the complete bean) with the
name of the bean returned by the register operation. (this is preferred)
Additional comments:
There is a similar fix in spring org/springframework/jmx/support/MBeanRegistrationSupport.java version 2-0-1.
I think that there is a similar problem in the current versionof ActiveMQ.
If JMX is turned off for serviceMix then the problems in spring and ActiveMQ do not appear.
David Potter