What is the best approach to get EntityManagerFactory in web app(jsp/servlets)?
Is this a good way When should EntityManagerFactory instance be created/opened?,
or is it better to get it from JNDI, or something else?
What is the best approach to get EntityManagerFactory in web app(jsp/servlets)? Is this a
Share
They’re heavyweight and they’re supposed to be in the application scope. So, you need to open them on application startup and close them on application shutdown.
How to do that depends on your target container. Does it support EJB 3.x (Glassfish, JBoss AS, etc)? If so, then you don’t need to worry about opening/closing them (neither about transactions) at all if you just do the JPA job in EJBs with
@PersistenceContextthe usual way:If your target container doesn’t support EJBs (e.g. Tomcat, Jetty, etc) and an EJB add-on like OpenEJB is also not an option for some reason, and you’re thus manually fiddling with creating
EntityManagers (and transactions) yourself, then your best bet is aServletContextListener. Here’s a basic kickoff example:(note: before Servlet 3.0, this class needs to be registered by
<listener>inweb.xmlinstead of@WebListener)Which can be used as: