Session Bean 由 Home 介面建立,專屬於單一客戶端連線,不共享於多客戶端,因此可維護客戶端會話狀態。典型例子如購物車:每位顧客擁有獨立購物車,互不干擾。
實作 javax.ejb.SessionBean 介面,包含生命週期回呼方法:
ejbActivate():從鈍化狀態恢復ejbPassivate():進入鈍化狀態前釋放資源ejbRemove():實例移除前清理setSessionContext(SessionContext):注入會話上下文javax.ejb.EnterpriseBean 為空介面,作為 Session/Entity Bean 的超介面。
容器可將閒置超時的 Session Bean 實例從主存序列化至次級存儲(鈍化),需要時再反序列化回主存(活化)。ejbPassivate() 與 ejbActivate() 讓開發者顯式管理非序列化資源(如資料庫連線),避免依賴 transient 欄位(序列化會重置為 null/0,且不可攜)。若容器不支援交換,這兩方法永不被調用。參與交易的 Bean 不會被鈍化。
statefulejbCreate() 可帶參數初始化狀態SessionSynchronization 介面感知交易邊界statelessejbCreate() 必須無參數(否則暗示需維護狀態)SessionSynchronization無狀態 Bean 應避免在 ejbCreate 接受參數,廠商工具應檢查並阻擋。有狀態 Bean 適合多步驟商業流程(購物車、訂單精靈),無狀態 Bean 適合單一獨立操作。正確選擇狀態類型對效能與擴展性影響深遠。