J2EE 平台服務:容器為組件提供的運行時契約
J2EE 平台服務是容器為部署組件提供的標準化運行時支持,核心目標:讓開發者專注業務邏輯,將基礎設施關注點(事務、安全、資源訪問、生命周期)下沉到容器。本筆記系統梳理命名服務、部署定制、事務管理、安全授權、服務技術棧與通信協議六大板塊。
1. 命名服務:JNDI 統一資源定位
- 客戶端通過 JNDI 查找 EJB、DataSource、JMS ConnectionFactory 等資源
- 組件獲取
InitialContext,在 java:comp/env 環境命名上下文中查找
- 支援邏輯名稱映射:開發期邏輯名 → 部署期物理 JNDI 名,實現配置解耦
- 標準查找模式:
ctx.lookup("java:comp/env/jdbc/MyDS")
2. 部署與定制:聲明式配置替代硬編碼
- 部署描述符(XML)定義組件裝配與環境依賴:
web.xml(Web 容器)、ejb-jar.xml(EJB 容器)
- 無需修改源碼即可定制:事務屬性、安全角色、資源引用、環境參數
- 部署單元:EAR(企業應用)、WAR(Web 模塊)、JAR(EJB/工具類)
3. 事務服務:ACID 語義的容器化實現
- JTA(Java Transaction API)統一事務邊界:
UserTransaction 編程式、@TransactionAttribute 聲明式(EJB 3.0+)
- 容器管理事務(CMT)為默認:方法維度自動 begin/commit/rollback
- 分佈式事務:XA 協議、兩階段提交、
XADataSource、XAResource
- 核心價值:將「不可分割的最小工作單元」與「錯誤恢復/併發控制」剝離業務代碼
4. 安全服務:聲明式授權模型
- 兩階段訪問控制:認證 + 授權
- 角色基礎訪問控制(RBAC):
@RolesAllowed、method-permission、security-role-ref
- 程序化安全:
EJBContext.isCallerInRole()、HttpServletRequest.isUserInRole()
- 傳輸層安全:SSL/HTTPS、客戶端證書認證
5. 服務技術棧:標準 API 統一異構資源
| API | 作用 | 關鍵特性 |
| JDBC | 關係數據庫訪問 | DataSource 池化、驅動類型 1-4、事務隔離級別 |
| JTA | 事務管理 | UserTransaction、TransactionManager、XA 支持 |
| JNDI | 命名/目錄服務 | 統一查找 LDAP/NDS/DNS/NIS、存儲任意 Java 對象 |
| JCA | 連接器架構 | 資源適配器、連接池、事務流入、消息流入、安全流入 |
| JMS | 消息服務 | P2P/發布訂閱、持久訂閱、事務性會話、MDB |
| JavaMail | 郵件服務 | SMTP/POP3/IMAP、MIME、認證 |
6. 通信協議:多協議互操作
- Internet 協議:TCP/IP、HTTP/HTTPS、SSL/TLS
- 遠程調用:RMI/JRMP、RMI-IIOP(CORBA 互操作)、Web Services (SOAP/HTTP)
- 對象管理:OMG CORBA、GIOP/IIOP、POA
- 數據格式:HTML 3.2、圖像、JAR、Class、XML(含 SOAP、WSDL、XSD)
學習路線圖建議
- 搭建 WebSphere 開發環境,跑通「Hello World」EJB + Servlet
- 深入 JNDI:邏輯引用 → 物理綁定 → 資源反射注入
- 掌握 CMT 聲明式事務:Required/RequiresNew/Mandatory/NotSupported/Never/Supports 六大屬性
- 實戰 RBAC:聲明式角色映射 + 程序化 isCallerInRole
- JCA 開發簡單資源適配器(如文件/ FTP 適配器)理解 SPI 契約
- 集群部署:會話複製、負載均衡、故障轉移、單點登入
目標:熟練使用 WebSphere 進行 J2EE 企業級開發,掌握容器服務原理與調優竅門。