何时关闭实体经理?
public TYPE getItem(Long id) {
if (id != null) {
try {
em = EMFactory.createEntityManager();
TYPE item=em.find(entityClass, id);
return item;
} catch (Exception e) {
System.err.println(e.getMessage());
} finally {
if (em != null)
em.close();
}
}
return null;
}
@WebListener
public class EMFactory implements ServletContextListener {
private static EntityManagerFactory emf;
@Override
public void contextInitialized(ServletContextEvent event) {
emf = Persistence.createEntityManagerFactory("ejb");
}
@Override
public void contextDestroyed(ServletContextEvent event) {
emf.close();
}
public static EntityManager createEntityManager() {
if (emf == null) {
emf = Persistence.createEntityManagerFactory("ejb");
// throw new IllegalStateException("Context is not initialized yet.");
}
return emf.createEntityManager();
}
}
在任何操作create / update / select / remove之后,我总是关闭实体管理器。但我想这不是效率。那应该如何实施?
答案 0 :(得分:0)
如果您在应用启动/停止时使用long-lived-transactions,则在会话激活/钝化/创建时使用{{3}}。
答案 1 :(得分:0)
但您应该充分利用Java EE和EJB可以为您提供的所有优势,您可以拥有一个容器来管理您经历的所有麻烦。它根据客户会话的需要在后台处理entitymanagerfactory。 看一眼 http://docs.oracle.com/javaee/6/tutorial/doc/bnblr.html