Why does code like:
emf =
javax.persistence.Persistence.createEntityManagerFactory("EmployeeService");
provide an emf that will not work properly?
see more info below:
Rather than code like:
@PersistenceUnit(unitName = "EmployeeService")
public EntityManagerFactory emf;
@Resource
public UserTransaction utx;
the JavaEE API says one can do the following:
public EntityManagerFactory emf;
public UserTransaction utx;
and initialize emf and utx like:
InitialContext ic = new InitialContext();
utx = (UserTransaction) ic.lookup("java:comp/UserTransaction");
emf =
javax.persistence.Persistence.createEntityManagerFactory("EmployeeService");
-----------------------------------------------------------------------
Within a Servlet with JTA/JPA, code like the shown below works as long
as emf
is only obtained with/via the @PersistenceUnit annotation;
EntityManager em = emf.createEntityManager();
utx.begin();
em.joinTransaction();
Employee emp = em.find(Employee.class, id);
utx.commit();
the above code works if utx is obtained as a
@Resource
public UserTransaction utx;
or as
utx = (UserTransaction) ic.lookup("java:comp/UserTransaction");
the code fails if emf is obtained as
emf =
javax.persistence.Persistence.createEntityManagerFactory("EmployeeService");
as opposed to
@PersistenceUnit(unitName = "EmployeeService")
public EntityManagerFactory emf;
the Java EE5/6 API say it should work.
thanks
gary