JMXBean条目没有显示出来(JMXBean entries are not showing up

2019-10-18 02:09发布

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价值

Answer 1:

这里的问题是,正在注册的bean的实例是不一样的,你是在设置值的实例。 所以,你需要协调绕过已注册(可选的实施作为一个单身)相同的实例或者你可以简单地更新使用JMX操作的MBean。 执行一个JMX操作的复杂性,也可以通过创建一个代理调用程序简化。 我建议这种方法:

  • NumOfRequests字段更改到的AtomicInteger ,因为你想在MBean线程安全的[ER]。 即。

  • 您的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的incrementNumOfRequests操作。

给它一个旋转。



文章来源: JMXBean entries are not showing up