[jboss-user] [Persistence, JBoss/CMP, Hibernate, Database] - Using JPA from web tier

mikaelstaldal do-not-reply at jboss.com
Tue Jul 17 07:15:12 EDT 2007


What is the correct way of accessing a Java Persistence unit from the web tier (no EJB session beans)?

I use JBoss 4.2.0.

I can't get the resource injection annotations @PersistenceUnit or @PersistenceContext to work, so I have done like this:

public class MyServletContextListener implements ServletContextListener {
  | 
  |     public void contextInitialized(ServletContextEvent sce) {
  |         try {
  |             EntityManagerFactory emf = Persistence.createEntityManagerFactory("myunit");
  |             sce.getServletContext().setAttribute(EntityManagerFactory.class.getName(), emf);
  |         }
  |         catch (RuntimeException e) {
  |             throw e;
  |         }
  |         catch (Exception e) {
  |             throw new RuntimeException(e);
  |         }
  |     }
  | 
  |     public void contextDestroyed(ServletContextEvent sce) {
  |         EntityManagerFactory emf = (EntityManagerFactory)sce.getServletContext().getAttribute(
  |                 EntityManagerFactory.class.getName());
  |         if (emf != null) {
  |             emf.close();
  |         }
  |     }
  | 
  | }
  | 

and for each web request I do like this:

        EntityManagerFactory emf = (EntityManagerFactory)context.getAttribute(EntityManagerFactory.class.getName());
  |         EntityManager em = emf.createEntityManager();
  |         EntityTransaction transaction = em.getTransaction();
  |         transaction.begin();
  | 
  |         try {
  |         // process the request here...
  |             transaction.commit();
  |         } catch (Exception e) {
  |             transaction.rollback();
  |         // log the error
  |         } finally {
  |             em.close();
  |         }
  | 

It seems to work, but is it thread-safe and does it give reasonable performance? 

View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4064944#4064944

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4064944



More information about the jboss-user mailing list