首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2EE 持久化方案對決(上):實體 Bean vs Session Bean + JDBC

     編輯:Java 相關知識

資料持久化是企業開發最棘手環節。企業級方案必須:提供快速客戶交易、確保長期資料完整性、在系統崩潰/網路故障時資料倖存。本系列兩集將深度剖析 J2EE 三大持久化技術。本集聚焦:實體 Bean(一站式方案)vs Session Bean + JDBC(更複雜但更健壯的組合)。

什麼是資料持久化?

持久資料存儲 = 即使伺服器崩潰仍存在的資料倉庫。NIST 定義三級持久性:

  • 部分持久:僅允許更新最新版本
  • 持久:保留舊版本,可查詢歷史版本(企業架構/DBMS 常見)
  • 完全持久:維護所有版本並允許更新(極罕見:日誌檔案系統、VMS、CVS)

大多數業務系統至少達部分持久,但交易中斷易導致資料損毀;持久系統透過「回滾」機制恢復至上一已知良好狀態。

J2EE 三大持久化技術

技術特點
實體 Bean容器管資料完整性/資源/併發,開發者專注業務邏輯。BMP 寫持久化代碼容器定時機;CMP 容器生成代碼並管邏輯
JDBC + Session Bean簡便 EJB 開發、跨平台部署、無 EJB 資源開銷。開發者寫持久化代碼與邏輯,自控何時持久化/載入
Java Data Objects (JDO)最新機制,面向物件持久化,操作 POJO 載入/儲存持久資料

實體 Bean 優勢

  • 標準化:廠商無關介面,最佳實踐、人才易得
  • 容器管理服務:安全、交易、連線池、資源管理全托管
  • 透明持久化:CMP 全自動;BMP 寫邏輯但容器管完整性/併發
  • 交易支援:CMP 宣告式粗粒度控制;BMP 程式化細粒度控制,容器統管提交/回滾
  • 元件化設計:部署描述符配置,零代碼修改跨伺服器部署

實體 Bean 痛點

  • 設計複雜:幾乎必經 Session Bean 存取(雙 Bean 交易),容器黑盒行為不可預測,需大量場景測試
  • 構建週期長:迭代週期比同級方案長 2-3 倍
  • 回應時間:受限 Bean 顆粒度,大實體查詢慢,拆小則架構更複雜
  • 資源霸佔:佔用大量伺服器資源,大實體併發請求回應極慢

Session Bean + JDBC 運作機制

Session Bean 透過資源管理器連線工廠存取資料:

  1. JNDI 查詢 javax.sql.DataSource
  2. 取得 java.sql.Connection
  3. 純 JDBC 代碼:查詢、更新、預存程序、ResultSet 導航、交易提交/回滾

Session Bean + JDBC 四大優勢

  • 設計簡單:架構層面遠簡於實體 Bean
  • 細粒度控制:完全掌控快取、持久化、併發、同步(CMP 無控制權,BMP 僅定義「做什麼」不定「何時/何況做」)
  • 成熟穩定:JDBC 歷史 7+ 年(寫作時),可靠性與最佳實踐為寶貴資產
  • 極致速度:開發者完全控制資料存取,可針對特定任務優化,直接操作產生極快回應

三大缺點

  • 實作複雜:架構簡單但代碼常複雜——管理連線、確保完整性、處理交易語義、構建快取機制
  • 非固有交易性:實體 Bean 本質交易元件;Session Bean 需開發者在代碼中硬編碼交易語義,確保業務規則/流控/交易完整性容錯
  • 持久化非自動/不保證:實體 Bean 容器管持久化;Session Bean 開發者自負責資料落地安全存儲

實戰選型決策指南

決策維度選 Session Bean + JDBC選實體 Bean
讀寫模式頻繁讀、極少寫頻繁更新、高併發寫入
交易控制需最大控制粒度CMP 宣告式最容易;BMP 次之
上市時程BMP/Session Bean 視專案而定CMP 最快(宣告類型/名稱/部署設定,工具生成其餘)
資源使用極輕量資源密集型,大實體併發慎用

結語

雖趨勢偏好「原始 JDBC + 純無狀態 Session Bean」,但兩方案各有所長。關鍵在於:讀寫模式、交易控制需求、上市時程、資源預算四大維度權衡。下集將引入 JDO,三國演義終極對決——敬請期待!

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved