从应用程序范围生成“Event Scoped”bean

时间:2013-03-15 22:59:59

标签: java java-ee jpa cdi ejb-3.1

我是CDI和EJB的新手,我刚刚创建了一个jboss Web应用程序。此外,我还希望这个应用程序处理rabbitmq消息。在处理这些时,我想做一些持久性工作,但是,因为我一直在监听来自使用@Startup注释启动的应用程序范围bean的rabbitmq消息,所以我无法在此内部提交任何事务范围的种类,也就是说,当我离开应用程序范围时,我将从此范围实例化的每个bean都将是应用程序作用域。当我尝试执行em.getTransaction()和em.commit()时,代码爆炸抱怨我无法在JTA事务下调用getTransaction(),当我使用User事务时,每个操作似乎都被放到同一个事务上,直到它最终被回滚,或者有错误抱怨正在进行的交易......

1 个答案:

答案 0 :(得分:1)

CDI bean不像EJB那样支持开箱即用的事务。所以你可以选择:

  1. 收到RabbitMQ消息后,调用一些EJB(直接或通过观察者)来执行持久性工作。
  2. 使用以下某个选项 - Apache DeltaSpikeSeam Persistence向您现有的CDI bean添加交易支持。
  3. 根据您提供的信息,确实很难为您提供更多详细信息。但是,从概念层面来看,上述方法之一就可以解决问题。

    此外,event scope的概念似乎令人困惑。我会说你不需要它。上面的方法之一就可以了。另外,请查看CDI events