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()方法