Details
Description
When running ActiveMQ in embedded mode under WebSphere (I know that this is not a typical JEE-compliant deployment) the ObjectNames of the registered MBeans are modified by the container. Unfortunately, ActiveMQ fails to keep these names. As a result, ActiveMQ does not unregister its beans when an application is stopped, and a restart causes InstanceAlreadyExistExceptions.
The following change to ManagementContext.java may help:
Currently:
public ObjectInstance registerMBean(Object bean, ObjectName name) throws Exception { ObjectInstance result = getMBeanServer().registerMBean(bean, name); this.registeredMBeanNames.add(name); return result; }
but it should be something like:
public ObjectInstance registerMBean(Object bean, ObjectName name) throws Exception { ObjectInstance result = getMBeanServer().registerMBean(bean, name); if (result != null) this.registeredMBeanNames.add(result.getObjectName); return result; }