我目前從EntityManagerFactory
內的doFilter
方法中獲得一個EntityManager
,該方法的一個servlet Filter
,將它傳遞給Servlet,並在出路時關閉它。EntityManager生存期是否應每個Servlet請求?還是更長?
就EntityManager
的使用壽命而言,這是一個很好的做法嗎?或者我應該有不同的使用期限EntityManager
?
我目前從EntityManagerFactory
內的doFilter
方法中獲得一個EntityManager
,該方法的一個servlet Filter
,將它傳遞給Servlet,並在出路時關閉它。EntityManager生存期是否應每個Servlet請求?還是更長?
就EntityManager
的使用壽命而言,這是一個很好的做法嗎?或者我應該有不同的使用期限EntityManager
?
聽起來對我很好。
過濾器和servlet一次會被多個線程使用(與無狀態或有狀態的EJB不同)。因此應該根據請求查找EntityManager
。
或者,您也可以通過指定SingleThreadModel
需要,在這種情況下,你可以對所有在您的過濾器或servlet注入EntityManager
一次迫使Web容器來同步訪問的servlet(不知道的過濾器)。
上面的信息來自這個職位約PersistenceContext in a web app。
獲得EntityManager
是我相信一個便宜的操作(不像獲得工廠本身)。至少,Hibernate的Session和SessionFactory就是這種情況。所以我會去你的原創設計。
感謝您的確認和參考:) – necromancer 2012-04-11 19:04:01
你鏈接的文章很好,但有一個可怕的誤導性標題。它應該是「不要在Servlet中使用@PersistenceContext」。 – BalusC 2012-04-12 03:56:41