无法创建嵌套的javax.management.openmbean.CompositeData对象

时间:2012-09-06 16:06:23

标签: jmx mbeans

我知道我可以在CompositeData中使用SimpleType值,如SimpleType.INTEGER,SimpleType.STRING。但我想知道如何将CompositeData的另一个实例复制到CompositeData中。 E. g。:

CompositeType type = new CompositeType("My Type", "My Type", new String[]{"item1", "item2"}, new String[]{"item1", "item2"}, new OpenType[]{SimpleType.STRING, SimpleType.STRING});
CompositeData data = new CompositeDataSupport(type, new String[]{"item1", "item2"}, new String[]{"item value 1", "item value 2"});

CompositeType compType = new CompositeType("compData", "compData", new String[]{"compItem1"}, new String[]{"compItem1"}, new OpenType[]{I_DONT_KNOW_WHAT_TO_PUT_HERE});
CompositeData compData = new CompositeDataSupport(compType, new String[]{"compData"}, data);

请参阅上面的“I_DONT_KNOW_WHAT_TO_PUT_HERE”,我无法找到如何传递CompositeData的OpenType。我已经看到了从CompositeData以递归方式获取嵌套CompositeData实例的示例。

一些参考文献:

http://docs.oracle.com/javase/6/docs/api/javax/management/openmbean/CompositeData.html http://docs.oracle.com/javase/6/docs/api/javax/management/openmbean/CompositeType.html http://docs.oracle.com/javase/6/docs/api/javax/management/openmbean/OpenType.html

1 个答案:

答案 0 :(得分:1)

I_DONT_KNOW_WHAT_TO_PUT_HERE 的值是 类型 ,但代码行4上构造函数中的第二个参数应该包含字符串“ compItem1 “,而非” compData “,因为它代表您在代码行4的第3个参数中定义的项目名称。< / p>

这是完整的代码:

    CompositeType type = new CompositeType("My Type", "My Type", new String[]{"item1", "item2"}, new String[]{"item1", "item2"}, new OpenType[]{SimpleType.STRING, SimpleType.STRING});
    CompositeData data = new CompositeDataSupport(type, new String[]{"item1", "item2"}, new String[]{"item value 1", "item value 2"});

    CompositeType compType = new CompositeType("compData", "compData", new String[]{"compItem1"}, new String[]{"compItem1"}, new OpenType[]{type});
    CompositeData compData = new CompositeDataSupport(compType, new String[]{"compItem1"}, new Object[]{data});

您是否考虑过使用MXBeans?除非你真的需要所有额外的元数据,否则在JMX中公开复杂属性是一种更简单(和可维护)的方式。