Java Reference
In-Depth Information
testing, once the application comes under increased load it may behave unpredictably. It's
best to use EntityManager s from within EJBs. If you must access the EntityMan-
ager directly, you can use the following code snippet or access the EntityManager-
Factory :
@PersistenceContext(name="pu/actionBazaar" unitName="ActionBazaar")
public class ItemServlet extends HttpServlet {
@Resource
private UserTransaction ut;
public void service(HttpSerlvetRequest req, HttpServletResponse resp)
throws ServletException, IOException {
Context ctx = new InitialContext();
EntityManager em = (EntityManager)ctx.lookup("java:comp/env/pu/
actionBazaar");
...
ut.begin();
em.persist(item);
ut.commit();
...
}
}
The other alternative is to use an application-managed EntityManager with a JTA
transaction. It's worth noting that EntityManagerFactory is thread-safe.
10.1.6. Injecting the EntityManagerFactory
In the previous section you saw how the container injects the EntityManager . When
the container injects the EntityManager , you have very little control over the
EntityManager 's lifecycle. In some situations you want fine-grained control over the
lifecycle of the EntityManager as well as transaction management. For this reason,
as well as to maintain flexibility, JPA provides injection support for the EntityMan-
agerFactory . Using the EntityManagerFactory , you can get EntityManager
instances that you can fully control. An example of the ItemManager controlling its
EntityManager instance manually is shown in the following listing.
Search WWH ::




Custom Search