Tho*_*mas 13 java jmx mbeans jboss7.x
我们目前正在将一些项目从JBoss 4.x移植到JBoss 7.到目前为止,除了我们通常用于提供简单管理操作的MBean之外,一切似乎都运行正常.
我一直在寻找相当长的一段时间,但要么我无法提出正确的搜索术语,要么我缺少一些知识来弥补JBoss 4.x和JBoss 7中的MBean定义之间的差距.
因此,希望有人可以提供我可能缺少的内容或我必须阅读的内容(可能是一些文档,示例等)的提示
在Jboss 4.x中,我们的MBean通常如下所示:
@Service( objectName = "Domain:Name=SomeMBean",
xmbean="resource:<path-to-xmbean.xml>")
class SomeMBean
{
@EJB
private SomeService someService;
public String someOperation()
{
someService.doSomething();
return "success";
}
}
Run Code Online (Sandbox Code Playgroud)
我们使用@Service
注释来定义对象名称和xmbean描述符,JBoss会自动注册那些mbeans.
显然,在JBoss 7中,@Service
注释不再存在,因此需要另一种方法.
到目前为止,我设法用平台mbean服务器手动注册MBean,但我更喜欢JBoss自动执行此操作.另外,到目前为止,我还没有设法提供方法/参数的描述(尽管这些功能更加出色).
为了清楚起见,我会重复这个问题:
如何在JBoss 7(Java EE 6)中定义提供以下功能的MBean?
更新
这是我到目前为止所得到的:
首先,我发现了这个投影,它使用CDI来包装相应注释的任何bean的注入目标,并在postConstruct()
方法中进行JMX注册:http://code.google.com/p/jmx-annotations/.此外,扫描找到的MBean以获取类/属性/方法/参数注释,这些注释提供注释属性的描述.
但是,postConstruct()
似乎没有为EJB调用该方法(我假设这是为了不与EJB容器冲突).因此MBean现在不应该是EJB而是普通的CDI bean.
因此,具有MBean不会自动实例化的缺点.为了解决这个问题,有一个单例bean在启动时循环遍历所有bean,BeanManager
并创建每个找到的MBean的实例.由于MBean仍然具有其注入目标,postConstruct()
因此不会调用其方法,并且将在MBean服务器中注册该bean.
以下是启动过程的概述:
postConstruct()
将调用MBean的注入目标的方法,因此MBean在MBean服务器中注册此方法的一个缺点是在执行MBean方法时缺少事务上下文(任何EJB调用都将在事务上下文中运行).但是,如果需要,可以使用CDI拦截器修复这个问题,该拦截器将提供事务上下文.Seam项目似乎有适当的拦截器.
我仍然不确定这是否是一种理智和稳定的方法,因此任何建设性的评论,提示等都非常受欢迎.
归档时间: |
|
查看次数: |
6574 次 |
最近记录: |