0

我知道我可以在 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_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

4

1 回答 1

1

I_DONT_KNOW_WHAT_TO_PUT_HERE的值是type,但代码行 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 中公开复杂属性是一种更简单(且可维护)的方法。

于 2012-09-06T17:01:36.560 回答