默认情况下,CDI 不支持容器管理事务。但是,使用 Seam 3 Persistence 模块,您可以将 CMT 支持添加到您的应用程序中。
Seam Persistence 文档在这里 -->链接
首先,将 Seam Persistence jar 添加到您的项目中:
<dependency>
<groupId>org.jboss.seam.persistence</groupId>
<artifactId>seam-persistence-api</artifactId>
<version>${seam.persistence.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.seam.persistence</groupId>
<artifactId>seam-persistence-impl</artifactId>
<version>${seam.persistence.version}</version>
</dependency>
<dependency>
<groupId>org.jboss.seam.solder</groupId>
<artifactId>seam-solder</artifactId>
<version>${seam.solder.version}</version>
</dependency>
接下来,在beans.xml中启用声明式事务管理
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee
http://docs.jboss.org/cdi/beans_1_0.xsd">
<interceptors>
<class>org.jboss.seam.persistence.transaction.TransactionInterceptor</class>
</interceptors>
</beans>
现在,根据文档,您应该能够像使用 EJB 一样对托管 bean 使用 @TransactionAttribute 注释,但是,我无法让它工作。但是,您可以在您的类或方法上使用@Transactional注释。这是 Seam Persistence 等效项,并且工作正常。
希望这可以帮助。有任何问题,尽管问。