問題はインターフェースIJmsDestinationMBeanです。オープン型ではない型JmsDestinationAttributesを返します。これを行うときに私が従う経験則は次のとおりです。
- 実際に登録された MBean (複合型属性を持つ) はFooと呼ばれ、その管理インターフェースはFooMXBeanと呼ばれます。
- 複合型 ( Fooの属性はBarと呼ばれ、 BarMBeanと呼ばれる管理インターフェースを持っています。この男は、オープン型または他の適切に公開された複合型ではない値を返すことはできません。
したがって、(この例では) 複合型をサポートするために「ホスト」MBean は MXBean である必要があり、複合型には<ClassName>MBeanというインターフェースが必要です。一方には M X Bean インターフェースがあり、もう一方には MBean インターフェースがあることに注意してください。
これが私の例です:
- JMSDestinationは JMSDestinationMXBeanを実装します
- JmsDestinationAttributesは JmsDestinationAttributesMBeanを実装します
...ルーズケース規格で申し訳ありません。オンザフライの例です。
ここに JMSDestination コードがあり、メインを作成して登録します。ユーザー名プロパティを使用して名前を指定しているだけです。
public class JmsDestination implements JmsDestinationMXBean {
protected JmsDestinationAttributes attrs = new JmsDestinationAttributes(System.getProperty("user.name"));
public JmsDestinationAttributes getAttributes() {
return attrs;
}
public static void main(String[] args) {
JmsDestination impl = new JmsDestination();
try {
ManagementFactory.getPlatformMBeanServer().registerMBean(impl, new ObjectName("org.jms.impl.test:name=" + impl.attrs.getName()));
Thread.currentThread().join();
} catch (Exception ex) {
ex.printStackTrace(System.err);
}
}
}
JMSDestinationMXBean コード:
public interface JmsDestinationMXBean {
public JmsDestinationAttributes getAttributes();
}
値に同じ名前と乱数を使用する JmsDestinationAttributes コード:
public class JmsDestinationAttributes implements JmsDestinationAttributesMBean {
protected final String name;
protected final Random random = new Random(System.currentTimeMillis());
public JmsDestinationAttributes(String name) {
this.name = name;
}
public String getName() {
return name;
}
public int getMessagesCurrentCount() {
return Math.abs(random.nextInt(100));
}
public int getConsumersCurrentCount() {
return Math.abs(random.nextInt(10));
}
}
.... および JmsDestinationAttributesMBean:
public interface JmsDestinationAttributesMBean {
public String getName();
public int getMessagesCurrentCount();
public int getConsumersCurrentCount();
}
JConsole ビューは次のようになります。
MXBean の属性の JConsole ビューは次のようになります。
わかる ?