消息驱动的bean适用于此要求?

时间:2012-10-23 05:56:24

标签: java-ee ejb ejb-3.0 message-driven-bean

基本上我的Web应用程序中存在长时间运行任务的问题。目前,此任务由EJB执行,该EJB在执行任务时阻塞(任务是外部程序,EJB只是等待结果)。

现在根据这个post,我想到了一个消息驱动Bean和一个JMS队列。

我的问题:这种方法有哪些优点?如果我将EJB的调用方法注释为@Asychnronous,那么我是否具有与MDB相同的功能?待处理作业的功能是否不会丢失JMS / MDB方法的唯一优势?在资源管理方面,让EJB等待任务结果还是MDB更好?

1 个答案:

答案 0 :(得分:1)

我已经在这个模式中使用了JMS,原因是在EJB 3.1之前,根本不可能对Session Beans进行异步调用。这就是为什么你可能会在现有的应用程序中经常找到这样的代码。

在EJB上使用异步调用有利于更容易设置(使用JMS并不复杂,但您需要创建资源等)。如果您在可用性和可伸缩性是重要主题的环境中运行,那么使用JMS有很多好处:

    如果您考虑应用服务器崩溃,
  • 持久保存JMS消息有时会很有趣。
  • 更重要的是,在我看来,使用JMS可以在JMS队列后面添加几个“处理”节点,如果处理时间长且负载增加,可以轻松增加容量(请注意,这也可以是如果您使用远程会话bean,则由某些应用服务器实现,但事情并非如此简单。)