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