Mdb 与 EJB 3.1 异步方法

Posted

技术标签:

【中文标题】Mdb 与 EJB 3.1 异步方法【英文标题】:Mdb vs EJB 3.1 async method 【发布时间】:2015-01-17 10:41:00 【问题描述】:

我什么时候应该选择 ejb 异步方法而不是带有 java 消息服务的 MDB 以触发异步长时间任务?

【问题讨论】:

【参考方案1】:

@Asynchronous 仅适用于外部事务需要并行启动多个工作,然后全部等待它们(或在后台启动单个工作,在前台做一些工作,然后等待)关于背景工作)。 @Asynchronous 不适合事务性“即发即弃”,因为容器可能在异步工作开始执行之前崩溃(在我看来,void EJB 异步方法很少有用,可能用于更新内存缓存之类的事情) .如果您想保证工作将异步发生而不等待它完成,那么您应该向 MDB 发送消息或安排 EJB 计时器。

【讨论】:

容器如何“崩溃”? JVM进程被杀,机器突然断电等【参考方案2】:

@MessageDriven (MDB) 是 JMS API 的一部分。 JMS 在重试失败的消息消费、事务支持以及控制消息队列方面具有各种附加功能。

@Asynchronous 注释未引入 unti java-ee-6 (ejb 3.1)。

假设用例是 java-ee-6 或以上容器中的简单异步调用,请使用 @Asynchronous (arun guptas blog on this)

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

【讨论】:

以上是关于Mdb 与 EJB 3.1 异步方法的主要内容,如果未能解决你的问题,请参考以下文章

未调用 EJB 3.1 单例会话 Bean @PreDestroy 方法

Jboss7.1 MDB - 本地 JNDI 参考与全球 JNDI 参考

在Websphere Application Server上的应用程序启动时未调用MDB的ejbCreate()方法

是否有将上下文数据传递给@Asynchronous ejb调用的干净方法?

MDB

如何在 JBoss 5 中订购 EJB 和 JMS 队列配置的部署?