首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> J2EE

J2EE 13 大核心技術深度解析 (二):JNDI、EJB、JSP、Servlet、RMI、CORBA、JTA、JavaMail、JMS、XML

     編輯:J2EE

JNDI:統一命名與目錄服務

核心價值:為分布式應用提供統一的命名查找機制,屏蔽底層 DNS、LDAP、文件系統、RMI Registry、Corba Naming Service、應用服務器內部對象等異構命名空間差異。

核心 API

// 獲取初始上下文 (線程安全,可緩存)
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");

J2EE 標準命名約定 (java:comp/env)

  • java:comp/env/jdbc/MyDB — 數據源
  • java:comp/env/jms/MyQueue — JMS 隊列/主題
  • java:comp/env/ejb/MyEJB — EJB 引用
  • java:comp/env/mail/MyMail — JavaMail Session
  • java:comp/env/url/MyURL — URL 連接工廠

應用組件僅依賴邏輯名稱,部署描述符映射到物理資源,實現「開發時邏輯配置,部署時物理綁定」。

EJB:分布式業務組件模型

三大 Bean 類型對比

類型狀態管理生命周期適用場景故障恢復
Stateless Session Bean無會話狀態,實例等價極短,池化復用業務服務門面、工具方法、Web Service 端點不可恢復,需冪等設計
Stateful Session Bean維持客戶會話狀態較長,激活/鈍化購物車、向導式流程、會話級緩存可配置狀態複製實現高可用
Entity Bean (CMP/BMP)持久化標識狀態長,跨服務器重啟存活共享業務實體 (客戶、訂單、產品)數據庫級持久,天然高可用

統一架構契約

  • Home Interface:生命周期管理 (create()、findByPrimaryKey()、remove()、Home 业务方法)
  • Remote/Business Interface:業務方法契約 (RMI-IIOP/本地調用)
  • Bean Class:實現業務邏輯、回調方法 (ejbCreate、ejbLoad/Store、ejbActivate/Passivate、ejbRemove)
  • Deployment Descriptor (ejb-jar.xml):事務屬性、安全角色、資源引用、環境條目、查詢定義 (EJB QL)

容器服務 (核心價值)

  1. 事務管理:聲明式事務 (Required/RequiresNew/Mandatory/NotSupported/Never/Supports),分布式事務 (JTA/XA)
  2. 安全性:聲明式授權 (method-permission)、程序化檢查 (isCallerInRole)、運行時身份 (getCallerPrincipal)
  3. 資源池化:實例池、數據庫連接池、線程池、JMS 連接池
  4. 並發控制:單線程訪問 Bean 實例 (SLSB 除外),容器序列化調用
  5. 持久化管理:CMP 容器自動生成 SQL、關係映射、延遲加載、優化查詢
  6. 生命周期管理:創建、激活、鈍化、移除、異常處理

JSP/Servlet:Web 表現層雙子星

JSP (JavaServer Pages)

  • 本質:模板引擎,編譯為 Servlet (_jspService())
  • 核心語法:指令 (@page、@include、@taglib)、腳本元素 (%!、%、%=)、動作 (jsp:useBean、jsp:set/getProperty、jsp:include、jsp:forward)、EL 表達式 (${expr})、JSTL 標簽庫
  • 隱含對象:request、response、session、application、out、pageContext、config、page、exception
  • 最佳實踐:無腳本元素、盡量 JSTL/EL、業務邏輯前置至 Controller/Service

Servlet

  • 核心接口:Servlet → GenericServlet → HttpServlet
  • 生命周期:init() → service() (分發 doGet/doPost/doPut/doDelete) → destroy()
  • 線程模型:單實例多線程,實例變量非線程安全,請求數據放局部變量或 Request 屬性
  • 核心 API:ServletContext (應用級)、HttpServletRequest/Response、HttpSession、Filter、Listener、AsyncContext (Servlet 3.0+ 異步)

分布式通訊與事務:RMI、CORBA、JTA/JTS

