gpt4 book ai didi

java - 如何在 JMX 中表示多态性?

转载 作者:搜寻专家 更新时间:2023-11-01 03:44:54 26 4
gpt4 key购买 nike

我有一些像这样的类型:

public interface Numbering {
List<NumberingComponent> getComponents();
}

public interface NumberingComponent {
Object getValue();
}

public interface StringNumberingComponent extends NumberingComponent {
String getValue();
}

public interface IntegerNumberingComponent extends NumberingComponent {
Integer getValue();
}

这一切都很好,除非您尝试注册一个恰好使用此类型的 MXBean,并且您会得到:

...top of exception chain omitted ...Caused by: javax.management.openmbean.OpenDataException: Cannot convert type: class com.acme.NumberingComponent    at com.sun.jmx.mbeanserver.OpenConverter.openDataException(OpenConverter.java:1411)    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:264)    at com.sun.jmx.mbeanserver.OpenConverter.makeArrayOrCollectionConverter(OpenConverter.java:315)    at com.sun.jmx.mbeanserver.OpenConverter.makeParameterizedConverter(OpenConverter.java:393)    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:296)    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:262)    ... 57 moreCaused by: javax.management.openmbean.OpenDataException: Cannot convert type: interface java.io.Serializable    at com.sun.jmx.mbeanserver.OpenConverter.openDataException(OpenConverter.java:1411)    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:264)    at com.sun.jmx.mbeanserver.OpenConverter.makeCompositeConverter(OpenConverter.java:467)    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:293)    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:262)    ... 61 moreCaused by: javax.management.openmbean.OpenDataException: Can't map java.io.Serializable to an open data type    at com.sun.jmx.mbeanserver.OpenConverter.makeCompositeConverter(OpenConverter.java:454)    at com.sun.jmx.mbeanserver.OpenConverter.makeConverter(OpenConverter.java:293)    at com.sun.jmx.mbeanserver.OpenConverter.toConverter(OpenConverter.java:262)    ... 64 more

字符串和整数在 JMX 中是可表示的,但对象不是,因为类中至少需要一个 getter 才能将其识别为可用类型。我知道任何添加抽象层的尝试都无济于事,因为 NumberingComponent 本身已经是这样一个层。接口(interface)的原始版本也有泛型,但我删除了它们以使其更简单,无论有没有它们,它都会以同样的方式失败。

有没有其他方法可以将其映射到复合类型?我用谷歌搜索了异常消息,基本上没有找到任何结果。 (!!)

最佳答案

您可以使 StringNumberingComponent 和 IntegerNumbering 接口(interface)也扩展 CompositeDataView .假设 MBean 的 MBeanInfo 指示属性的正确 CompositeType,则 MBeanServer 会将属性“呈现”为 CompositeData 实例,该实例将正确序列化。

具体实现需要实现的方法非常简单,因为您的 CompositeType 将只有一个字段:

public CompositeData toCompositeData(CompositeType ct) 

JavaDoc 中有一个不错的例子.

关于java - 如何在 JMX 中表示多态性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3956875/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com