1

我有一个消息驱动的 bean,只要消息到达队列,它就会在集群节点上实例化。

我希望能够监视和取消在集群范围内的消息驱动 bean 中运行的进程,这有点问题。

怎样才能做到这一点?我能否以某种方式获取当前从每个集群节点处理的 MDB 列表并在必要时终止它们的进程?我可以使用某种单例来保存所有集群节点上所有 MDB 的引用吗(我不这么认为:()

是否有一些我可以使用的注册表服务,或者是否可以编写类似的东西?

可能最后的手段是通过数据库驱动监视和取消过程,我不喜欢它,因为它需要轮询 MDB 中的数据库以检测取消,否则这将是一个设置的简单标志。

服务器环境是BEA Weblogic 10.02,我用的是EJB 3.0!

4

1 回答 1

1

我对 MDB 没有太多经验,但一个解决方案可能是拥有一个集群单例 bean,每个 MDB 链接到该 bean 以注册一个 id。然后它可以使用它注册的 id 来检查同一个 bean 以检测取消。本质上是您基于数据库的解决方案,但没有对数据库进行轮询。

我不认为 MDB 应该运行很长时间,并且可能应该委托给更易于管理的线程。

http://my.safaribooksonline.com/book/web-development/websphere/0738426091/message-driven-beans/ch06lev1sec7

以上讨论了 EJB2 中的 MDB(无法在线找到 EJB3 参考)。相关部分:

"不要用于真正的长时间运行的事务——尽管我们指出当请求运行时间过长而 MDB 客户端无法等待时,异步请求/回复可能是合适的,但我们并不是说 MDB 本身应该用于长时间运行—— "

希望这可以帮助。

于 2012-10-26T14:18:59.327 回答