0

谁能帮我找出问题所在?

我的com.intel.esg.ecp.cli.Command连接到JMX,找到MXBean com.acme.AcmeManager,它应该调用createObject来创建AcmeObject。

AcmeManager 和 AcmeObject 都设计为 MXBean,我发布了没有问题。

堆栈是否意味着 AcmeObject 不确认 MXBean 标准或 AcmeManager 不确认 MXBean 标准?我是 JMX MXBean 的新手,有人可以指点我一些有用的材料吗?

谢谢

Executing 'createObject' ...
ERROR: Cannot make MXBean proxy for com.acme.AcmeManager: java.io.InvalidObjectException: Do not know how to make a com.acme.Acme from a CompositeData: no method from(CompositeData); no constructor has @ConstructorProperties  
annotation; does not have a public no-arg constructor; contains methods other than getters (getStatus)

java.lang.IllegalArgumentException: Cannot make MXBean proxy for com.acme.AcmeManager: java.io.InvalidObjectException: Do not know how to make a com.acme.AcmeObject from a CompositeData: no method from(CompositeData); no 
constructor has @ConstructorProperties annotation; does not have a public no-arg constructor; contains methods other than getters (getStatus)
        at javax.management.MBeanServerInvocationHandler.findMXBeanProxy(MBeanServerInvocationHandler.java:323)
        at javax.management.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:247)
        at $Proxy18.createObject(Unknown Source)
        at com.acme.cli.commands.tenant.CreateTenantCommand.implExecute(CreateTenantCommand.java:71)
        at com.intel.esg.ecp.cli.Command.execute(Command.java:64)
        at com.intel.esg.ecp.cli.CLI.execute(CLI.java:332)
        at com.acme.cli.commands.Main.main(Main.java:174)

Caused by: java.io.InvalidObjectException: Do not know how to make a com.acme.AcmeObject from a CompositeData: no method from(CompositeData); no constructor has @ConstructorProperties annotation; does not have a public no-arg   
constructor; contains methods other than getters (getStatus)
        at com.sun.jmx.mbeanserver.OpenConverter.invalidObjectException(OpenConverter.java:1403)
        at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.makeCompositeBuilder(OpenConverter.java:891)
        at com.sun.jmx.mbeanserver.OpenConverter$CompositeConverter.checkReconstructible(OpenConverter.java:897)
        at com.sun.jmx.mbeanserver.OpenConverter$CollectionConverter.checkReconstructible(OpenConverter.java:663)
        at com.sun.jmx.mbeanserver.ConvertingMethod.checkCallToOpen(ConvertingMethod.java:94)
        at com.sun.jmx.mbeanserver.MXBeanProxy$Visitor.visitAttribute(MXBeanProxy.java:53)
        at com.sun.jmx.mbeanserver.MXBeanProxy$Visitor.visitAttribute(MXBeanProxy.java:48)
        at com.sun.jmx.mbeanserver.MBeanAnalyzer.visit(MBeanAnalyzer.java:53)
        at com.sun.jmx.mbeanserver.MXBeanProxy.<init>(MXBeanProxy.java:45)
        at javax.management.MBeanServerInvocationHandler.findMXBeanProxy(MBeanServerInvocationHandler.java:319)
        ... 6 more
~>
4

1 回答 1

0

从文档

MXBean 概念提供了一种编写仅引用一组预定义类型的 MBean 的简单方法,这些类型由 javax.management.openmbean 定义。通过这种方式,您可以确保您的 MBean 将可供任何客户端(包括远程客户端)使用,而无需客户端有权访问表示您的 MBean 类型的特定于模型的类。

显然,com.acme.Acmecom.acme.AcmeObject是自定义类型,它们没有定义与 opendata 类型的转换。有关详细信息,请参阅OpenData 类型映射规则

于 2013-05-26T15:12:10.217 回答