4
我有一些類型是這樣的:如何在JMX中表示多態性?
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 more Caused 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 more Caused 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中可表示,但Object不是,因爲至少有一個getter需要出現在類中才能將其識別爲可用類型。我知道任何添加抽象層的嘗試都不會有幫助,因爲NumberingComponent本身已經是這樣一個層。原始版本的界面中也有泛型,但爲了保持簡單,我刪除了它們,並且失敗方式與使用或不使用它們相同。
有沒有其他一些方法可以將其映射到複合類型?我搜索了異常消息,並且根本沒有點擊。 (!!)
你可以顯示你正在註冊的實際班級嗎? JMX將使用對類的反射,而不是接口,對嗎?你確定你的界面層次真的是這裏的問題嗎? – Gray 2010-10-18 13:45:19
看來,它實際上反映在接口上。我知道它使用實際的類聲明,因爲它發現List並意識到它需要檢查如何轉換Thing(這不會在運行時出現)。 –
Trejkaz
2010-10-19 22:27:15