如何从jmx客户端访问dynamicmbeans

时间:2009-12-23 00:14:14

标签: java jmx

我正在为我们的产品中的JMX接口编写一些测试用例。我可以从标准MBean访问属性(在sun tutorial之后)。但是,我似乎无法访问动态MBean。这些属性完全(可读/可写)来自JConsole。

JMXConnector jmxc = getJMXConnector();  // Takes care of our connection
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

ObjectName mbeanName = new ObjectName("com.xyz.prodname:type=LogManager");

// Up to this point, the logic is the same as the working logic.  In our working logic,
// DynamicMBean is replace with our MBean interface class.
DynamicMBean mbean = (DynamicMBean)JMX.newMBeanProxy(mbsc, mbeanName, DynamicMBean.class);
Object o = mbean.getAttribute("AttributeNameAsItAppearsInJConsole"); 

o应该是布尔值,但它是null。没有例外被抛出。

我还尝试了一些关于属性名称的其他排列,但我相信它应该是简单的名称,因为我已经在实现类中定义了它。

2 个答案:

答案 0 :(得分:3)

我发现您可以直接通过MBeanServerConnection对象获取动态MBean属性:

JMXConnector jmxc = getJMXConnector();  // Takes care of our connection
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();

ObjectName mbeanName = new ObjectName("com.xyz.prodname:type=LogManager");

// This change demonstrates what must be done
Object result = mbsc.getAttribute(mbeanName, "AttributeNameAsItAppearsInJConsole");

答案 1 :(得分:1)

我应该在回答之前重新加载页面。我基本上发布了原始提交者在此期间发现的内容。如果您有一个描述MBean管理接口的Java接口(标准MBean模式),JMX.newMBeanProxy非常有用,但如果您的MBean是动态的,那么您不需要或不需要代理。