Spring 远程调用:RMI、RMI-IIOP 与 JAX-RPC 详解
一、RMI 概述
RMI(Remote Method Invocation)是 Java 中实现远程方法调用的标准技术,Spring 对标准 RMI 基础设施提供了支持,其使用风格尽可能与 Hessian、Burlap 和 HTTP 调用器类似。标准 RMI - JRMP 包含在 JDK 中,使用 Java 序列化,与 Spring 的 HTTP 调用器相同,是一种 Java 到 Java 的远程解决方案,不针对跨平台远程调用。
与基于 HTTP 的远程策略不同,标准 RMI 不在 HTTP 级别工作,而是使用特殊的 TCP 端口进行通信,默认端口为 1099。导出的服务必须在 RMI 注册表中注册,该注册表可以在进程内启动,也可以在外部启动(可能由多个进程共享)。
传统 RMI 与 Spring 的 RMI 支持
传统 RMI 涉及使用 RMI 服务接口,即从 java.rmi.Remote
派生的接口,每个方法都声明了受检查的 java.rmi.RemoteException
。在 J2SE 1.4 及更早版本中,需要为每个服务实现运行 RMI 编译器(rmic)以生成相应的存根;在 J2SE 5.0 及更高版本中,RMI 运行时基础设施将动态生成代理。
Spring 支持传统风格的 RMI,但推荐使用 RMI 调用器作为替代方案,它在 RMI 之上使用普通的 Java 业务接口作为远程基础设施。对于 RMI 调用器服务,无论是在 J2SE 1.4 及更早版本,还是在 J2SE 5.0 中,都无需运