【问题标题】:JMS sync request-reply from stateless EJB来自无状态 EJB 的 JMS 同步请求-回复
【发布时间】:2012-08-02 00:02:31
【问题描述】:

我有一个基于 JMS 队列的系统,它使整个系统能够以异步方式工作。

现在,对于一些周期性任务,我需要以同步的方式执行一些非耗时的任务,这样我就可以立即对结果进行处理,而无需使用数据库来存储请求并将其与结果配对(与异步一样)操作)。

代码本身不是问题,而是 EJB 运行容器事务的事实,这意味着 producer.send() 代码和 consumer.receive() 不会顺序执行(即没有发送消息,所以没什么在 receive() 下面几行中接收)。

如何在无状态 EJB3 环境中同步发送和接收 JMS 消息?

感谢您的回答,

博佐

【问题讨论】:

    标签: jakarta-ee ejb-3.0 jms


    【解决方案1】:

    您可以将 bean 切换为使用 Bean-Managed Transactions。

    @MessageDriven
    @TransactionManagement(BEAN)
    public class MyMDB implements MessageListener {
    
      // this is optional
      @Resource
      private UserTransaction ut;
    
      //...
    
    }
    

    【讨论】:

      【解决方案2】:

      您应该注意 EJB 中影响通过 JMS 发送请求/回复消息的事务上下文。

      “解决方案是暂停事务,创建新事务,发送请求,提交新事务,取消暂停第一个事务,然后继续。”

      在下面的 URL 中,您将找到问题陈述和解决方案。 顺便说一句,这适用于容器管理和 bean 管理的事务..

      http://blogs.oracle.com/fkieviet/entry/request_reply_from_an_ejb

      【讨论】:

        猜你喜欢
        • 2018-02-24
        • 2017-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多