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

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

【问题讨论】:

    标签: asynchronous ejb jms message-driven-bean


    【解决方案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 可能是一个选择

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-02
      • 2014-07-25
      相关资源
      最近更新 更多