次のように MBean を登録したいと思います。
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = null;
try {
name = ObjectNameProvider.getObjectName();
mbs.registerMBean(ApplicationTracker.getInstance(), name);
アプリケーションを起動すると、登録が失敗し、javax.management.InstanceAlreadyExistsException がスローされ、JMX 機能を使用できません。
ただし、以下のように MBean を登録解除して再登録すると、例外なくすべて正常に動作します。なんで?
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
ObjectName name = null;
try {
name = ObjectNameProvider.getObjectName();
if(mbs.isRegistered(name)){
mbs.unregisterMBean(name);
}
mbs.registerMBean(ApplicationTracker.getInstance(), name);