在Java EE 6中应用CMP JTA在普通CDI(无EJB)上是否可行?

时间:2014-06-16 18:00:15

标签: jpa cdi jta

有谁知道是否可以使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]

1 个答案:

答案 0 :(得分:2)

没有一些管道,不适用于普通的Java EE 6。根据{{​​3}},按照标准,这可以在带有JTA 1.2的Java EE 7中实现。您可以在this answer中快速了解JTA 1.2。

因此,仍有许多选择:

恕我直言,我坚持使用标准并编写/使用拦截器(如果架构/规范/供应商的更改确实不是选项)。在未来的迁移过程中,您可以轻松地交换JTA 1.2事务。

您可以在链接的Q& As中找到更多详细信息。