Seam 3@事务性注释在Java EE环境中不起作用



我有一个异步命令处理器模块,它启动了许多后台线程,这些线程读取DB记录,每个记录加载一个命令(CDI-Bean)并运行该命令。使用Weld SE容器进行Arquillian测试效果良好。然而,当我把它放在JavaEE环境中(作为JBoss EAP 6.1.1中的JBoss模块)时,@Transactional注释不会生效——后台方法在没有事务的情况下运行。因此,对实体的更改永远不会对数据库进行更改。

依赖于这个消息传递模块的客户端模块在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注释中提到的技巧,但不起作用?但这并没有奏效。

知道为什么会这样吗?

我不确定你的项目结构,但你应该考虑beans.xml只在它所在的bean档案中工作。因此,你必须在你希望它工作的每个bean档案中激活拦截器(CDI1.0)。有了CDI1.1,你就可以全局启用拦截器。

最新更新