首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

J2EE 資料存取技術演進:從 CMP 到持久層框架對決(Castor JDO vs Jakarta OJB)

     編輯:J2EE

前言:為何需要資料存取抽象?

  • 避免後端資料結構變動直接衝擊程式碼
  • 解決各資料庫 SQL 方言差異(T-SQL vs PL/SQL)帶來的移植痛苦

物件導向設計將存取機制視為獨立物件,透過 O/R Mapping 實現。J2EE 四層架構(Client、Web、Business、EIS)讓 Business 層專注業務邏輯,EIS 層交由容器管理。

J2EE 標準實體 Bean 的侷限

  • 物件必須繼承特定基類,限制純粹物件開發
  • 效能疑慮:三層架構常被質疑比傳統兩層慢

持久層解決方案:Castor JDO

Castor 專案提出持久層概念,介於 Business 與 EIS 之間,工具稱為 JDO(Java Data Objects)。優點:存取速度快、彈性高、支援多資料庫、工具可抽換。但實測發現缺陷:

  • 不支援集合屬性的多型
  • 巢狀參考與遞迴參考導致儲存死結
  • 修改設定檔或原始碼皆無法完美解決

替代方案:Jakarta OJB

Apache DB 專案下的 ObjectRelationalBridge (OJB),同樣提供 O/R Mapping,架構支援多種儲存媒體。實測功能對比:

功能Castor JDOJakarta OJB
基本 CRUD支援(PK 重複拋錯)支援(PK 重複無錯誤也不寫入,需注意)
1:1 參考可增改,刪除主物件不連帶刪除被參考物件同,但可設定 auto-delete=true 連帶刪除
繼承映射支援三種策略支援前兩種,第三種建議用 1:1 參考替代
1:n 集合支援 ArrayList、Map、Set 等除 Map 外皆支援,含自訂集合型別
n:m 參考支援支援
多型集合 (Interface)不支援支援
多型集合 (Super Class)不支援支援
1:1 Lazy Loading不支援支援
集合 Lazy Loading僅支援 Collection 型別支援所有可用型別

結論與展望

Jakarta OJB 功能較完整,尤其多型集合支援與無死結問題為關鍵優勢。持久層架構雖優雅,但效能仍是關鍵。現代 JDO 工具已提供快取、PreparedStatement、Lazy Loading 等加速機制,架構成熟度大幅提升,不再是「無實用性的藝術品」。

參考資源

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved