核心價值:為分布式應用提供統一的命名查找機制,屏蔽底層 DNS、LDAP、文件系統、RMI Registry、Corba Naming Service、應用服務器內部對象等異構命名空間差異。
// 獲取初始上下文 (線程安全,可緩存)
Context ctx = new InitialContext();
// 查找綁定對象
MyEJBHome home = (MyEJBHome) ctx.lookup("myApp/myEJB");
// 綁定/重新綁定/解綁
ctx.bind("name", obj);
ctx.rebind("name", newObj);
ctx.unbind("name");
// 列出子上下文
NamingEnumeration list = ctx.list("subcontext");
// 創建/銷毀子上下文
Context subCtx = ctx.createSubcontext("sub");
ctx.destroySubcontext("sub");
java:comp/env/jdbc/MyDB — 數據源java:comp/env/jms/MyQueue — JMS 隊列/主題java:comp/env/ejb/MyEJB — EJB 引用java:comp/env/mail/MyMail — JavaMail Sessionjava:comp/env/url/MyURL — URL 連接工廠應用組件僅依賴邏輯名稱,部署描述符映射到物理資源,實現「開發時邏輯配置,部署時物理綁定」。
| 類型 | 狀態管理 | 生命周期 | 適用場景 | 故障恢復 |
|---|---|---|---|---|
| Stateless Session Bean | 無會話狀態,實例等價 | 極短,池化復用 | 業務服務門面、工具方法、Web Service 端點 | 不可恢復,需冪等設計 |
| Stateful Session Bean | 維持客戶會話狀態 | 較長,激活/鈍化 | 購物車、向導式流程、會話級緩存 | 可配置狀態複製實現高可用 |
| Entity Bean (CMP/BMP) | 持久化標識狀態 | 長,跨服務器重啟存活 | 共享業務實體 (客戶、訂單、產品) | 數據庫級持久,天然高可用 |
create()、findByPrimaryKey()、remove()、Home 业务方法)ejbCreate、ejbLoad/Store、ejbActivate/Passivate、ejbRemove)method-permission)、程序化檢查 (isCallerInRole)、運行時身份 (getCallerPrincipal)_jspService())@page、@include、@taglib)、腳本元素 (%!、%、%=)、動作 (jsp:useBean、jsp:set/getProperty、jsp:include、jsp:forward)、EL 表達式 (${expr})、JSTL 標簽庫request、response、session、application、out、pageContext、config、page、exceptionServlet → GenericServlet → HttpServletinit() → service() (分發 doGet/doPost/doPut/doDelete) → destroy()ServletContext (應用級)、HttpServletRequest/Response、HttpSession、Filter、Listener、AsyncContext (Servlet 3.0+ 異步)rmiregistry / JNDI 綁定idlj 生成 Stub/TieUserTransaction:應用程序化事務邊界 (begin/commit/rollback/setRollbackOnly)TransactionManager:容器管理事務邊界、掛起/恢復XAResource:資源管理器實現兩階段提交 (Prepare/Commit/Rollback)Session (線程安全、配置屬性) → Transport.send(message) / Store.getFolder()DataHandler 處理 MIME 類型檢測、命令映射、Bean 轉換| 需求 | 首選技術 | 備選/補充 |
|---|---|---|
| 命名查找/資源引用 | JNDI | Spring @Resource/@Autowired |
| 分布式業務邏輯/事務/安全 | EJB 3.x (SLSB/SFSB/JPA) | Spring @Transactional + POJO |
| 動態 Web 頁面渲染 | JSP + JSTL/EL | Thymeleaf/FreeMarker + Spring MVC |
| REST API / 異步處理 / Filter 鏈 | Servlet 3.1+ (Async/Non-blocking) | Spring WebFlux / Netty |
| Java 進程間遠程調用 | RMI / gRPC / Dubbo | Spring Remoting / HTTP JSON |
| 異構系統集成 (Mainframe/C++/ERP) | CORBA / Web Services / REST | JCA Adapter / 消息隊列 |
| 分布式事務 (跨多個 DB/Queue) | JTA (XA) / Saga / TCC | Seata / 事件溯源 |
| 郵件通知/附件處理 | JavaMail + JAF | Spring Mail / Apache Commons Email |
| 異步解耦/事件驅動/高吞吐 | JMS (Kafka/RocketMQ/RabbitMQ) | Spring Event / Reactor / Disruptor |
| 配置/數據交換/文檔生成 | XML (JAXB/StAX/XSLT) | JSON (Jackson/Gson) / YAML / Protobuf |
理解 13 大核心技術的定位、契約與邊界,是 J2EE 架構師駕馭複雜企業級系統、做出正確技術決策的基石。