以编程方式访问Tomcat中的内置MBean

基本上,我试图在此处修改本教程中的代码:http

:

//docs.oracle.com/javase/tutorial/jmx/remote/custom.html,

以便可以从此处描述的tomcat访问MBean:http

://wiki.apache.org/tomcat/FAQ/监控

从代码访问JMX Bean java.lang:type = Memory没问题,因为它的接口是在java.lang中定义的。这是该代码的示例:

    ObjectName mbeanName = new ObjectName("java.lang:type=Memory");

MemoryMXBean mxbeanProxy2 = JMX.newMXBeanProxy(mbsc, mbeanName, MemoryMXBean.class, true);

MemoryUsage memUsage = mxbeanProxy2.getHeapMemoryUsage();

echo("\nMemory Utilization: " + (memUsage.getUsed()/(double)memUsage.getMax()) * 100 + "%");

此处的mbsc是MBeanServerConnection的实例。问题是,当我尝试以类似的方式访问tomcat中的内置MBean时,遇到了找不到为任何tomcat

MBean定义的任何接口的问题。我可以从JConsole监视MBean,但是为此,我需要能够从代码执行此操作。我在某个地方发现它也可以通过以下方式完成:

ObjectName mbeanName2 = new ObjectName("Catalina:type=ThreadPool,name=\"http-apr-8080\"");

Object value = mbsc.getAttribute(mbeanName, "name");

但这给了我这个异常:线程“

main”中的异常javax.management.AttributeNotFoundException:没有这样的属性:com.sun.jmx.mbeanserver上的名称……

我觉得我缺少一些基本的东西。但是,关于此的信息似乎非常有限,谷歌并没有太大帮助。

回答:

我认为您的第二段代码中有一个错字。您为Catalina ThreadPool创建了一个名为 的新ObjectName

,但是当您尝试检索属性“ name”时,您仍在使用 。

因此应该是:

ObjectName mbeanName2 = new ObjectName("Catalina:type=ThreadPool,name=\"http-apr-8080\"");

Object value = mbsc.getAttribute(mbeanName2, "name");

除此之外,您的代码应该可以正常工作。

以上是 以编程方式访问Tomcat中的内置MBean 的全部内容, 来源链接: utcz.com/qa/428571.html

回到顶部