各 MBean を一意の名前で登録する必要があります。これを行うと、2 番目の MBean を登録するときに例外を受け取ることはなくなります。各 Bean を個別に管理する必要があります (つまり、各ホーム オブジェクトの属性は個々の MBean を介して設定されます)。
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Hello h1 = new Hello();
Hello h2 = new Hello();
mbs.registerMBean(h1, new ObjectName("mBeans:type=Hello-1"));
mbs.registerMBean(h2, new ObjectName("mBeans:type=Hello-2"));
Hello
1 つの MBean を介して 2 つのオブジェクトを同時に管理する場合(つまり、1 つの MBean の属性を変更すると、両方の Hello オブジェクトが変更される場合)、複合Hello オブジェクトを使用して、それを MBean として公開することができます。
共通インターフェース:
interface IHello {
void setAttribute(int value);
}
単一の hello オブジェクト:
class Hello implements IHello {
int attribute;
void setAttribute(int value) {
attribute = value;
}
}
複合 hello オブジェクト:
class CompositeHello implements IHello {
IHello[] Hellos;
CompositeHome(IHello...hellos) {
super();
this.hellos = hellos;
}
void setAttribute(int value) {
for (IHello hello : hello) {
home.setAttribute(value);
}
}
}
複合 MBean を登録します。
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
Hello h1 = new Hello();
Hello h2 = new Hello();
CompositeHello composite = new CompositeHello(h1, h2);
mbs.registerMBean(composite, new ObjectName("mBeans:type=Hello"));