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

EJB 三大類型深度解析:Session/Entity/Message-Driven Bean 選型指南

     編輯:Java 相關知識

EJB 2.0 定義三種 Bean 類型,各司其職構建企業級應用。本文結合電子商務購物場景,詳細對比 Session Bean (有/無狀態)、Entity Bean (BMP/CMP)、Message-Driven Bean 的適用場景與選型原則。

三大 Bean 類型核心定位

類型核心職責狀態特徵生命週期
Session Bean業務流程/邏輯/工作流執行有狀態/無狀態客戶端會話期間 / 池化複用
Entity Bean持久化業務資料實體永久狀態 (資料庫映射)容器管理 / Bean 管理持久化
Message-Driven Bean非同步訊息處理無狀態容器管理實例池,訊息驅動

Session Bean 兩種模式深度對比

維度Stateful (有狀態)Stateless (無狀態)
狀態保持維持客戶端會話狀態不保存會話狀態
實例關聯專屬實例綁定客戶端實例池共享,請求隨機分配
擴展性較差 (實例佔用資源)極佳 (少量實例服務大量客戶)
適用場景購物車、多步精靈、對話式流程查詢服務、工具方法、無狀態業務

Entity Bean 持久化策略

  • BMP (Bean Managed Persistence):開發者在 Bean 中手寫 JDBC/SQL,彈性高但負擔重
  • CMP (Container Managed Persistence):容器自動映射欄位至資料表,部署描述符配置關聯,開發效率高

Entity Bean 實例 = 資料庫記錄/視圖,支援關聯導航。

Message-Driven Bean (MDB) 特點

  • EJB 2.0 新增,實現 JMS 訊息非同步消費
  • 容器自動管理實例池,支援併發處理多條訊息
  • 無介面,僅實現 `MessageListener.onMessage()`
  • 適用:訂單異步處理、郵件發送、報表生成、系統整合事件

電子商務場景選型實戰

對象模型圖

領域對象EJB 類型選型理由
Customer / Order / Product / OrderLineItemEntity Bean (CMP)永久持久化資料,需資料庫映射,關聯導航
Cart / CartLineItemStateful Session Bean屬於特定客戶會話,多步操作需維持狀態
Pricer (估價器)Stateless Session Bean無狀態計算邏輯,多購物車/訂單共享,高併發
OrderProcessor (訂單處理器)Message-Driven Bean異步驅動:信用卡驗證、郵件通知、狀態持久化

業務流程串聯

  1. 客戶瀏覽商品 → 加入 Cart (Stateful SB)
  2. 即時查看總價 → Pricer 計算 (Stateless SB)
  3. 確認下單 → Cart 轉為 Order (Entity Bean)
  4. Pricer 計算訂單最終價格
  5. OrderProcessor (MDB) 接收訂單訊息 → 驗證信用卡 → 發送確認郵件 → 標記永久

現代架構演進提示

  • EJB 3 / JPA:Entity Bean → JPA Entity,Session Bean → POJO + `@Stateless`/`@Stateful`
  • Spring:`@Service` + `@Transactional` 替代無狀態 Session Bean
  • 事件驅動架構:MDB → Kafka/RabbitMQ + `@RabbitListener` / `@KafkaListener`
  • 有狀態會話:Redis Session Cluster / Spring Session 替代 Stateful SB

理解三大 Bean 本質定位,才能在微服務時代做正確的技術選型與遷移決策。

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