代码之家  ›  专栏  ›  技术社区  ›  Jim Rush

如何从JMX客户机访问DynamicMBeans

  •  1
  • Jim Rush  · 技术社区  · 14 年前

    我正在为我们的产品中的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应该是一个布尔值,但它是空的。不会引发异常。

    我还尝试过对属性名进行其他排列,但我相信它应该是简单的名称,正如我在实现类中定义的那样。

    2 回复  |  直到 12 年前
        1
  •  3
  •   Jim Rush    14 年前

    我发现您可以直接通过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");
    
        2
  •  1
  •   Eamonn McManus    14 年前

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