Asynchronous Mdb与EJB3.1异步方法

Asynchronous Mdb与EJB3.1异步方法,asynchronous,ejb,jms,message-driven-bean,Asynchronous,Ejb,Jms,Message Driven Bean,什么时候应该选择ejb异步方法而不是使用java消息服务的MDB来启动异步长时间任务?@MessageDriven(MDB)是JMS API的一部分。JMS有各种各样的额外功能,在失败的消息消费、事务支持和允许您控制消息队列时重试 @Asynchronous注释是在java-ee-6(EJB3.1)之前引入的 假设用例是java-ee-6或更高版本容器中的简单异步调用,请使用@asynchronous() 如果您需要更多,JMS可能是一个选项@Asynchronous仅适用于外部事务需要并行启动

什么时候应该选择ejb异步方法而不是使用java消息服务的MDB来启动异步长时间任务?

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


@Asynchronous
注释是在java-ee-6(EJB3.1)之前引入的

假设用例是java-ee-6或更高版本容器中的简单异步调用,请使用@asynchronous()


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

@Asynchronous
仅适用于外部事务需要并行启动多个工作,然后等待所有工作(或者在后台启动单个工作,在前台做一些工作,然后等待后台工作)
@Asynchronous
不适用于事务性“启动并忘记”,因为在异步工作开始执行之前,容器可能会崩溃(在我看来,void EJB异步方法很少有用,可能用于更新内存缓存之类的事情)。如果要保证工作在不等待完成的情况下异步进行,则应向MDB发送消息或安排EJB计时器。

容器如何“崩溃”?JVM进程被终止,机器突然断电等。