标签:
EJB中EntityManager的管理方式有两种:Container-managed EntityManager和Application-managed EntityManager
即容器管理的EntityManager和应用管理的EntityManager
在EJB中,EntityManager所进行的持久化的方式与Hibernate的方式是不同的。
1.在Hibernate的同一个事务中,通过getCurrentSession获取的session对象均为同一个,保存于threadlocal中,以保证对数据的操作为同一个对象。
2.而EJB中,以容器管理的EntityManager为例,通过注解注入后,在同一个事物中,在各个Bean中获取的EntityManager为不同的对象,但其背后所指向的 persistenceContext 为同一个,所以保证对一个对象进行操作。
1)容器管理的EntityManager
简单的说,就是使用注解,在程序启动的时候由容器自动注入的方式,这是一种普遍采用的方式。
@PersistenceContext(unitName="jbossDB") private EntityManager em;
在使用结束时,不需要自己关闭,有容器来管理。unitName为数据库资源的名字,有presidence.xml中定义
在该方式下,对应两种persistence类型:
1.transaction-scope persistence:由容器管理的persistence,其生命周期为一个transaction,这是默认的模式
2.Extended-scope persistence:用于stateful session bean中,其生命周期随stateful的生命周期
@PersistenceContext(unitName="jbossDB",type=PersistenceContextType.EXTENDED) private EntityManager em;
其设置方式为通过PersistenceContextType来设置。
2)应用管理的EntityManager
由PersistenceUnit注入EntityManagerFactory中
@PersistenceUnit(unitName="jbossDB") private EntityManagerFactory emf;
在transaction结束时需要手动将获取的EntityManager关闭(closs);
***由于刚了解该技术点,没有理解透
EJB3 EntityBean中EntityManager的管理类型
标签:
原文地址:http://www.cnblogs.com/welv/p/5084329.html