gpt4 book ai didi

java - JMXBean 条目未显示

转载 作者:行者123 更新时间:2023-11-30 04:24:48 24 4
gpt4 key购买 nike

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 操作的复杂性。我建议采用这种方法:

  • 将您的 NumOfRequests 字段更改为 AtomicInteger因为您想让 MBean 成为线程安全的[呃]。即。

  • 您的 MBean 和接口(interface)应该有一个属性访问器(getter)和一个增量器。

界面

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 操作。

试一试。

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

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com