Java 导出带有Spring JMX注释的对象

Java 导出带有Spring JMX注释的对象,java,spring,annotations,jmx,Java,Spring,Annotations,Jmx,我试图用SpringJMX注释驱动导出一些信息(我没有xml:D)。我已经能够导出字符串和整数类型,但是我还不能导出我创建的类的任何对象 这是我的@Configuration类 @Configuration @EnableMBeanExport @ComponentScan({"my.packages"}) public class AppManager { public static void main(String[] args) { AnnotationConf

我试图用SpringJMX注释驱动导出一些信息(我没有xml:D)。我已经能够导出字符串和整数类型,但是我还不能导出我创建的类的任何对象

这是我的@Configuration类

@Configuration
@EnableMBeanExport
@ComponentScan({"my.packages"})
public class AppManager {

    public static void main(String[] args) {

        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(AppManager.class);
        context.refresh();


        try {
            TimeUnit.MINUTES.sleep(30);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    @Bean(name = "jmxExporter")
    public Exporter jmxExporter() {
        return new Exporter();
    }
}
这是一个类,我有一些属性,我想得到

public class MyClass implements Serializable {

    private int param1;
    private int param2;
    private int param3;

    public MyClass() {
        // calculate all params
    }

    public int getParam1() {
        return this.param1;
    }

    public int getParam2() {
        return this.param2;
    }

    public int getParam3() {
        return this.param3;
    }

}
这是导出其属性的类

import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;

@ManagedResource(objectName = "my.packages:type=JMX,name=Exporter")
public class Exporter {

    @ManagedAttribute
    public String getString() { //This works!
        return "Test string";
    }

    @ManagedAttribute
    public MyClass getMyClass() { //This does not work
        return new MyClass();
    }

}
我每次都需要创建MyClass对象,因为它有一些我无法单独导出的实时信息

在JConsole中,属性的值为“不可用”

我是JMX的新手,显然错过了一些东西


谢谢你的帮助

我通过返回CompositeData解决了这个问题

@ManagedAttribute
public CompositeData getMyClass() { 
    return createCompositeDataForMyClass();
}
我为此建立了一个复合的数据支持,它成功了

return new CompositeDataSupport(compositeType, itemNames, itemValues);
其中compositeType是compositeType,ItemName是字符串[],itemValues是对象[]

CompositeType可以用这样的东西构建

new CompositeType(typeName, typeDescription, itemNames, itemDescriptions, itemTypes);
typeName、typeDescription是字符串。ItemName和itemDescriptions是字符串[]。itemTypes是一个OpenType[]。SimpleType和CompositeType可用于构建OpenType

所有这些对象都必须使用

import javax.management.openmbean.*;