2012-06-12 55 views
1

我试图访问部署到JBoss作为一个7.1.1的MBean服务。我的MBean服务也是一个队列监听器。我试图让这个MBean服务的一个实例在另一个SAR中注册为队列监听器。获取的MBean服务的实例在JBoss AS中7.1.1

我尝试了这种代码,但它不能正常工作,

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 Test服务的访问权限。

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

下面的代码:

public class TestService implements TestServiceMBean, MessageListener { 
+0

您好MUTHU; 当你说你没有得到的TestServiceMBean的一个实例,到底发生了什么?你能提供错误的堆栈跟踪(假设你得到一个)。 – Nicholas

+0

当我尝试获取实例作为属性时,这是我得到的javax.management.AttributeNotFoundException:没有这样的属性:实例 at com.sun.jmx.mbeanserver.PerInterface.getAttribute(PerInterface.java:63) at com.sun.jmx.mbeanserver.MBeanSupport.getAttribute(MBeanSupport.java:216) – Muthu

+0

在使用代理服务器实例的情况下,它不会让我的“TestServiceMBean”比如,它是让我一个类名“$ Proxy0”,当我调试它将返回MBeanServerInvocationHandler类itslef。我试图将其转换为TestServiceMBean。编译器没有抱怨,但我得到的objct不是Queue Listener服务对象。 – Muthu

回答

0

MUTHU;

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

TestService的:

public TestServiceMBean getInstance() { 
    return this; 
} 

TestServiceMBean:

public TestServiceMBean getInstance(); 

对于调用处理程序,你不应该需要转换,但返回的类不会有名字你的期望。这就是所谓的Proxy0,因为它是一种合成的动态代理,但你会发现,它确实实现了TestServiceMBean界面,你应该能够调用操作反对。

+0

嗨尼古拉斯,是的,我能够得到这个实例。我还面临另一个问题。我试图访问另一个MBean服务中的服务类,这意味着我需要在另一个SAR MBean服务中调用getInstance()。两个SAR都部署在同一个JBOSS AS服务器中。但是在部署期间说ClassNotFound异常。这是可以理解的,因为此MBean服务不在其他SAR的可见性范围内。请您告诉我,如何在部署在同一个JBOSS AS中的另一个SAR MBean中访问这个MBean。 – Muthu

+0

嘿Muthu;您最好的选择是将界面放在第三个“常用”jar中,并将该jar放入/server//lib中,以便您的sars类可以从同一个类加载器加载它,或者将两个sars都部署在同一个EAR中在这种情况下同样适用。 – Nicholas

相关问题