Seam 3 @Transactional注释在Java EE环境中不起作用

时间:2013-12-17 19:58:27

标签: java-ee jpa cdi transactional seam3

我有一个异步命令处理器模块,可以旋转许多后台线程来读取数据库记录,每个记录加载一个命令(CDI Bean)并运行命令。使用Weld-SE容器的Arquillian测试工作正常。但是,当我把它放在JavaEE环境中(作为JBoss EAP 6.1.1中的JBoss模块)时,@ Transactal注释不会生效 - 后台方法在没有事务的情况下运行。因此,实体的更改永远不会对数据库产生影响。

依赖于此消息传递模块的客户端模块在bean.xml中具有此功能

<beans xmlns="http://java.sun.com/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:s="urn:java:ee"
  xmlns:t="urn:java:org.jboss.seam.transaction"
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">

   <interceptors>
     <class>org.jboss.seam.transaction.TransactionInterceptor</class>
   </interceptors>
</beans>

我尝试了Seam @Transactional annotation not working?中提到的技巧但是没有用。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我不确定你的项目结构,但你应该考虑beans.xml只在它所在的bean存档中工作。所以你必须在你希望它的每个Bean Archive中激活Interceptor工作(CDI 1.0)。使用CDI 1.1,您可以在全局范围内启用拦截器。