【问题标题】:How to access dynamicmbeans from a jmx client如何从 jmx 客户端访问 dynamicmbeans
【发布时间】:2009-12-23 00:14:13
【问题描述】:

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

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

【问题讨论】:

    标签: java jmx


    【解决方案1】:

    我发现您可以直接通过 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】:

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

      【讨论】:

      • 在编写原始代码时,我错过了模式并专注于接口。当然,如果教程或文档能提供更多关于界面使用的指导,那就太好了:-)
      • 即使对于动态 MBean,代理似乎仍然有用。假设有一个单独的接口,您想要访问的部分/全部属性或方法可能定义在 MBean 的接口上。在这种情况下,您将接口传递给 JMX.newMBeanProxy 并返回一个实现它的实例。然后您可以在 MBean 上进行强类型调用,例如getAttributeNameAsItAppearsInJConsole() 或 myMethod()。请参阅 Creating a Custom JMX Client 上的 JMX 教程页面。
      猜你喜欢
      • 1970-01-01
      • 2018-04-02
      • 2011-06-14
      • 1970-01-01
      • 2014-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多