[英]Integrate JSF with JPA
我對JSF和JPA進行了一些研究。 閱讀一些教程,並遵循一些示例。 在此之前,我將創建托管Bean,模型和服務來處理我的應用程序。
將JPA包含在此模式中的最佳實踐是什么? 是否應在同一Service類中包含JPQL查詢和數據庫調用? 在某些示例中,我看到JPA與Invoke應用程序階段中調用的方法在同一托管Bean中實現,還是在其他托管Bean中實現JPA? 與這兩個一起使用的常見做法是什么?
您應該將JPA訪問權限合並到一種或另一種DAO或服務層中,如果沒有其他原因,您可以將該DAO層存入單元測試中。 然后,所有您的JSF托管bean都會通過該類路由其JPA訪問。 這樣,每當您從JSF托管bean訪問JPA時,就可以模擬單個DAO方法調用,而不是分別模擬EntityManager
, Query
等。
現在,更棘手的問題是:DAO /服務層應該是另一個JSF管理的bean,EJB還是其他東西? 從某種意義上講,這比確認要分離JPA訪問要重要。
我個人開始使用@ManagedProperty
進行注入,使DAO成為JSF托管的另一種風味。 然后,我在Java EE 6中發現了CDI,並使用@Named
/ @Inject
使其成為POJO。
但是,如果您正在執行寫操作而不是只讀操作,則應考慮在一個單獨的服務層上聲明事務-如果使用JSF, @Stateless
EJB可能最有意義。
希望這可以幫助!
我是一名自學者,因此請原諒我的措辭可能不合適。
如果您看到此答案 ,那么將提供指向NetBeans向導的鏈接,該向導用於創建RESTful Web服務。 這肯定超出了您的問題范圍,但是生成的DAO類確實很有幫助,可以用於JSF項目。 如果需要,可以刪除JAX-RS RESTful批注,但其余部分保留。
然后,將自動生成的Facade類(使用EJB注釋)注入Bean中。 在這些Facade和Entity類中,已經編寫了基本JPA查詢。
如果需要創建更復雜的查詢,則還可以使用類型安全的Criteria API代替JPQL。 最初的工作量更大,但是Criteria API允許您以OO方式編寫復雜的查詢,這在某些具體情況下也很有用,例如在“ WHERE”語句中使用多個條件(其編號是像在Advanced Search
一樣動態生成的) )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.