採用Java持久化框架:選擇、時機和優缺點

2021-01-10 IT168

【IT168 技術文章】

    對於開發新軟體系統來說,面向對象編程無疑是當今使用最為廣泛的編程模式。由於商業數據的持久性需求,關係資料庫管理系統(RDBMS)取得了最為 廣泛的應用。RDBMS 使用的是關係模型,它與軟體系統中的域對象模型有所不同。使用面向對象程式語言開發軟體系統並使用 RDBMS 來持久存儲數據時,數據持久化框架將成為應用程式架構中非常關鍵和重要的組件,它們的作用是隱藏應用程式數據持久化的底層複雜性。

    在過去的幾年中,一些持久化框架得到了很好的發展,它們可幫助您管理對象關係映射和數據持久性需求。但是,根據需要選擇一個合適的框架並不是一件簡 單的任務,因為多種因素會影響到這個決定。在本文中,我將根據三個基本標準來討論如何一些應用比較廣泛的 Java 持久化框架中做出選擇:選擇、時機和優缺點。在「選擇」這部分中,我將介紹如何選擇框架;在「時機」這部分中,我將討論一些您應該考慮應用框架的應用場景 以及一些您應該尋找備選方案的應用場景;最後,在「優缺點」這一部分中,我將討論當您決定採用某個框架時,該框架所有的優勢和缺點。首先要討論的是下面這 個在 Java 持久化領域中最著名的框架。

    Entity Enterprise Java Bean
    Java Persistence API
    Hibernate
    TopLink

    讓我們更加詳細地討論這些框架。

    Entity Enterprise Java Bean

    Enterprise JavaBean(EJB)技術是針對 Java 平臺 Enterprise Edition (Java EE) 的一種託管的伺服器端組件架構。在此定義中,「託管」和「伺服器端」是關鍵術語。在 EJB 架構中,應用伺服器 將管理一個或多個已部署的 EJB 的生命周期,並通過 EJB 容器提供公共運行時服務。容器提供的服務包括安全性、並發控制、事務和持久化管理等。

    EJB 規範 定義了三種 Enterprise Bean 類型:Session、Entity 和 Message Driven。每種類型都具有一些獨特特性,分別用於不同目的。由於本文是關於 Java 持久化框架的,我們將簡單討論一下 EJB 架構的持久化方面,討論中會涉及使用 Entity EJB 管理您的 Enterprise Java 應用程式的持久化要求。

    使用 EJB 設計應用程式時,EJB 表示業務域模型中的一個實體。例如,試想一個商業銀行應用程式的 Account 實體。該 Account Entity Bean 將被部署到 J2EE 應用程式伺服器中,該伺服器將通過 EJB 容器給此 Entity Bean 提供一些運行時間服務。這種服務是自動持久化的,我將更加詳細地討論。

    根據持久化實現的方式,Entity EJB 可以進一步劃分為兩種:Bean-Managed Persistence(BMP)和 Container-Managed Persistence(CMP)。使用 BMP,Bean 實例通過 JDBC 代碼負責其狀態的持久化。而使用 Container-Managed Persistence,EJB 容器提供自動管理 Entity Bean 的持久化的能力:當需要時,將狀態保存到底層資料庫或從底層資料庫加載狀態。

    現在讓我們討論一些應用場景,在這些應用場景中您一般可能想要應用 EJB 框架,特別情況下可能使用 CMP 進行數據持久化。

    何時考慮將EJB作為持久化框架

    首先您要考慮的是需要容器提供的服務。如果您的應用程式需要除持久化管理以外的其他容器提供的服務,比如轉換管理、安全性和並發控制,則最好使用 EJB 框架。

    另外還要考慮資源要求。EJB 框架可為需求應用程式提供完美的可伸縮性。但是,這也是有代價的:密集的資源要求,尤其使用 遠程接口 模式時。只在沒有資源限制的時候考慮應用 Entity EJB,以便獲得所需的性能水平。

    還有一個相關的因素是 de facto 框架。如果您正在進行某個基於 Java 平臺的 EE 部署,則機會在於 EJB 容器已成為您的應用程式伺服器的一部分。「為什麼不用已經可用的?」可能是在你的架構決策制定過程中首先要問的問題。我把這看作是相對其他框架的一個「政治」優勢,因為它已經可用了。

    何時考慮將EJB的備選方案作為持久化框架

    持久層的功能要求可能是提示您需求備選方案的第一個因素。如果您的應用程式不需要 EJB 框架提供的每個功能,則這表示您應該尋求一個備選方案。

    資 源可用性超過了性能要求可能是另一個您想要尋求其他備選方案的情況。儘管 EJB 框架提供了完美的性能和可伸縮性,但是 EJB 框架的對資源的消耗也是非常驚人的。底線問題是:我們真的需要這個嗎? 在很多情況下,寫得很好的數據訪問對象或 Hibernate 框架就可提供完美的備選方案。

    儘管很少,但數據源(而不是關係資料庫)可能阻止您使用容器管理的持久化框架。

    如果您已經使用或計劃使用 EJB 作為您的持久化框架,這裡是一些您可以預期的優勢和缺點。

    Entity EJB有什麼優勢?

    該基於組件的分布式模型使其獨立於網絡 - EJB 組件可以部署到為其他應用程式提供服務的同一 JVM 上,或者位於不同地理位置的應用程式伺服器的 JVM 上。

    您將獲得完美的可伸縮性:EJB 可以很好地向上擴展,因為容器可以匯聚實例,必要時可以進行激活和鈍化。

    EJB 經過長時間的檢驗,已成為成熟的技術。而且,它經過發展,還可以提供更多有用的服務和功能。例如,計時器服務就是我最喜歡的服務之一;使用它,您可以計劃 作業按指定的間隔執行(比如每晚、每周或每月)。在 EJB 3.0 中還有一項有用的功能「Java 語言元數據注釋支持」,該功能消除了實體持久化所需的所有接口以及在 EJB 的查詢語言中的增強。

    Entity EJB有什麼缺點?

    學習和使用 EJB 架構是不簡單的。您應該準備學習一些術語,比如 remote interface(遠程接口)、home interface(Home 接口), activation(激活)、passivation(鈍化) 等等,其中大部分僅適用於 EJB 世界。

    EJB 架構不提供持久化獨立。由於這些類在 EJB 容器中以其自己的方式使用,因此沒有在其他框架中使用 EJB 類的簡便方法。

    對於 Entity Bean,要想獲得可接受的性能水平一直是一個挑戰,尤其是在遠程接口模式中。

