실제의 형태 및 속성은 실행시에 결정되는 속성을 가지지 않는 추상 형을 돌려주는 MXBean 조작을 작성하려고하고 있습니다. 다음과 같이 내 데이터 모델은 간단하게 넣을 수 있습니다MXBean 조작 시그 니챠의 추상 형
public interface I extends CompositeDataView {
// empty
}
public final class A implements I {
private final String foo;
@ConstructorProperties({"foo"})
public A(final String foo) {/* ... */}
public String getFoo() {/* ... */}
@Override
public CompositeData toCompositeData(CompositeType ct) {/* ... */}
public static A from(final CompositeData cd) {/* ... */}
}
public final class B implements I {
private final String bar;
@ConstructorProperties({"bar"})
public B(final String bar) {/* ... */}
public String getBar() {/* ... */}
@Override
public CompositeData toCompositeData(CompositeType ct) {/* ... */}
public static B from(final CompositeData cd) {/* ... */}
}
... 그리고 MXBean의 작업 서명은 다음과 같습니다
@MXBean
public interface Baz {
I f();
}
작업은 foo
속성 중 하나 A
의 인스턴스를 반환 할 수 있습니다, 또는 예를 들어 B
의 인스턴스는 bar
입니다. 나는 반짝 NotCompliantMBeanException
제시하고있어 물론 즉시 나는 MBean
인스턴스를 등록하려고 :
Caused by: javax.management.openmbean.OpenDataException: Can't map I to an open data type
at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeCompositeMapping(DefaultMXBeanMappingFactory.java:458)
at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.makeMapping(DefaultMXBeanMappingFactory.java:292)
at com.sun.jmx.mbeanserver.DefaultMXBeanMappingFactory.mappingForType(DefaultMXBeanMappingFactory.java:257)
거기 일반 MBean
들과 내가 할 수있는 일이 그리고 Serializable
하지만 보인다 수 없습니다 MXBean
s 및 CompositeDataView
와. 아니면 내가 틀렸어?
감사합니다. Eamonn! 저는이 기회를 빌어 JMX의 블로그 게시물 (https://www.java.net/blogs/emcmanus)에 감사드립니다. 그들은 정말 훌륭합니다. 일상 업무에서 사용합니다. – Bass