RMI (Remote Method Invocation)

  • Java 原生遠程調用:Stub/Skeleton (舊) / 動態代理 (新)、JRMP 協議、序列化傳輸
  • EJB 底層通訊基礎,RMI-IIOP 支持 CORBA 互操作
  • 註冊表:rmiregistry / JNDI 綁定

Java IDL / CORBA

  • IDL 定義語言無關接口,idlj 生成 Stub/Tie
  • ORB (Object Request Broker) 透明路由請求
  • 雙向集成:Java 對象作為 CORBA 對象暴露 / Java 客戶端調用 Legacy CORBA 系統
  • 互操作性:GIOP/IIOP 協議,跨語言 (C++、COBOL、Python) 調用

JTA (Java Transaction API) / JTS (Java Transaction Service)

  • JTA:應用/應用服務器/資源管理器三方契約
    • UserTransaction:應用程序化事務邊界 (begin/commit/rollback/setRollbackOnly)
    • TransactionManager:容器管理事務邊界、掛起/恢復
    • XAResource:資源管理器實現兩階段提交 (Prepare/Commit/Rollback)
  • JTS:JTA 的 CORBA OTS 映射實現,事務管理器內核,支援分布式事務傳播
  • 事務傳播屬性:Required (默認)、RequiresNew、Mandatory、NotSupported、Supports、Never

企業級集成服務:JavaMail、JAF、JMS

JavaMail + JAF

  • 協議支持:SMTP (發送)、IMAP/POP3 (接收)、MIME 多部分郵件
  • Session (線程安全、配置屬性) → Transport.send(message) / Store.getFolder()
  • JAF (Activation Framework):DataHandler 處理 MIME 類型檢測、命令映射、Bean 轉換

JMS (Java Messaging Service)

  • 兩大域模型:
    • Point-to-Point (Queue):一對一、負載均衡、消息持久化保證
    • Publish/Subscribe (Topic):一對多、廣播、持久訂閱者 (離線接收)
  • 消息類型:Text/Map/Bytes/Object/Stream/StreamMessage
  • 核心特性:事務性會話、確認模式 (AUTO/CLIENT/DUPS_OK)、持久化/非持久化、優先級、過期時間、選擇器 (SQL92 子集過濾)
  • 集成價值:異步解耦、削峰填谷、事件驅動架構、跨系統集成 (Legacy 系統適配)

XML:跨平台數據交換標準

  • 與 Java 同源目標:平台無關性
  • Java/XML 綁定:JAXP (解析)、JAXB (對象映射)、SAX/DOM/StAX (流式/樹模型)、XSLT (轉換)、XPath/XQuery (查詢)
  • 企業應用:配置文件、Web Services (SOAP)、數據交換 (EDI/財務報文)、文檔生成 (FO/PDF)

總結:技術選型決策矩陣

需求首選技術備選/補充
命名查找/資源引用JNDISpring @Resource/@Autowired
分布式業務邏輯/事務/安全EJB 3.x (SLSB/SFSB/JPA)Spring @Transactional + POJO
動態 Web 頁面渲染JSP + JSTL/ELThymeleaf/FreeMarker + Spring MVC
REST API / 異步處理 / Filter 鏈Servlet 3.1+ (Async/Non-blocking)Spring WebFlux / Netty
Java 進程間遠程調用RMI / gRPC / DubboSpring Remoting / HTTP JSON
異構系統集成 (Mainframe/C++/ERP)CORBA / Web Services / RESTJCA Adapter / 消息隊列
分布式事務 (跨多個 DB/Queue)JTA (XA) / Saga / TCCSeata / 事件溯源
郵件通知/附件處理JavaMail + JAFSpring Mail / Apache Commons Email
異步解耦/事件驅動/高吞吐JMS (Kafka/RocketMQ/RabbitMQ)Spring Event / Reactor / Disruptor
配置/數據交換/文檔生成XML (JAXB/StAX/XSLT)JSON (Jackson/Gson) / YAML / Protobuf

理解 13 大核心技術的定位、契約與邊界,是 J2EE 架構師駕馭複雜企業級系統、做出正確技術決策的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved