Java JMXBean条目未显示

Java JMXBean条目未显示,java,performance,jmx,Java,Performance,Jmx,JMXBean的实施 PerformanceMetadata jmxBean = new PerformanceMetadata(); responseDocument = (Document) serviceOperation.invoke(serviceComponent,RequestDocument); jmxBean.setNumOfRequests(1); private final AtomicInteger numOfReques

JMXBean的实施

PerformanceMetadata jmxBean = new PerformanceMetadata();                        
responseDocument = (Document) serviceOperation.invoke(serviceComponent,RequestDocument);
jmxBean.setNumOfRequests(1);
private final AtomicInteger numOfRequests = new AtomicInteger(0);
public int getNumOfRequests() {
    return numOfRequests.get();
}
public void incrementNumOfRequests(int requests) {
   numOfRequests.addAndGet(requests);
}
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操作的复杂性。我建议采取这种做法:

  • NumOfRequests字段更改为,因为您希望使MBean线程安全[er]。即

  • MBean和接口应该有一个属性访问器(getter)和一个incrementor

接口

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

PerformanceMetadata jmxBean = new PerformanceMetadata();                        
responseDocument = (Document) serviceOperation.invoke(serviceComponent,RequestDocument);
jmxBean.setNumOfRequests(1);
private final AtomicInteger numOfRequests = new AtomicInteger(0);
public int getNumOfRequests() {
    return numOfRequests.get();
}
public void incrementNumOfRequests(int requests) {
   numOfRequests.addAndGet(requests);
}
现在您可以注册bean实例一次,并通过动态生成的JMX代理更新它。这是通过使用一个

现在,当您调用
proxy.incrementNumOfRequests(14)
时,它在调用bean的incrementNumOfRequests操作


让它旋转一圈。

NumberOfRequest是属性之一。我有几个更像startTime、endTime、requestType等。如何处理它们?我可以直接通过代理更新吗?当然可以。只需将字段和getter/setter添加到mbean和接口中。