有谁知道是否可以使CMP JTA在普通的CDI bean上运行?目标只是将DAO bean(无EJB)注入JSF bean,使用一些kick-ass注释注释方法并使其开箱即用。有点像这样:
@Named
public class ClusterController {
@Inject
private ClusterDAO clusterDAO;
/**
* A simple proxy method
* @param cluster cluster to be saved to the DB
*/
@Transactional(value = Transactional.TxType.REQUIRES_NEW)
public void createCluster(Cluster cluster) {
clusterDAO.saveEntity(cluster);
}
}
这个@Transactional(value = Transactional.TxType.REQUIRES_NEW)
没有做到这一点(我正在使用JBOSS EAP 6)。我明白了:
Caused by: javax.persistence.TransactionRequiredException: JBAS011469: Transaction is required to perform this operation (either use a transaction or extended persistence context)
at org.jboss.as.jpa.container.AbstractEntityManager.transactionIsRequired(AbstractEntityManager.java:692) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
at org.jboss.as.jpa.container.AbstractEntityManager.persist(AbstractEntityManager.java:562) [jboss-as-jpa-7.3.0.Final-redhat-14.jar:7.3.0.Final-redhat-14]
答案 0 :(得分:2)
没有一些管道,不适用于普通的Java EE 6。根据{{3}},按照标准,这可以在带有JTA 1.2的Java EE 7中实现。您可以在this answer中快速了解JTA 1.2。
因此,仍有许多选择:
恕我直言,我坚持使用标准并编写/使用拦截器(如果架构/规范/供应商的更改确实不是选项)。在未来的迁移过程中,您可以轻松地交换JTA 1.2事务。
您可以在链接的Q& As中找到更多详细信息。