【问题标题】:Java EE: Track progress in MessageDrivenBeans on clusterJava EE:跟踪集群上 MessageDrivenBeans 的进度
【发布时间】:2012-10-26 22:18:59
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: jakarta-ee jms cluster-computing message-driven-bean


    【解决方案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 本身应该用于长时间运行的事务。这可能最好留给批处理周期,或者其他一些将工作分解为较小的可执行组件的活动。MDB 可以是协调整个活动的启动点长时间运行的事务。”

    希望这会有所帮助。

    【讨论】:

    • 我真的很想委托给规范但是:ejb 规范明确不支持创建自己的线程。容器行为是未定义的。我真的很想坚持规范。至于单例服务:是的,这是可行的,但是您与使用的任何容器(在我的情况下为 weblogic)都有紧密的耦合。
    • stackoverflow.com/questions/10276028/… 可能有助于根据规范生成线程。如果您使用 Java EE 6,这当然会容易得多。也就是说,您可以将 Singleton bean 用于服务,以便遵守规范。
    猜你喜欢
    • 2010-09-29
    • 1970-01-01
    • 2012-01-01
    • 2013-05-19
    • 1970-01-01
    • 2013-03-22
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    相关资源
    最近更新 更多