Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa UserTransaction和EntityManager如何交互?_Jpa_Jsf 2_Jpa 2.0 - Fatal编程技术网

Jpa UserTransaction和EntityManager如何交互?

Jpa UserTransaction和EntityManager如何交互?,jpa,jsf-2,jpa-2.0,Jpa,Jsf 2,Jpa 2.0,这是一个学术问题;我没有与此相关的错误代码。我只是想扩大我对引擎盖下发生的事情的理解 我在JPA DAO中为典型的JSF web应用程序使用的代码模式(从书籍和教程中复制)基本上如下: public class someDAO { @PersistenceContext protected EntityManager em; @Resource private UserTransaction utx; public void per

这是一个学术问题;我没有与此相关的错误代码。我只是想扩大我对引擎盖下发生的事情的理解

我在JPA DAO中为典型的JSF web应用程序使用的代码模式(从书籍和教程中复制)基本上如下:

public class someDAO {

    @PersistenceContext protected EntityManager   em;
    @Resource           private   UserTransaction utx;    

    public void persist(Entity entity) {
        try {
            utx.begin();
            em.persist(entity);
            utx.commit();
        } catch ( // gawd awful long list of possible exceptions ) 

        // etc
因此,我的问题如下:

  • 为什么EntityManager实例和UserTransaction实例被注入了来自两个看似不相关的包的注释

  • 为什么使用注释@Resource和@PersistenceContext而不是@ManagedProperty或@Inject

  • persist()方法如何访问utx对象并与之交互?如果我忘记了调用utx.begin(),实体管理器就会知道并抛出异常。它必须以某种神奇的方式找到UserTransaction对象。将接口定义为:em.persist(utx,entity)不是更好的架构吗

  • 如果utx是某种单例,那么一次是否可能打开多个UserTransaction

  • 非常感谢大家的讨论

  • 因为UserTransaction是Java事务API(JTA)的一部分,EntityManager是Java持久性API(JPA)的一部分。JTA不是JPA的一部分。JPA使用JTA提供的服务

  • is Not ManagedProperty是一些注释,它仅在用@ManagedBean注释的类中有效。也许不注入UserTransaction会更好 管理bean中的不同方式

  • 活动事务的JNDI查找。保留名称似乎是java:comp/UserTransaction。一项实施:

  • 它不是某种单身,你可以有不止一个。但每个线程只能有一个处于活动状态


  • 你考虑过EJB吗?EJB使用容器管理的事务。这样,您就不必担心自己管理事务(而且它使您的服务方法不受try-catch混乱的影响)。我不太介意这种代码模式,因为我已经设法将它全部限制在一个抽象的DAO对象中。我所有的具体DAO都是从一个对象扩展而来的,所以这个垃圾(如果这个词适用的话)部分几乎看不见了。但不是出于心理。