實體 bean: 提供健壯的數據持久性。bean 容器處理大部分的數據完整性、資源治理和並發性功能,從而使開發人員關注業務邏輯和數據處理,而不是這些低級細節。 <!-- frame contents --> <!-- /frame contents --> 使用 bean 治理的持久性(Bean Managed Persistence,BMP)實體 bean 時,開發人員編寫持久性代碼而容器確定何時執行該代碼。使用容器治理的持久性(Container Managed Persistence,CMP)實體 bean 時,容器生成持久性代碼並治理持久性邏輯。
JDO: 只是提供面向對象的持久數據存儲。開發人員使用 POJO(無格式普通 Java 對象,plain ordinary Java object)來裝入和存儲持久數據。
實體 bean 主要有下列優點:
1、標准化。EJB 規范定義一組與供給商無關的接口,J2EE 供給商可以實現這些接口來支持實體 bean。這種標准化答應采用最佳實踐的開發並縮短雇用新開發人員時的適應期。因為基本的組件體系結構和設計模式大家都知道,所以很輕易找到合格的人才來實現它們。
2、容器治理的服務。正如我們在本系列的前兩篇文章中討論的那樣,EJB 容器治理的服務為處理諸如安全性、事務處理、連接合用和資源治理之類的企業功能提供了極大的好處。
3、透明持久性。CMP時容器能自動治理持久性語義。雖然使用 BMP 實體 bean 時,開發人員必須編寫持久性邏輯,而容器則確定何時調用由開發人員定義的方法。同時使用 CMP 和 BMP 實體 bean 時,容器決定何時持續保持 bean 的狀態以及如何確保與底層數據存儲的數據完整性和並發性。
4、事務支持。開發人員對 CMP 事務(隔離級別、事務需求和方法的包含/排除)有粗粒度的控制權,對 BMP 事務有細粒度的控制權,這些控制都是通過在 bean 代碼中以程序方式處理事務語義實現的。在這兩種情況下,容器治理事務並確定是否應該提交給定的事務。
5、基於組件的設計。實體 bean 被設計成自包含組件,這些組件配置有部署描述符,無需更改任何代碼就可以將它們部署到任何 J2EE 應用程序服務器。
總之,實體 bean的優點是可以從標准化和業界最佳實踐中受益,簡化了企業開發的某些復雜性。缺點則是:
1、設計復雜。
2、由於企業 bean 和(尤其是)實體 bean 的復雜性,所以一次迭代(設計/構建/測試/集成/測試/部署)所花的時間比其他 Java 持久性解決方案所花的時間可能長很多。
3、響應時間不理想。
4、資源占用過高,總是會消耗掉大量的服務器資源。
相比entity bean, JDO的優點是:
1、設計簡單。
2、細粒度控制,答應開發人員對整個持久性進程進行完全控制,包括高速緩存、持久性、並發性和同步等。
3、編碼簡單。JDO 體系結構向開發人員隱藏了低級別的持久性細節。
4、JDO 並不僅僅使 Java 對象持久;它還透明地處理整個相關對象圖的持久性。因此,當實例被持久存儲時,它所維護的對其它對象實例的任何內部引用也都被持久存儲(除非它們已被聲明為瞬態)。JDO 還存儲類型層次結構的完整信息,並能根據類型(父類和接口)實現請求,而不是只了解持久實例的特定局部類型。
進入討論組討論。