将 MBean 从 JBoss 4.x 移植到 JBoss 7

2024-03-20

我们目前正在将一些项目从 JBoss 4.x 移植到 JBoss 7。 到目前为止,一切似乎都工作正常,除了 MBean 之外,我们通常使用 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";
  }
}

我们使用了@Service注解来定义对象名称和 xmbean 描述符,JBoss 将自动注册这些 mbean。

显然,在 JBoss 7 中@Service注释不再存在,因此需要另一种方法。

到目前为止,我设法向平台 mbean 服务器手动注册 MBean,但我更希望 JBoss 自动执行此操作。此外,到目前为止我还没有设法提供方法/参数的描述(尽管这些是一个很好的功能)。

为了清楚起见,我将重复这个问题:

如何在 JBoss 7 (Java EE 6) 中定义提供以下功能的 MBean?

  • 自动部署
  • 访问 EJB
  • 可通过 JConsole 或 JMX-Console 访问(我目前正在使用 Dimitris Andreadis 的端口)
  • 提供方法/参数的描述

Update

这是我到目前为止得到的:

首先,我找到了这个投影,它使用 CDI 来包装相应注释的任何 bean 的注入目标,并在postConstruct()方法:http://code.google.com/p/jmx-annotations/ http://code.google.com/p/jmx-annotations/。此外,还会扫描找到的 MBean 中的类/属性/方法/参数注释,这些注释提供带注释的属性的描述。

但是,那postConstruct()似乎没有为 EJB 调用该方法(我认为这是为了不与 EJB 容器发生冲突)。因此,MBean 现在不应该是 EJB,而应该是普通的 CDI bean。

然而,它的缺点是 MBean 不会自动实例化。为了克服这个问题,有一个单例 bean,在启动时循环遍历BeanManager并为找到的每个 MBean 创建一个实例。因为 MBean 仍然有其注入目标,所以它postConstruct()方法将不会被调用,并且 bean 将在 MBean 服务器中注册。

以下是启动过程的粗略概述:

  • 自定义 CDI 扩展扫描每个 CDI bean 中的自定义 @MBean 注释
  • 对于每个合格的 MBean,注入目标都被包装
  • 将启动一个单例 bean,该 bean 在其 @PostConstruct 方法中将创建 MBean 的实例
  • the postConstruct()将调用 MBean 注入目标的方法,从而在 MBean 服务器中注册 MBean

此方法的一个缺点是执行 MBean 方法时缺少事务上下文(任何 EJB 调用都将在事务上下文中运行)。但是,如果需要,可以使用 CDI 拦截器来修复此问题,该拦截器将提供事务上下文。 Seam 项目似乎为此提供了合适的拦截器。

我仍然不确定这是否是一个理智且稳定的方法,因此非常欢迎任何建设性的评论、提示等。


带有@Startup 的单例EJB?http://www.adam-bien.com/roller/abien/entry/singleton_the_simplest_possible_jmx http://www.adam-bien.com/roller/abien/entry/singleton_the_simplest_possible_jmx

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 MBean 从 JBoss 4.x 移植到 JBoss 7 的相关文章

随机推荐