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

Session Bean 完整指南:狀態管理、活化鈍化與無狀態設計模式

     編輯:J2EE

Session Bean 概述

Session Bean 由 Home 介面建立,專屬於單一客戶端連線,不共享於多客戶端,因此可維護客戶端會話狀態。典型例子如購物車:每位顧客擁有獨立購物車,互不干擾。

Session Bean 介面定義

實作 javax.ejb.SessionBean 介面,包含生命週期回呼方法:

  • ejbActivate():從鈍化狀態恢復
  • ejbPassivate():進入鈍化狀態前釋放資源
  • ejbRemove():實例移除前清理
  • setSessionContext(SessionContext):注入會話上下文

javax.ejb.EnterpriseBean 為空介面,作為 Session/Entity Bean 的超介面。

實例交換與活化/鈍化機制

容器可將閒置超時的 Session Bean 實例從主存序列化至次級存儲(鈍化),需要時再反序列化回主存(活化)。ejbPassivate() 與 ejbActivate() 讓開發者顯式管理非序列化資源(如資料庫連線),避免依賴 transient 欄位(序列化會重置為 null/0,且不可攜)。若容器不支援交換,這兩方法永不被調用。參與交易的 Bean 不會被鈍化。

狀態管理:有狀態 vs 無狀態

有狀態 Session Bean

  • 跨方法呼叫維護客戶端會話狀態
  • 部署描述符宣告 stateful
  • ejbCreate() 可帶參數初始化狀態
  • 支援 SessionSynchronization 介面感知交易邊界

無狀態 Session Bean

  • 方法呼叫間不保留任何狀態
  • 部署描述符宣告 stateless
  • 不可被鈍化,容器直接銷毀閒置實例
  • 客戶端呼叫時容器從池中取用或新建實例
  • 可跨客戶端共享實例(同一時間僅服務一客戶端)
  • ejbCreate() 必須無參數(否則暗示需維護狀態)
  • 不實作 SessionSynchronization
  • 節省記憶體,適合無狀態服務(如數學運算、轉換處理)

設計建議

無狀態 Bean 應避免在 ejbCreate 接受參數,廠商工具應檢查並阻擋。有狀態 Bean 適合多步驟商業流程(購物車、訂單精靈),無狀態 Bean 適合單一獨立操作。正確選擇狀態類型對效能與擴展性影響深遠。

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