【问题标题】:Getting Instance of MBean service in JBOSS AS 7.1.1在 JBOSS AS 7.1.1 中获取 MBean 服务的实例
【发布时间】:2012-06-12 13:56:17
【问题描述】:

我正在尝试访问部署到 JBOSS AS 7.1.1 中的 MBean 服务。我的 MBean 服务也是一个队列监听器。我正在尝试获取此 MBean 服务的实例以将其注册为另一个 SAR 中的队列侦听器。

我试过这段代码,但它不起作用,

MBeanServer server  = ManagementFactory.getPlatformMBeanServer(); 
ObjectName mbeanObject =
        new ObjectName("myproject.service.Test:service=com.mytest.program");
TestServiceMBean handler = MBeanServerInvocationHandler.newProxyInstance(
      server, mbeanObject, TestServiceMBean.class, false);

我也试过了

TestServiceMBean testMBeanService =
       (TestServiceMBean)server.getAttribute(mbeanObject,  "Instance");

在这两种情况下,我都没有得到TestServiceMBean 的实例。谁能帮助我获得对 MBean 测试服务的访问权限。

<mbean code="com.mytest.program.TestService"
      name="myproject.service.Test:service=com.mytest.program">
</mbean>

代码如下:

public class TestService implements TestServiceMBean, MessageListener {

【问题讨论】:

  • 你好穆图;当您说您没有获得 TestServiceMBean 的实例时,究竟发生了什么?你能提供错误的堆栈跟踪吗(假设你得到一个)。
  • 当我尝试获取实例作为属性时,这就是我得到的 javax.management.AttributeNotFoundException: No such attribute: Instance at com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface. java:63) 在 com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:216)
  • 在使用代理实例的情况下,它没有给我“TestServiceMBean”实例,而是给我一个类名“$Proxy0”,当我调试它时,它返回了 MBeanServerInvocationHandler 类本身。我尝试将其类型转换为 TestServiceMBean。编译器没有抱怨,但我得到的对象不是 Queue Listener 服务对象。

标签: jmx jboss7.x mbeans


【解决方案1】:

穆图;

对于 AttributeNotFoundException:至少我们知道 MBean 实际已注册 :) 所以问题是,您的 TestService mbean 是否定义了一个名为 Instance 的属性并做到了有一个返回类型 TestServiceMBean 并且它实际上返回 this 吗?如果没有,那就是你需要做的。

测试服务:

public TestServiceMBean getInstance() {
    return this;
}

TestServiceMBean:

public TestServiceMBean getInstance();

对于调用处理程序,您不需要强制转换,但返回的类不会有您期望的名称。它之所以称为 Proxy0 是因为它是一个合成动态代理,但您应该会发现它确实实现了 TestServiceMBean 接口,并且您应该能够针对它调用操作。

【讨论】:

  • 嗨 Nicholas,是的,我可以获取实例。我还面临一个问题。我正在尝试访问另一个 MBean 服务中的服务类,这意味着我在另一个 SAR MBean 服务中调用 getInstance()。两个 SAR 都部署在同一个 JBOSS AS 服务器中。但是在部署过程中说 ClassNotFound Exception。这是可以理解的,因为此 MBean 服务不在其他 SAR 的可见性中。请告诉我,如何在同一个 JBOSS AS 中部署的另一个 SAR MBean 中访问此 MBean。
  • 嘿穆图;您最好的选择是将接口放入第三个“通用”jar 并将该 jar 放入 /server//lib 以便您的两个 sars 类从同一个类加载器加载它,或者在同一个 EAR 中部署两个 sar,在这种情况下同样适用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-28
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多