Spring+JPA,下一個人氣組合?
Spring + Hibernate 常常被稱為 Java Web 應用背后人氣最旺的框架組合。盡管 JCP 今天通過的 Web Beans JSR 打算將JSF + EJB + JPA 、來自 JBoss Seam(Spring 除外)的一些組件和EJB 3(目前能夠提供有基本攔截和依賴注入功能的簡化 Session Bean 框架)的一個 Web 組合進行標準化,現(xiàn)在 Spring 2.0 為 JPA 提供了完整的 EJB 容器契約,允許 JPA在任何環(huán)境內(nèi)可以在 Spring 管理的服務層使用(包括 Spring 的所有 AOP 和 DI 增強)。關于下一個實際組合會是 EJB、Spring + Hibernate 還是 Spring + JPA 的論戰(zhàn),早已充斥于耳。
在 Tomcat 和 Geronimo 上,我們已經(jīng)能看見獨立使用 JPA 的演示范例。但這個方法存在一些局限性,例如,在同一個事務內(nèi)部,我們無法跨實體管理器(Entity Managers)自動共享持久化上下文環(huán)境(Persistence Context)。Spring 通過實現(xiàn) EJB 容器契約,允許在相同事務內(nèi)以跨組件方式注入持久對象,同時也具備讓組件連接事務的能力,并允許對擴展持久化上下文環(huán)境的支持。因此,Spring 2 允許隨同容器內(nèi)部支持的所有功能特性一起使用 JPA。
最近,Mark Fisher 在獨立環(huán)境中使用來自 Glassfish 的 Toplink Essentials JPA 參考實現(xiàn)向大家演示了如何配合 Spring 使用 JPA。Mark 選取了一個簡單的 JPA 領域模型,并展示了如何讓它在 Spring 中運行:
我打算擴展 Spring 的 JpaDaoSupport 類,這個類提供了獲取 JpaTemplate 的便利方法。如果你以前就在 Spring 下使用過 ODBC 或者其他的 ORM 技術的話,那么想必你對這種方法已經(jīng)頗有了解了。應當注意的是,JpaDaoSupport 的使用是可選的。我們可以通過將 EntityManagerFactory 傳給 JpaTemplate 的構造子的方式來創(chuàng)建 JpaTemplate 對象。事實上,JpaTemplate 本身就是可選的。如果你不希望 JPA 異常被自動轉(zhuǎn)換成 Spring 的運行期異常層級結構(runtime exception hierarchy),那么你就可以完全不必使用 JpaTemplate 了。在這種情況下,你可能仍然對 Spring 的 EntityManagerFactoryUtils 類感興趣,因為這個類提供了一個類方法,它能幫助你很方便地獲取共享的(因此也是事務性的)EntityManager。
同時,Spring 2.0 文檔也已經(jīng)更新了一個新的章節(jié),使用與 Hibernate 或 TopLink 相同的方式展示了如何支持 JPA。Rod Johnson 在 Java One 大會上向 InfoQ 表示,Spring 在確保 JPA 整合的可移植性方面做出了很多努力,目的是為了保證在 Hibernate、TopLink 和 OpenJPA 等 JPA 提供商之間進行切換變得更加容易。
最近,Spring 的 Pitchfork 項目(向 WebLogic 提供完整 EJB API 的一部分)被用于演示如何在 Tomcat 上完整地部署 EJB,盡管在 Tomcat 上使用 Spring 運行完整 EJB 的方法并不打算用于生產(chǎn)用途,Rod Johnson 表示“其目的并不是為了寫出一個 EJB 容器”。JBoss 同樣也提供了一個可嵌入的 EJB 容器,可以在具備一定局限性的條件下在 Tomcat 上運行 EJB 3。
上周,Gavin King 和不少 Spring 團隊人員之間就 JBoss 和 EJB 3 vs. Spring“類 EJB 容器”(這是 Gavin 的叫法)問題爆發(fā)了一場大規(guī)模舌戰(zhàn)。Spring 團隊主張,JPA 是新 EJB 規(guī)范的主要價值所在,而在依賴注入和 AOP 能力方面,Session Bean 僅僅是 Spring 的很小的子集。他們在力挺 Spring + JPA。Gavin King 反擊說,他們(Spring 團隊)試圖通過力推 Spring 的方式,進一步加強 Spring 的市場鎖定,而不是“通過規(guī)范提供的擴展點為 EJB 3 創(chuàng)建附加組件”。
在2006 和 2007 年,在事務性和持久性 Java Web 應用開發(fā)的下一個實際標準領域,必將涌現(xiàn)出許多競爭和創(chuàng)新。目前看來,存在三個陣營,Sun/JCP、JBoss 和 Spring。社區(qū)將齊聚 EJB 陣營還是仍然對其嗤之以鼻?是繼續(xù)固守 Spring + JPA 還 Spring + Hibernate 陣營?當 Web Beans 規(guī)范最終敲定時,事態(tài)將會變得更加引人注目。InfoQ 將持續(xù)為您追蹤報道它們每一步發(fā)生的變化與創(chuàng)新。
您正在閱讀:Spring+JPA,下一個人氣組合?
【編輯推薦】