问题
I am writing some test cases for the JMX interface in our product. I can access attributes from standard MBeans (following sun tutorial). However, I don't seem to be able to access dynamic MBeans. The attributes are fully (readable/writable) from 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 should be a Boolean, but it is null. No exceptions are thrown.
I have also tried a few other permutations on the attribute name, but I believe it should be the simple name as I've defined it in the implementation class.
回答1:
I've found that you can get to dynamic MBean attributes directly through the MBeanServerConnection object:
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");
回答2:
I should have reloaded the page before answering. I basically posted what the original submitter had discovered in the meantime. JMX.newMBeanProxy is useful if you have a Java interface describing the management interface of your MBean (the Standard MBean pattern), but if your MBean is dynamic then you don't need or want a proxy.
来源:https://stackoverflow.com/questions/1950016/how-to-access-dynamicmbeans-from-a-jmx-client