Java JMXBean条目未显示
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
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和接口中。