tags:

views:

157

answers:

2

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.

A: 

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");
Jim Rush
+1  A: 

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.

Eamonn McManus
When I was was writing the original code, I missed the pattern and focused on the interfaces. Of course, it would have been nice if the tutorial or documentation would have provided a bit more guidance on the usage of the interface :-)
Jim Rush