Enterprise JavaBeans (EJB) 是 J2EE 平台的基石,定義了開發與部署分散式、交易性、安全伺服器端商業元件的規範。在這個架構中,開發者專注於封裝商業邏輯與規則,而基礎設施服務(交易、持久化、安全等)則由容器或伺服器代管。甚至執行期屬性可透過部署描述檔靈活配置,實現「寫一次、到處部署」的理想。
本文聚焦於 Bean 提供者與 EJB 元件實作程式碼的編程限制。
為確保元件穩定、可移植,開發者必須嚴格避免在實作類中使用以下 Java 特性:
所有 static 欄位必須宣告為 final,確保跨 JVM 一致的執行期語義,賦予容器在多虛擬機間分發實例的彈性。
禁止使用 synchronized、wait/notify 等同步機制,避免與容器管理的並發控制衝突。
伺服器端商業元件不應包含使用者介面邏輯。
資料持久化應透過 JDBC 等資源管理器,環境屬性可透過 JNDI 查詢,排除直接檔案操作需求。
不得監聽/接受 Socket 連線,但可作為 Socket/RMI 客戶端與外部通訊。
強化 Java 平台安全性,防止繞過存取控制。
保留容器對執行環境的完全管控權。
禁止啟動/停止/管理執行緒,消除與容器死鎮偵測、並發管理的衝突。
涵蓋檔案描述符直接讀寫、安全策略查詢、原生函式庫載入、受限套件/類別存取、安全配置物件修改、序列化替代機制等,堵塞潛在安全漏洞。
嚴禁將 this 作為參數或回傳值,必須透過 SessionContext 或 EntityContext 的 getEJBObject() 取得遠端參考。
這些限制雖屬 Java 標準特性,但違反者編譯期不會報錯,卻會導致跨容器移植失敗與不可預測的運行時問題。開發者務必內化為編碼紀律。