我目前从servlet EntityManager
的{{1}}方法中的EntityManagerFactory
获取doFilter
,将其传递给Servlet,并在出路时关闭它
就Filter
的生命周期而言,这是一种良好的做法吗?或者我应该为EntityManager
设置不同的生命周期吗?
答案 0 :(得分:5)
听起来不错。
多个线程将同时使用过滤器和servlet(与无状态或有状态EJB不同)。因此,应根据请求查找EntityManager
。
或者,您可以通过指定需要SingleThreadModel
来强制Web容器同步对servlet的访问(对于过滤器不确定),在这种情况下,您可以为所有人注入EntityManager
一次你的过滤器或servlet。
以上信息来自此帖关于PersistenceContext in a web app。
获得EntityManager
我认为是一种廉价的操作(与获得工厂本身不同)。至少,Hibernate的Session和SessionFactory就属于这种情况。所以我会选择你的原创设计。