J2EE 架構演進:從兩層到多層
傳統 C/S 兩層架構痛點:客戶端承擔業務邏輯+展示,難維護、難擴展、協議私有。
J2EE 定義標準化多層架構:
┌─────────────────────────────────────┐
│ 客戶層:瀏覽器 / Java Applet / 應用客戶端 │
├─────────────────────────────────────┤
│ 表現層:JSP / Servlet / JSF / Web Service │
├─────────────────────────────────────┤
│ 業務邏輯層:Session EJB / POJO / Spring Bean │
├─────────────────────────────────────┤
│ 數據訪問層:Entity EJB / JPA / Hibernate / JDBC │
├─────────────────────────────────────┤
│ 數據層:關係數據庫 / 舊系統 / ERP │
└─────────────────────────────────────┘
13 種核心技術分類速覽
數據訪問類
| 技術 | 全稱 | 核心作用 |
| JDBC | Java Database Connectivity | 統一關係數據庫訪問 API,DriverManager/DataSource/Connection/Statement/ResultSet |
| JPA | Java Persistence API | ORM 標準(EJB 3.0+),EntityManager、JPQL、實體生命周期 |
命名與目錄服務
| 技術 | 全稱 | 核心作用 |
| JNDI | Java Naming and Directory Interface | 統一命名服務:DataSource、EJB、JMS、環境變量查找,Context/InitialContext |
組件模型
| 技術 | 全稱 | 核心作用 |
| EJB | Enterprise JavaBeans | 業務組件:Session Bean(有狀/無狀)、Message-Driven Bean、Entity Bean(舊)、事務/安全/並發容器管理 |
遠程通信
| 技術 | 全稱 | 核心作用 |
| RMI | Remote Method Invocation | Java 遠程調用:Stub/Skeleton、Registry、序列化、RMI-IIOP 支持 CORBA 互操作 |
| Java IDL | Java IDL (CORBA) | CORBA 集成:IDL 定義接口、ORB、跨語言調用 |
Web 技術
| 技術 | 全稱 | 核心作用 |
| Servlet | Servlet API | 服務端請求處理:HttpServlet、Filter、Listener、異步處理、WebSocket |
| JSP | JavaServer Pages | 動態頁面模板:標簽庫、EL 表達式、JSTL、編譯為 Servlet |
數據交換
| 技術 | 全稱 | 核心作用 |
| XML | eXtensible Markup Language | 配置、數據交換、Web Service、JAXP/JAXB 處理 |
消息中間件
| 技術 | 全稱 | 核心作用 |
| JMS | Java Message Service | 異步消息:Point-to-Point (Queue)、Pub/Sub (Topic)、Connection/Session/Producer/Consumer、MDB 集成 |
事務管理
| 技術 | 全稱 | 核心作用 |
| JTA | Java Transaction API | 分布式事務:UserTransaction、TransactionManager、XAResource、兩階段提交 |
| JTS | Java Transaction Service | 事務服務實現:CORBA OTS 映射、事務傳播、JTA 的底層實現 |
企業集成
| 技術 | 全稱 | 核心作用 |
| JavaMail | JavaMail API | 郵件發送/接收:Session、Message、Transport、Store、SMTP/IMAP/POP3 |
| JAF | JavaBeans Activation Framework | 數據內容處理:DataHandler、DataSource、CommandMap、MIME 類型識別、JavaMail 依賴 |
WebLogic 應用服務器集成示例
DataSource 配置 (config.xml)
<jdbc-connection-pool name="MyPool"
driver="oracle.jdbc.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:ORCL"
user="scott" password="tiger" />
<jdbc-data-source name="MyDataSource"
pool-name="MyPool"
jndi-name="jdbc/MyDataSource" />
Session Bean 使用 JNDI 查找
@Stateless
public class OrderServiceBean implements OrderService {
@Resource(name="jdbc/MyDataSource")
DataSource ds;
public void createOrder(Order order) {
try (Connection conn = ds.getConnection()) {
// JDBC 操作
} catch (SQLException e) {
throw new EJBException(e);
}
}
}
JMS 消息發送
@Resource(mappedName="jms/OrderQueue")
Queue orderQueue;
@Resource(mappedName="jms/OrderQueueFactory")
ConnectionFactory cf;
public void sendOrder(Order order) {
try (JMSContext ctx = cf.createContext()) {
ctx.createProducer().send(orderQueue, order);
}
}
技術選型演進路線
早期 J2EE (1.2/1.3) 現代 Java EE / Jakarta EE
├─ Entity Bean (CMP/BMP) → ├─ JPA (Hibernate/EclipseLink)
├─ Session Bean (Remote) → ├─ Local EJB / CDI Bean / Spring
├─ JSP + Servlet → ├─ JSF / Facelets / Thymeleaf / REST API
├─ JAX-RPC (SOAP) → ├─ JAX-RS (REST) / gRPC
├─ JMS (Vendor Queue) → ├─ JMS / Kafka / RabbitMQ
├─ JTA (Full XA) → ├─ JTA / Saga / Eventual Consistency
└─ JavaMail / JAF → └─ JavaMail / Spring Mail / SendGrid SDK
WebLogic 核心優勢
- 標準完整實現所有 13 種技術
- 管理控制台強大:部署、監控、診斷、配置
- 集群、負載均衡、失敗轉移成熟
- WLST 腳本自動化運維
- 生產級性能調優工具(JRockit Mission Control)
總結
理解 J2EE 13 種技術的定位、交互邊界、演進方向,是架構師設計企業級系統的基礎。現代發展趨勢:輕量級、標準化、雲原生、響應式,但核心問題域(事務、消息、持久化、安全、遠程調用)始終不變。