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



我知道在CompositeData中可以有SimpleType值,如SimpleType.INTEGER、SimpleType.STRING。但我想知道如何将CompositeData的另一个实例放入CompositeData中。例如:

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_NOW_WHAT_TO_PUT_HERE",我找不到如何传递OpenType的CompositeData。我看到了一个从CompositeData递归获取嵌套CompositeData实例的例子。

一些参考文献:

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

I_DONTKNOW_WHAT_TO_PUTHERE的值为类型,但代码行4上构造函数中的第二个参数应具有字符串"compItem1",而不是"compData",因为这表示您在代码行4的第三个参数中定义的项名称。

这是完整的代码:

    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中公开复杂属性的方法要简单得多(且可维护)。

相关内容

最新更新