【问题标题】:Cannot create nested javax.management.openmbean.CompositeData object无法创建嵌套的 javax.management.openmbean.CompositeData 对象
【发布时间】:2012-09-06 16:06:22
【问题描述】:

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

【问题讨论】:

    标签: jmx mbeans


    【解决方案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 中公开复杂属性是一种更简单(且可维护)的方法。

    【讨论】:

    • 非常感谢,有帮助!还有一个问题,我可以在代码中做些什么来消除警告(我认为它是在嵌套 CompositeData 时出现的): 注意:com/example/MyMBean.java 使用未经检查或不安全的操作。注意:使用 -Xlint 重新编译:unchecked for details.
    • 是的,我考虑过 MXBeans,但对于我的特殊情况,我需要明确使用 MBeans。
    • 不确定。我没有收到编译器警告。哪个javac版本?你能追加输出吗?
    • 哦,伙计,这是我的其他代码造成的。再次感谢! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多