一、基础概念
1. JAX-RPC
- 全称:Java API for XML-based Remote Procedure Call
- 定位:Java 早期 SOAP Web Service 规范(J2EE 1.4),基于 SOAP 1.1、XML RPC,用于开发、调用 SOAP Web 服务。
- 核心:提供一套 API 定义Web Service 服务端点(Endpoint),把 Java 类暴露成可通过 SOAP 调用的远程服务。
- 现状:已淘汰,被 JAX-WS 完全替代。
2. EJB 服务端点(EJB Endpoint)
EJB 分三类,其中会话Bean(Stateless/Stateful SessionBean) 可作为两种端点:
- 本地/远程 EJB 端点:基于 RMI-IIOP,Java 二进制私有协议,仅限Java客户端;
- Web Service 端点(EJB 发布为SOAP服务):把无状态会话Bean通过JAX-RPC/JAX-WS包装成Web Service对外暴露。
二、JAX-RPC 服务端点两种实现形式
形式1:Java Bean Endpoint(POJO 端点)
普通Java类,加JAX-RPC注解/部署描述符,无需EJB容器,Web容器(Tomcat)即可部署。 特点:轻量,只做Web服务,无事务、分布式事务、并发池等企业级能力。
形式2:EJB 服务端点(Stateless Session Bean + JAX-RPC)
无状态会话Bean作为JAX-RPC服务实现类,EJB容器托管端点。
客户端SOAP请求 → Web容器 → JAX-RPC运行时 → EJB容器 → 无状态Bean业务逻辑
优势:复用EJB原生能力:声明式事务、安全、连接池、分布式事务、持久化。
三、EJB 原生RMI端点 vs JAX-RPC Web Service端点
| 对比维度 | EJB RMI-IIOP 服务端点 | JAX-RPC(基于EJB)Web Service端点 |
|---|---|---|
| 通信协议 | RMI-IIOP 二进制协议 | SOAP 1.1 + HTTP + XML |
| 跨语言 | 仅Java客户端可用 | C#/PHP/Java 任意语言跨平台调用 |
| 部署容器 | 纯EJB容器 | Web容器+EJB容器协同 |
| 数据格式 | Java序列化对象 | XML文本 |
| 标准规范 | EJB 2.x/3.x 规范 | JAX-RPC 1.0/1.1 |
| 安全模型 | EJB容器JAAS本地安全 | SOAP Header 安全、HTTP基础认证 |
| 适用场景 | 内部Java微服务/企业内部调用 | 对外异构系统集成、SOA对外接口 |
四、JAX-RPC 与 EJB 端点核心关联关系
- EJB 是业务载体,JAX-RPC 是对外Web服务包装层 无状态SessionBean本身不能直接被HTTP/SOAP调用,必须依靠JAX-RPC提供Web服务端点;
- 只有无状态会话Bean(Stateless) 能作为JAX-RPC端点,有状态Stateful、实体Bean不支持;
- 调用链路: 外部异构客户端(HTTP SOAP) → JAX-RPC端点 → 委托底层EJB执行业务; 内部Java客户端:直接RMI调用EJB远程端点,不走JAX-RPC。
五、关键区别:JAX-RPC API 本身 ≠ EJB端点
- 纯JAX-RPC POJO端点 不依赖EJB,普通Java类,部署在Web容器,无EJB事务、池化能力。
- EJB作为JAX-RPC服务端点 是组合方案:EJB提供企业级业务能力,JAX-RPC提供跨语言SOAP访问入口。
六、淘汰演进脉络
- J2EE1.4:JAX-RPC + EJB2.x 实现SOAP Web服务端点;
- JavaEE5+:废弃JAX-RPC,推出 JAX-WS 2.0(SOAP 1.2),简化注解,兼容EJB3;
- 现代微服务:抛弃SOAP,使用JAX-RS(RESTful)作为HTTP接口端点。
七、总结简答
- JAX-RPC 是早期Java SOAP Web服务API,用于构建XML RPC服务端点;
- 无状态会话EJB可作为JAX-RPC的服务实现端点,结合EJB事务、安全特性;
- EJB原生远程端点基于RMI-IIOP,仅Java互通;JAX-RPC端点基于SOAP,支持跨语言;
- JAX-RPC已过时,替代方案JAX-WS,REST接口使用JAX-RS。
注意:本文归作者所有,未经作者允许,不得转载