相關焦點

  • MiniDao 1.6.4 版本發布,輕量級 Java 持久化框架
    MiniDao_1.6.4 版本發布,MiniDao是輕量級Java持久化框架,也是Hibernate項目輔助利器。
  • Java 數據持久化系列之 HikariCP
    運行,學習所有配置項的功能,原理和優缺點,比如 Redis 的內存溢出控制策略 maxmemory-policy 的可選值都有哪些,分別對應的策略是什麼含義,適用於哪些場景等。原理研究,針對關鍵特性進行研究,比如 Netty 的異步 NIO 和零拷,HikariCP的高並發優缺點對比,同類型開源產品對比,一般某一領域的開源項目往往有多個,比如說 Redis 和 Memcache,Kafka 和 RocketMQ,這些項目之間往往各有優劣,適用場景
  • java和php在web開發方面對比分析
    語法和c語言比較象,所以學過c語言的程式設計師可以很快的熟悉php的開發。而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。java首先要編譯成字節碼.class文件,然後在java虛擬機上解釋執行。
  • Minidao 1.6.2 發布,輕量 Java 持久化框架
    Minidao 1.6.2 版本發布,超輕量Java持久化框架(Hibernate完美助手)升級日誌
  • 2016 年 5 個最佳的 Java 框架
    在這裡,我們已經挖掘了一些關於框架趨勢的有用信息,以減輕全球軟體開發人員的日常工作。根據RebelLabs,也是在線Java用戶組(虛擬JUG)的媒體盟友所進行的調查,2016年最佳java框架的陣容如下:
  • Java常用框架的優缺點
    在進行Java學習的過程中,紮實的基礎知識是非常重要的,但是在掌握基礎知識的同時,最關鍵的就是Java框架的使用。在軟體開發項目中,需要正確的使用框架,不同框架的功能是不同的,所以我們應該在選擇之前對框架有深刻的認識。下面小編為大家介紹一些常用框架的優缺點。
  • Java和PHP在Web開發方面的比較
    而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。Java首先要編譯成字節碼.class文件,然後在java虛擬機上解釋執行。Jsp可以通過servlet和JavaBean的支持產生強大的功能。JavaBean 是一種可復用的、跨平臺的軟體組件。使用javabean可以方便的實現java代碼和html的分離,能夠增強系統的功能和軟體的復用性。Java的Web開發屬於SUN公司定義的J2EE其中的規範。
  • Java和PHP在Web開發方面的八大對比
    語法和c語言比較象,所以學過c語言的程式設計師可以很快的熟悉php的開發。而java需要先學好java的語法和熟悉一些核心的類庫,懂得面向對象的程序設計方法。所以java不如php好學。  Java首先要編譯成字節碼.class文件,然後在java虛擬機上解釋執行。
  • 【Java拾遺】不可不知的 Java 序列化
    對於任何一門語言來說,不管它是編譯型還是解釋型,只要它需要通訊或者持久化時,就必然涉及到序列化與反序列化操作。但是,又正因為序列化與反序列化太過重要,太過普遍,大部分程式語言和框架都對其進行了很好的封裝,又因為他的潤物細無聲,使得我們很多時候根本沒有意識到,代碼下面其實進行了許許多多序列化相關的操作。今天我們就一起去探尋這位最熟悉的陌生人。
  • 作為一個Java 程式設計師 你應該會什麼
    ◆java.util 包下的80%以上的類的靈活運用,特別是集合類體系、規則 表達式、zip、以及時間、隨機數、屬性、資源和Timer.◆java.io 包下的60%以上的類的使用,理解IO 體系的基於管道模型的設計思路以及常用IO 類的特性和使用場合。◆java.math 包下的100%的內容。
  • 2020年女生學php還是java好嗎
    2020年女生學php還是java好嗎?對於選擇困難症同胞們來說是一個很難抉擇的問題,PHP簡單強大,Java數據處理更有優勢,事實上兩者紛爭已經開始很久了,下面我們從各方面來對PHP和Java做一個全面的比較。
  • 一次簡單的SSH框架體驗之旅
    (引用自百度百科)Struts 採用MVC模式,主要是作用於用戶交互。spring 採用IOC和AOP~作用比較抽象,是用於項目的鬆耦合。hibernate 是對象持久化框架,其實就是實體類和資料庫表建立關係,操作類就會觸發相應的sql語句,可以不用寫任何sql語句,完成資料庫編程(引自百度知道)。
  • Java Dubbo 框架編譯運行
    Dubbo是一套開源的Java框架,採用全Spring配置方式,可用來對外提供api接口。Dubbo源碼在github上。從github上倉庫apache/incubator-dubbo下載Dubbo的原始碼,需要系統中已安裝java sdk和maven,java sdk是編譯工具,maven是倉庫依賴管理工具。進入incubator-dubbo目錄,使用maven來編譯軟體包,運行命令mvn package生成軟體包jar文件。
  • 編程沒有銀彈:探討 Java 8 新增特性的優缺點
    下面就讓我們一起來看下這些偉大的功能,看看它們各自的優缺點,好讓你更好地應用在項目中。Streams集合(Collections)的改進也是Java 8的一大亮點,而讓集合越來越好的核心組件則是「Stream」。它與java.io包裡的InputStream和OutputStream是完全不同的概念,它是一個全新的概念,大家不要混淆。
  • 最受歡迎的 Java Web 開發框架盤點
    在本文,我們來看如今哪些Java Web框架目前最為歡迎。 本文的首選表列表源自Hotframework.com中的Java框架排名,並綜合了其它一些來源,包括博客文章和Github下載數量。 Spring不僅僅是一個Web開發框架。它是建立在Java技術棧上一個完整的編程模型,從Spring Boot開始,後者是一種以最少配置啟動和運行Spring應用程式,並且不需要應用程式伺服器的方式。
  • Redis專題:萬字長文詳解持久化原理
    持久化流程在Redis內完成RDB持久化的方法有rdbSave和rdbSaveBackground兩個函數方法(源碼文件rdb.c中),先簡單說下兩者差別:RDB持久化的觸發必然離不開以上兩個方法,觸發的方式分為手動和自動。
  • redis學習(四)鍵空間數據持久化
    下面我們帶著是否要持久化、持久化方式、持久化流程、策略是怎樣的,有什麼優缺點這樣的問題開始下面的內容!一、持久化方式1、redis在4.0之前提供了RDB全量持久化、AOF增量持久化兩種持久化功能,因為RDB和AOF兩種持久化都有各自明顯的缺點所以4.0版本提供了混合持久化,先使用RDB在將這期間增量數據使用AOF方法添加到文件末尾。
  • 精選11道Java技術面試題並有答案(包含部分阿里和華為的面試題)
    4)分代收集算法:一般是把Java堆分為新生代和老年代,根據各個年代的特點採用最適當的收集算法。新生代都發現有大批對象死去,選用複製算法。老年代中因為對象存活率高,必須使用「標記-清理」或「標記-整理」算法來進行回收。JVM調優的常見命令行工具有哪些?JVM常見的調優參數有哪些?
  • Java後臺開發精選知識圖譜和全套視頻
    本文首先會給出關於java後臺開發和前端適配的一些建議學習路線,接著簡單解釋一些應用到的高頻技術,幫助大家理解和學習,算是一個入門篇。富文本在線編輯:CKEditor在線文件管理:CKFinder動態頁籤:Jerichotab手機端框架:Jingle數據表格:jqGrid對話框:jQuery jBox下拉選擇框:jQuery Select2樹結構控制項:jQuery zTree日期控制項: My97DatePicker
  • 面試官:數據持久化方式有哪幾種?怎麼配置多數據源?
    Spring Boot整合持久層的三種方式 在實際的Java開發中,不可避免的要對數據持久化,常用的持久化技術有MyBatis、Spring自帶的JdbcTemplate和Spring Boot提供的Jpa規範。在這篇文章中,我們會逐個講解這三種方式的使用及多數據源的配置。