從 Applet 到企業級平台的演進
- JDK 1.0 時代: Applet 與 Application 為核心,無伺服器專用 API
- Servlet 規範誕生: 專為 Web 伺服器設計的 Java 類別,請求-回應模型,效能與可攜性遠超 CGI
- 三層架構興起: 解決兩層 (Client/Server) 擴展性瓶頸,中間層承載業務邏輯,Web Browser 成瘦客戶端
JavaBeans 組件模型奠基
- 可視化建構工具支援、屬性/方法/事件慣例、內省、持久化、可定制
- 非限於 GUI,同樣適用伺服器端
- EJB 將組件模型從客戶端延伸至伺服器端
J2EE 平台整合藍圖
Sun 發起 Java 2 Platform, Enterprise Edition (J2EE),整合關鍵技術:
- EJB、Java IDL、JMS、JNDI、RMI/序列化、Servlet、JTA/JTS、JSP、JDBC
- 各技術獨立規範,EJB 規範明確宣告對 JNDI (命名)、JTA (事務) 的相依
EJB 設計目標 (規範 1.0)
- 標準化分散式 OO 商務應用組件架構,支援多廠商組件組裝
- 簡化開發:應用開發者免處理事務、狀態、執行緒、資源共享等底層複雜度
- Write Once, Run Anywhere:Bean 僅開發一次,多平台部署免重編譯
- 涵蓋開發、部署、運行全生命週期
- 多廠商工具互操作約定
- 相容既有伺服器平台,廠商可擴展支援
- 相容其他 Java API
- 非 Java 應用互操作性
- 相容 CORBA
採用 EJB 的七大核心優勢
- 開發簡化: 容器代管系統服務 (事務、安全、連接池...)
- 可攜性: 標準化 Bean-Container API,跨環境免改碼
- 組件裝配: 如客戶端 JavaBeans 般裝配伺服器應用
- 內建企業服務: 分散式物件、事務、資料庫、安全、全域命名
- 多廠商選擇: Bean/Container/Server 可混搭,標準保證互操作
- 可擴展性: 組件嚴格分離,應用可跨伺服器遷移擴展
- 保護投資: Legacy 系統包裝成 Entity Bean 接入 Web 前端,免重寫
JNDI:命名服務的統一抽象層
雙層架構
- JNDI API: 應用端統一介面,廠商中立
- JNDI SPI: 服務提供者介面,對接 LDAP、NIS、COS Naming、檔案系統、RMI Registry、Novell NDS 等
核心概念
- Binding (名稱-物件綁定)、Context (綁定集合)、Naming System、Namespace
- 名稱分類:Atomic、Compound、Composite
- 所有操作從
InitialContext 起始
EJB 應用中的角色
Context ctx = new InitialContext();
CartHome home = (CartHome) PortableRemoteObject.narrow(
ctx.lookup("applications/shopping_cart"), CartHome.class);
容器部署時建立名稱綁定,應用透過 JNDI 查找 Bean 起始引用,實現位置透明。
JTA:分散式事務的 Java 標準
事務 ACID 特性
- Atomicity (原子性)、Consistency (一致性)、Isolation (隔離性)、Durability (持久性)
規範體系
- OMG OTS (Object Transaction Service) — 語言中立基礎
- JTS (Java Transaction Service) — OTS 的 Java Mapping (
org.omg.CosTransactions)
- JTA (Java Transaction API) — 應用層介面 (
javax.transaction),支援應用/伺服器/外部管理器三種管理模式
- XA Interface — 資源管理器與外部事務管理器協議,JTA 包含其 Java Mapping
關鍵介面
javax.transaction.UserTransaction:begin/commit/rollback/setTransactionTimeout,供 BMT Bean 與 Java 客戶端使用。
系列導讀
本文為三部曲第一篇。第二篇將深入程式設計模型、介面代理、容器架構與 Bean 類型;第三篇涵蓋部署流程、持久化策略、事務安全與三層架構實戰。