簡體   English   中英

JSF2:使用EJB在視圖中打開會話?

[英]JSF2: Open Session in View with EJBs?

在JSF2應用程序中討論視圖模式中的Open Session是否有意義? 我的應用程序有JSF2 Managed Beans調用業務服務EJB來執行所有與db相關的東西(有一個DAO層,但現在無關緊要)。

擁有OSIV模式意味着Managed Bean必須以某種方式確保底層會話被打開。

我也在使用JPA。

從理論上講,問題完全相同:實體在離開EJB時會變為分離,除非某些東西保持EntityManager的范圍。 (這是關於該主題的一篇很棒的帖子: JPA實現模式:延遲加載 )。

從我讀過的博客文章中

8)沒有Open Entity Manager In View支持。 [...]在EJB3中,當您的實體使用事務范圍的 EntityManager離開bean時,它與持久性上下文分離,您可能不再依賴於延遲加載(事實上,JPA規范沒有指定在這種情況下的行為,可能是某些將拋出與供應商相關的異常...)當然,您可以將EntityManager與擴展持久化上下文一起使用,只要您願意,就可以保留事務和持久性上下文。 但是此功能僅適用於SFSB,而DAO類是無狀態服務的典型示例,因為它們僅將調用分派給持久層。 此外,為每個客戶端提供專用的DAO bean實例似乎是一個很大的過度殺傷力。

但我不確定這是真的。 根據我的理解,你應該能夠編寫一個servlet過濾器,它使用UserTransaction來啟動和提交事務(就像OSIV中的常規過濾器一樣)。 然后,EJB將參與在過濾器中啟動的事務,並且EntityManager將保持打開狀態。 我沒有測試過,但我的建議是嘗試一下。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM