SDO (Service Data Objects) 野心大:為 SOA 架構下各類數據類型提供統一靈活 API。EJB 3.0 (JPA) 專注基於 ORM 的持久化,簡化 EJB,獲 Hibernate、Oracle ORM 專家支持。二者非直接競爭,而是互補。
| 維度 | EJB 3.0 / JPA | SDO |
|---|---|---|
| 支持語言 | 僅 Java | Java、C++、PHP 等多語言,定義統一數據類型保證可移植性 |
| 數據類型與格式 | 專注關係型數據庫數據 | 面向各類數據 (關係型、XML、服務數據等),提供統一訪問 API 與元數據 API (DataGraph、DataObject、Type、Property) |
| 架構哲學 | 基於 ORM: -「邏輯優先」對象持久化到關係庫 -「意大利麵條」映射現有庫 | 「數據優先」:假定數據庫經優化/範式化、生命周期長於業務層。反向工程生成持久化代碼 |
| SOA 適配性 | 傳統單體 Java 應用 (C/S 架構傾向) | 原生支援離線應用模型 (DataGraph 離線修改不鎖表),極適合 SOA 分布式架構 |
| 標準歸屬 | Java EE (J2EE 新稱) 核心組件 | 與 SCA (Service Component Architecture) 同步發布,SCA 實現 SOA 服務點對點交互,為應對微軟 Indigo/WCF 戰略 |
| 耦合度 | 嵌入式,與應用緊耦合 | 可輕量級、分布式部署,支援靜態強類型與動態弱類型調用 |
無絕對優劣,關鍵看架構目標。SDO 強在數據虛擬化與 SOA 集成;JPA 強在對象持久化與 Java EE 生態整合。未來或見兩者融合:JPA 處理核心域模型持久化,SDO 處理服務層數據傳輸與聚合。