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

Session Bean 規範詳解 (四):實作要求、介面限制與最佳實踐

     編輯:Java 相關知識

前言

EJB 規範對 Session Bean 有嚴格要求,確保 Bean 在容器中正確運行、可被工具處理、支援分散式部署。本文系統整理實作類別、Remote/Home 介面的強制規定、禁止事項與最佳實踐。

一、實作類別強制要求

1. 必須實作 SessionBean 介面


public class MyBeanImpl implements SessionBean { ... }

2. 類別宣告規範

  • public:容器需實例化
  • 非 final:允許容器產生子類別 (代理模式)
  • 非 abstract:需可直接實例化

3. 建構子


public MyBeanImpl() {} // 必須為 public、無參數

4. 禁止實作 finalize()

資源清理需在 ejbRemove()、ejbPassivate() 中進行,容器不保證呼叫 finalize。

5. 必須實作所有介面方法

  • Home 介面每個 create(...) → 對應 ejbCreate(...)
  • Remote 介面每個業務方法 → 同名同簽名實作

6. 方法實作限制

限制說明
public容器需透過反射呼叫
非 static需在實例上運作
非 final允許容器覆寫 (攔截器模式)
參數/回傳型別須為 RMI/IIOP 合法型別基本型別、Serializable 物件、Remote 介面
方法名不可用 ejb 開頭避免與容器回呼方法衝突
不拋出 RemoteException實作類別拋出 EJBException (Runtime)

7. 可選:實作 Remote 介面


// 優點:編譯期檢查方法簽名完整性
public class MyBeanImpl implements SessionBean, MyRemote { ... }

// 缺點:誤用 this 傳遞而非 context.getEJBObject() 導致執行期錯誤
// 建議:不實作 Remote,由部署工具驗證

8. 可選:實作 SessionSynchronization

需參與交易同步處理的有狀態 Bean 可實作:


public interface SessionSynchronization {
    void afterBegin();      // 交易開始後
    void beforeCompletion(); // 交易提交前
    void afterCompletion(boolean committed); // 交易完成後
}

9. 可繼承其他類別、實作 Helper 方法

超類別可為另一 Bean 實作類;Helper 方法無可見性、參數、回傳型別限制。

二、Remote 介面限制

  • 繼承 javax.ejb.EJBObject (提供 getHandle、getPrimaryKey、remove、getEJBHome、isIdentical)
  • 所有方法拋出 java.rmi.RemoteException
  • 參數/回傳型別符合 RMI/IIOP
  • 所有方法必須在實作類別有對應實作
  • 可繼承其他介面 (父介面需繼承 EJBObject)

三、Home 介面限制

  • 繼承 javax.ejb.EJBHome (提供 remove(Handle)、remove(Object)、getEJBMetaData、getHomeHandle)
  • 所有方法拋出 RemoteException
  • 每個 create(...) 對應實作類別 ejbCreate(...)
  • create 方法拋出 CreateException
  • 參數/回傳型別符合 RMI/IIOP
  • Entity Bean 額外需提供 findByPrimaryKey 等查詢方法
  • 可繼承其他介面 (父介面需繼承 EJBHome)

四、最佳實踐總結

  1. 介面優先設計:先定義 Remote/Home,再實作 Bean,確保契約清晰
  2. 命名一致性:Bean 名 XXX、Remote XXX、Home XXXHome、實作 XXXImpl 或 XXXBean
  3. 不實作 Remote 介面:避免 this 傳遞陷阱,依賴部署工具驗證
  4. 例外分層:系統例外 → EJBException;業務例外 → 應用例外 (Checked)
  5. 資源在生命週期方法管理:ejbCreate 取得、ejbPassivate 釋放、ejbActivate 重取、ejbRemove 清理
  6. 使用 DataSource + JNDI:勿硬編碼 JDBC URL、帳密、驅動類別
  7. PreparedStatement 防注入:所有動態 SQL 使用參數綁定
  8. finally 區塊關閉 Statement/ResultSet:防止資源洩漏

結語

Session Bean 規範雖顯繁瑣,每項限制皆為了確保:容器可管理生命週期、支援分散式呼叫、工具可驗證正確性、交易與安全機制生效。遵循規範並採用最佳實踐,才能開發出健壯、可維護、可攜遷的企業級元件。

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