如何在JMX中返回用户定义类?

时间:2015-12-04 08:38:26

标签: jmx

我是JMX的新手,现在我希望用JMX来监控我的项目。有没有办法通过MBeans / MXBean返回用户定义的类?我知道OpentType可以帮助但不知道如何使用它。我还浏览了Composite和Tabular数据类型,但它可能对我不起作用,因为我需要将每个类转换为相应的数据类型。 请提供帮助。 提前谢谢!!

2 个答案:

答案 0 :(得分:0)

您必须创建一个接口SomethingMBean和一个实现该接口的类。

public interface HelloMBean { 

    public void sayHello(); 
    public int add(int x, int y); 

    public String getName(); 

    public int getCacheSize(); 
    public void setCacheSize(int size); 
} 

public class Hello ... 
    implements HelloMBean { 
    public void sayHello() { 
        System.out.println("hello, world"); 
    } 

    public int add(int x, int y) { 
        return x + y; 
    } 

    public String getName() { 
        return this.name; 
    }  

    public int getCacheSize() { 
        return this.cacheSize; 
    } 

    public synchronized void setCacheSize(int size) {
        ...

        this.cacheSize = size; 
        System.out.println("Cache size now " + this.cacheSize); 
    } 
    ...

    private final String name = "Reginald"; 
    private int cacheSize = DEFAULT_CACHE_SIZE; 
    private static final int 
        DEFAULT_CACHE_SIZE = 200; 
}

然后,你必须注册你的MBean ......

MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); 
ObjectName name = new ObjectName("com.example:type=Hello"); 
Hello mbean = new Hello(); 
mbs.registerMBean(mbean, name); 

查看Java Tutorial

答案 1 :(得分:0)

如果您的项目使用的是Spring,那么只需使用注释就可以很容易地将任何用户定义的类公开给JMX:

  • @ManagedResource - 将类公开给JMX
  • @ManagedAttribute - 将ManagedResource类的任何字段公开为属性
  • @ManagedOperation - 公开ManagedResource类的任何方法 作为一项行动

查看official Spring documentation,其中也包含很多说明性示例。