Jakarta ee JavaEE:跟踪集群上MessageDrivenBeans的进度

Jakarta ee JavaEE:跟踪集群上MessageDrivenBeans的进度,jakarta-ee,jms,cluster-computing,message-driven-bean,Jakarta Ee,Jms,Cluster Computing,Message Driven Bean,我有一个消息驱动bean,每当消息到达队列时,它就会在集群节点上实例化 我希望能够监视和取消消息驱动bean集群范围内运行的进程,这有点问题 如何才能做到这一点?我能否以某种方式从每个集群节点获取当前正在处理的MDB列表,并在必要时终止它们的进程?我可以使用某种单例来保存所有集群节点上所有MDB的引用吗(我不这么认为:() 是否有一些注册服务我可以使用或是有可能写这样的东西 最后一种方法可能是通过数据库驱动监视和取消过程,我不喜欢这种方法,因为它需要在MDB中轮询数据库来检测取消,否则将是一个简

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

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

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

是否有一些注册服务我可以使用或是有可能写这样的东西

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


服务器环境是BEA Weblogic 10.02,我使用的是EJB3.0!

我对MDB没有太多经验,但一个解决方案可能是拥有一个集群单例bean,每个MDB链接到该集群单例bean以注册一个id。然后,它可以使用它注册的id检查同一个bean以检测取消但没有DB的轮询

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

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

"不要用于真正的长时间运行的事务-尽管我们指出,当请求运行时间过长,MDB客户端无法等待时,异步请求/应答可能是合适的,但我们并不是说MDB本身应该用于长时间运行的事务。这最好留给批处理周期或其他需要将工作分解为更小的可执行组件。MDB可以作为协调整个长期运行事务的活动的启动点。”


希望这能有所帮助。

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

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

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

"不要用于真正的长时间运行的事务-尽管我们指出,当请求运行时间过长,MDB客户端无法等待时,异步请求/应答可能是合适的,但我们并不是说MDB本身应该用于长时间运行的事务。这最好留给批处理周期或其他需要将工作分解为更小的可执行组件。MDB可以作为协调整个长期运行事务的活动的启动点。”


希望这能有所帮助。

我真的很想委托给规范,但是:ejb规范不明确支持创建自己的线程。容器行为当时还没有定义。我真的希望遵守规范。至于单例服务:是的,这是可行的,但是您与您使用的任何容器都有紧密的耦合(在我的案例中是weblogic)。可能有助于根据规范生成线程。如果您使用Java EE 6,当然会容易得多。也就是说,您可以使用Singleton bean进行服务,以便遵守规范。我确实希望委托给规范,但是:ejb规范不显式支持创建您自己的线程。容器行为是未定义的。我真的希望遵守规范。至于单例服务:是的,它是可行的,但是您与您使用的任何容器都有一个紧密的耦合(在我的例子中是weblogic)。可能有助于根据规范生成线程。如果您使用Java EE 6,当然会容易得多。也就是说,您可以使用Singleton bean进行服务,以便遵守规范。