基本上我的Web应用程序中存在长时间运行任务的问题。目前,此任务由EJB执行,该EJB在执行任务时阻塞(任务是外部程序,EJB只是等待结果)。
现在根据这个post,我想到了一个消息驱动Bean和一个JMS队列。
我的问题:这种方法有哪些优点?如果我将EJB的调用方法注释为@Asychnronous
,那么我是否具有与MDB相同的功能?待处理作业的功能是否不会丢失JMS / MDB方法的唯一优势?在资源管理方面,让EJB等待任务结果还是MDB更好?
答案 0 :(得分:1)
我已经在这个模式中使用了JMS,原因是在EJB 3.1之前,根本不可能对Session Beans进行异步调用。这就是为什么你可能会在现有的应用程序中经常找到这样的代码。
在EJB上使用异步调用有利于更容易设置(使用JMS并不复杂,但您需要创建资源等)。如果您在可用性和可伸缩性是重要主题的环境中运行,那么使用JMS有很多好处: