我有一个异步命令处理器模块,可以旋转许多后台线程来读取数据库记录,每个记录加载一个命令(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?中提到的技巧但是没有用。
知道为什么会这样吗?
答案 0 :(得分:0)
我不确定你的项目结构,但你应该考虑beans.xml只在它所在的bean存档中工作。所以你必须在你希望它的每个Bean Archive中激活Interceptor工作(CDI 1.0)。使用CDI 1.1,您可以在全局范围内启用拦截器。