JMXBean的实现

PerformanceMetadata jmxBean = new PerformanceMetadata();
responseDocument = (Document) serviceOperation.invoke(serviceComponent,RequestDocument);
jmxBean.setNumOfRequests(1);


JMXBean类:

public class PerformanceMetadata implements PerformanceMetadataMBean{
    private int numOfRequests;
        public int getNumOfRequests() {
        return numOfRequests;
    }

    public void setNumOfRequests(int numOfRequests) {
        this.numOfRequests = numOfRequests;
    }


注册JMXBean的类:我在启动服务器时调用该类。

public class JMXBeans {
    public void registerJMXBeans()
    {
        MBeanServer mbs = null;
        PerformanceMetadata metadataObj = null;
        ObjectName name;
        try
        {
            metadataObj = new PerformanceMetadata();
            mbs = ManagementFactory.getPlatformMBeanServer();
            name = new ObjectName("test.performace:type=PerformanceMetadataMBean");
            mbs.registerMBean(metadataObj, name);
        }


但是我看不到JMXBean.NumberOfRequests的任何值

最佳答案

这里的问题是,正在注册的Bean实例与您要为其设置值的实例不同。因此,您需要协调传递已注册的同一实例(可以选择实现为单例),也可以使用JMX操作简单地更新MBean。创建代理调用程序也可以简化执行JMX操作的复杂性。我建议这种方法:


因为您想使MBean线程安全[er],所以将NumOfRequests字段更改为AtomicInteger。即。
您的MBean和接口应具有属性访问器(获取器)和增量器。


接口

public int getNumOfRequests();
public void incrementNumOfRequests(int requests);


实作

private final AtomicInteger numOfRequests = new AtomicInteger(0);
public int getNumOfRequests() {
    return numOfRequests.get();
}
public void incrementNumOfRequests(int requests) {
   numOfRequests.addAndGet(requests);
}


现在,您可以注册一次bean实例,并通过可即时生成的JMX代理对其进行更新。这是使用MBeanServerInvocationHandler完成的。

PerformanceMetadataMBean proxy = (PerformanceMetadataMBean)MBeanServerInvocationHandler.newProxyInstance(ManagementFactory.getPlatformMBeanServer(),
                                                   new ObjectName("test.performace:type=PerformanceMetadataMBean"),
                                                   PerformanceMetadataMBean.class,
                                                   false);


现在,当您调用proxy.incrementNumOfRequests(14)时,它实际上是在调用Bean的crementNumOfRequests操作。

旋转一下。

关于java - JMXBean条目未显示,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16215527/

10-11 05:48