[jboss-user] Using Java Persistence from web tier
Mikael Ståldal
mikael.staldal at univits.com
Mon Jul 16 08:41:45 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?
More information about the jboss-user
mailing list