第 17 章 使用Spring进行远程访问与Web服务

目录

17.1. 简介
17.2. 使用RMI暴露服务
17.2.1. 使用 RmiServiceExporter 暴露服务
17.2.2. 在客户端链接服务
17.3. 使用Hessian或者Burlap通过HTTP远程调用服务
17.3.1. 为Hessian配置DispatcherServlet
17.3.2. 使用HessianServiceExporter暴露你的bean
17.3.3. 客户端连接服务
17.3.4. 使用Burlap
17.3.5. 对通过Hessian或Burlap暴露的服务使用HTTP基础认证
17.4. 使用HTTP调用器暴露服务
17.4.1. 暴露服务对象
17.4.2. 在客户端连接服务
17.5. Web服务
17.5.1. 使用JAXI-RPC暴露服务
17.5.2. 访问Web服务
17.5.3. 注册bean映射
17.5.4. 注册自己的处理方法
17.5.5. 使用XFire来暴露Web服务
17.6. 对远程接口不提供自动探测
17.7. 在选择这些技术时的一些考虑

17.1. 简介

Spring为各种远程访问技术的集成提供了工具类。Spring远程支持是由普通(Spring)POJO实现的,这使得开发具有远程访问功能的服务变得相当容易。目前,Spring支持四种远程技术:

  • 远程方法调用(RMI)。通过使用 RmiProxyFactoryBeanRmiServiceExporter,Spring同时支持传统的RMI(使用java.rmi.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的透明远程调用(支持任何Java接口)。

  • Spring的HTTP调用器。Spring提供了一种特殊的允许通过HTTP进行Java串行化的远程调用策略,支持任意Java接口(就像RMI调用器)。相对应的支持类是 HttpInvokerProxyFactoryBeanHttpInvokerServiceExporter

  • Hessian。通过 HessianProxyFactoryBeanHessianServiceExporter,可以使用Caucho提供的基于HTTP的轻量级二进制协议来透明地暴露服务。

  • Burlap。 Burlap是Caucho的另外一个子项目,可以作为Hessian基于XML的替代方案。Spring提供了诸如 BurlapProxyFactoryBeanBurlapServiceExporter 的支持类。

  • JAX RPC。Spring通过JAX-RPC为远程Web服务提供支持。

  • JMS(待实现)

在讨论Spring对远程访问的支持时,我们将使用下面的域模型和对应的服务:

// Account domain object
public class Account implements Serializable{
  private String name;

  public String getName();
  public void setName(String name) {
    this.name = name;
  }
}
			

// Account service
public interface AccountService {

  public void insertAccount(Account acc);

  public List getAccounts(String name);
}
			

// Remote Account service
public interface RemoteAccountService extends Remote {

  public void insertAccount(Account acc) throws RemoteException;

  public List getAccounts(String name) throws RemoteException;
}
			

// ... and corresponding implement doing nothing at the moment
public class AccountServiceImpl implements AccountService {

  public void insertAccount(Account acc) {
    // do something
  }

  public List getAccounts(String name) {
    // do something
  }
}
			

我们将从使用RMI把服务暴露给远程客户端开始并探讨使用RMI的一些缺点。然后我们将演示一个使用Hessian的例子。