Mdb与EJB 3.1异步方法的比较

6

何时应该选择使用 EJB 异步方法而不是带有 Java 消息服务的 MDB 来触发异步长时间任务?

2个回答

6

@Asynchronous只有在外部事务需要并行启动多个工作并等待它们全部完成(或者在后台启动单个工作,在前台执行一些工作,然后等待后台工作)时才适用。 如果容器在异步工作开始执行之前崩溃,则@Asynchronous不适用于事务性的“点火并忘记”,(在我看来,void EJB异步方法很少有用,也许仅用于更新内存缓存之类的内容)。如果您想要保证工作会异步完成而无需等待其完成,则应向MDB发送消息或调度EJB计时器。


容器可能会如何“崩溃”? - Dherik
JVM进程被杀死,机器突然断电等。 - Brett Kail

1

@MessageDriven (MDBs) 是 JMS API 的一部分。当消息消费失败时,JMS 具有各种额外的重试功能、事务支持,并且还允许您控制消息队列。

@Asynchronous 注释直到 java-ee-6 (ejb 3.1) 才被引入。

假设使用情况是在 java-ee-6 容器或以上进行简单的异步调用,请使用 @Asynchronous(arun guptas 博客

如果您需要更多内容,则 JMS 可能是一个选项。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接