第15章 使用远程服务

概述:

  • 访问和发布RMI服务
  • 使用Hessian和Burlap服务
  • 使用Spring的HTTP invoker
  • 使用Spring开发Web服务

RPC模型 (Remote Procedure call)

RMI:   不考虑网络限制时(例如防火墙),访问/发布基于Java的服务  (两端全是java程序)

Hessian或 Burlap:  考虑网络限制时,通过HTTP访问/发布基于Java的服务。Hessian是二进制协议,而Burlap是基于XML的(语言不限)

HTTP invoker :  考虑网络限制,并希望使用基于XML或专有的序列化机制实现Java序列化时,访问/发布基于Spring的服务

JAX-RPC和JAX-WS :访问/发布平台独立的、基于SOAP的Web服务

调用过程

客户端-》代理-》服务端

1、使用RMI

1.1、发布RMI接口:

使用Spring不需要理会java.rmi.RemoteException

调用过程: RmiServiceExporter ->RMI 服务适配器->RMI注册表

默认绑定端口1099

1.2、客户端调用:

通过RmiProxyFactoryBean生成RMI代理对象与服务端进行交互


RMI的缺点: 难穿防火墙、两端都是java开发、如果序列化保证相同版本

2、使用Hessian和Burlap发布远程服务

与RMI最大不同,不要求服务端一定为java程序

Hessian:基于二进制 交互 性能高

Burlap:基于XML交互 可读性好

2.1、发布服务

首先继承com.caucho.hessian.server.HessianServlet类

Hessian:的过程

DispatcherServlet->HessianServiceExporter->具体实现类

DispatcherServlet 如何将URL转发给Hessian 通过 SimpleUrlHandleMapping

@Bean

public HandlerMapping hessianMapping(){

SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();

Properites mappings = new Properties();

mappings.setProperty("/spitter.service", "hassianExportedSpitterService");

mapping.setMappings(mappings);

return mapping;

}

Burlap:的过程

DispatcherServlet->BurlapServiceExporte->具体实现类

与Hessian类似

2.2 调用服务

代理beanFactory : HessianProxyFactoryBean 、BurlapProxyFactoryBean

优点:不惧防火墙

缺点:数据模型不能太复杂

3、使用Spring的HttpInvoker

修复RMI防火墙的缺点

HttpInvokerServiceExporter :过程类似Hessian,也是通过SimpleUrlHandlerMapping 将URL转发

缺点:两边必须为Spring应用程序

4、发布和使用Web服务

SOA(面向服务的架构)

Spring为使用Java API for XML Web Service(JAX-WS)

包装:SimpleJaxWsServiceExporter

SimpleJaxWsServiceExporter要求JAX-WS运行时支持将端点发布到指定地址上。Sun JDK 1.6自带的JAX-WS可以符合要求,但是其他的JAX-WS实现,包括JAX-WS的参考实现,可能并不能满足此需求。

采用注解:@WebService  和 @WebMethod

SpringBeanAutowiringSupport很有用。在合适场景下,还是可以把Spring管理的bean导出为JAX-WS端点的。

需要用到WSDL标签

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值