EntityManager生命周期应该是每个Servlet请求吗?还是更久?

时间:2012-04-11 08:34:48

标签: java java-ee servlets jpa servlet-filters

我目前从servlet EntityManager的{​​{1}}方法中的EntityManagerFactory获取doFilter,将其传递给Servlet,并在出路时关闭它

Filter的生命周期而言,这是一种良好的做法吗?或者我应该为EntityManager设置不同的生命周期吗?

1 个答案:

答案 0 :(得分:5)

听起来不错。

多个线程将同时使用过滤器和servlet(与无状态或有状态EJB不同)。因此,应根据请求查找EntityManager

或者,您可以通过指定需要SingleThreadModel来强制Web容器同步对servlet的访问(对于过滤器不确定),在这种情况下,您可以为所有人注入EntityManager一次你的过滤器或servlet。

以上信息来自此帖关于PersistenceContext in a web app

获得EntityManager我认为是一种廉价的操作(与获得工厂本身不同)。至少,Hibernate的Session和SessionFactory就属于这种情况。所以我会选择你的原创设计。