核心定位差異
| 維度 | Entity Bean (CMP/BMP) | JDO (Java Data Objects) |
| 定位 | 企業級分散式元件,含交易、安全、並發、資源管理 | 純粹物件持久化框架,專注 POJO 映射 |
| 程式模型 | 需實作介面、部署描述符、容器管理生命週期 | 普通 Java 類別 (POJO),無介面侵入 |
| 持久化策略 | CMP: 容器自動生成 SQL;BMP: 開發者寫 JDBC | 透明持久化,欄位級攔截 (增強類別) |
| 關聯處理 | CMP 關係映射複雜,需配置 ejb-jar.xml | 自動追蹤物件圖、支援繼承階層查詢 |
| 查詢語言 | EJB-QL (功能受限) | JDOQL (類 SQL、支援多態、子查詢) |
Entity Bean 優勢
- 標準化:J2EE 規範定義,廠商中立,人才易找。
- 容器服務:宣告式交易 (CMT)、角色安全、連線池、實例池化、並發控制。
- 分散式部署:遠端介面、叢集、負載平衡原生支援。
Entity Bean 劣勢
- 設計複雜:Home/Remote/Local 介面、Primary Key 類別、部署描述符繁瑣。
- 開發週期長:編譯 → 打包 → 部署 → 測試,迭代緩慢。
- 效能開銷大:RMI/序列化、容器攔截、實例同步化。
- 資源佔用高:常駐記憶體、資料庫連線持有。
JDO 優勢
- 開發簡單:POJO +
.jdo 映射檔或註解,IDE 友善。
- 細粒度控制:快取策略 (L1/L2)、鎖定模式、同步時機、提取群組 (Fetch Group) 全可配置。
- 物件圖透明持久:儲存根物件自動級聯關聯集合、繼承階層,無需手動管理。
- 可移植性:標準 JDO 實作 (DataNucleus, Kodo, JPOX) 可跑在 Servlet 容器、獨立應用、甚至 J2SE 環境。
選型建議
| 場景 | 推薦 | 理由 |
| 全功能 J2EE 應用伺服器、需分散式交易/安全、團隊熟悉 EJB | Entity Bean (CMP) | 容器服務現成,降低基礎設施自建成本 |
| 輕量級 Web 應用、Tomcat/Jetty、敏捷開發、領域模型豐富 | JDO / Hibernate / JPA | POJO 開發效率高、測試容易、部署輕量 |
| 既有 EJB 系統逐步遷移 | Session Facade + JDO/Hibernate | 保留 EJB 交易邊界,內部換輕量 ORM |
現代視角:JPA (Java Persistence API) 已整合 Hibernate、TopLink/EclipseLink、OpenJPA 等實作,成為 Java EE / Spring 標準持久層,**Entity Bean 與 JDO 均已被 JPA 取代**,僅供維護舊系統參考。