`
zhaohaolin
  • 浏览: 988950 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

使用Spring HTTP invoker进行远程调用

阅读更多

http://www.kompakar.com.cn/discuz/viewthread.php?tid=93&extra=page%3D1

6.4  使用Spring HTTP invoker进行远程调用

Spring 开发小组意识到在RMI服务和基于 HTTP的服务(如Hessian和Burlap)之间的空白。一方面,RMI使用Java标准的对象序列化,但很难穿越防火墙;另一方面, Hessian/Burlap能很好地穿过防火墙工作,但使用自己私有的一套对象序列化机制。

就这样,Spring的HTTP invoker应运而生。HTTP invoker是一个新的远程调用模型,作为Spring框架的一部分,来执行基于HTTP的远程调用(让防火墙高兴的事),并使用Java的序列化机制(让程序员高兴的事)。

使用基于HTTP invoker的服务和使用基于Hessian/Burlap的服务非常相似。为了开始学习HTTP invoker,让我们再来看一下这个支付服务——这一次将作为HTTP invoker支付服务来实现。

6.4.1  通过HTTP访问服务

要 访问RMI服务,得声明一个指向这个服务的 RmiProxyFactoryBean;要访问Hessian服务,得声明一个HessianProxyFactoryBean.;要访问Burlap 服务的话,得用BurlapProxyFactoryBean。把这样千篇一律的用法带到HTTP invoker上,应该也不会带来什么惊奇,那就是访问一个HTTP invoker服务,你需要使用HttpInvokerProxyFactoryBean。

要让支付服务作为一个HTTP invoker服务公开,得配置一个Bean,用HttpInvokerProxyFactoryBean来代理它,如下所示:

 

  <bean id="paymentService" class= "org.springframework.remoting.

          ➥httpinvoker.HttpInvokerProxyFactoryBean">

    <property name="serviceUrl">

      <value>http://${serverName}/${contextPath}/pay.service</value>

    </property>

    <property name="serviceInterface">

      <value>com.springinaction.payment.PaymentService</value>

    </property>

  </bean>

 

把 这个Bean的定义和那些在6.2.1节、6.3.1节中的比较一下,你会发现几乎没什么变化。serviceInterface属性仍然用来表示这个支 付服务所实现的接口;serviceUrl属性仍然是用来表示远程支付服务的位置。由于HTTP invoker是基于HTTP的,如同Hessian和Burlap一样,serviceUrl就能包含与Hessian和Burlap版本的Bean里 一样的URL。

现在,让我们转到HTTP invoker对话的另一面,看看如何把Bean的功能作为基于HTTP invoker的服务输出。

6.4.2  把Bean作为HTTP服务公开

你 已经看到如何把 PaymentServiceImpl的功能作为RMI服务公开,或者是作为Hessian服务,以及Burlap服务。接下来,我们要把这个支付服务改 写为HTTP invoker服务,用Spring的HttpInvokerServiceExporter来输出这个支付服务。

为了避 免听上去有违反先例的危险,我们必须告诉你,使用HttpInvokerServiceExporter把Bean的方法输出为远程方法,和你已经看到的 其他远程服务的exporter做事的方法非常相像。实际上,就是一样的。举例来说,下面的Bean的定义展示了如何把paymentService Bean作为一个远程的基于HTTP invoker的服务输出:

 

<bean id="httpPaymentService" class="org.springframework.remoting.

        ➥httpinvoker.HttpInvokerServiceExporter">

    <property name="service">

      <ref bean="paymentService"/>

    </property>

    <property name="serviceInterface">

      <value>com.springinaction.payment.PaymentService</value>

    </property>

</bean>

 

有 点奇怪的似曾相识的感觉吗?你很难找出这个 Bean的定义和那些在6.3.2节中的不同来。这里的粗体字不是帮你发现它的,而是惟一的区别就在于使用了 HttpInvokerServiceExporter。否则的话,这个exporter和其他的远程服务的exporter就没什么区别了。

基 于HTTP invoker的服务,顾名思义,是基于HTTP的,就像Hessian和Burlap服务一样。并且,也和 HessianServiceExporter和BurlapServiceExporter那样, HttpInvokerServiceExporter也是一个Spring的Controller。这就意味着你需要建立一个URL处理器,把HTTP URL映射到服务上:

 

  <bean id="urlMapping" class="org.springframework.web.

          ➥servlet.handler.SimpleUrlHandlerMapping">

    <property name="mappings">

      <props>

         <prop key="/pay.service">httpPaymentService</prop>

      </props>

    </property>

  </bean>

同时你也需要把这个支付服务部署到web应用中,通过在web.xml中配置Spring的DispatcherServlet:

 

  <servlet>

    <servlet-name>credit</servlet-name>

    <servlet-class>

        org.springframework.web.servlet.DispatcherServlet

    </servlet-class>

    <load-on-startup>1</load-on-startup>

  </servlet>

 

  <servlet-mapping>

    <servlet-name>credit</servlet-name>

    <url-pattern>*.service</url-pattern>

  </servlet-mapping>

 

这样配置,支付服务便能通过/pay.service获得,和它作为Hessian服务或Burlap服务公开时的URL一样。

Spring的HTTP invoker是作为一个两全其美的远程调用解决方案出现的,把HTTP交流的简单性和Java内置的对象序列化机制结合起来。这让HTTP invoker服务成为一个引人注目的对RMI或是对Hessian/Burlap的替代品。

要记住HTTP invoker有个重大的限制,它是一个只在Spring框架中提供的远程调用解决方案。这就意味着客户端和服务器端都必须是使用Spring的应用。并且,至少就目前而言,也暗示了客户端和服务器端都必须是基于Java的[2]。

到现在为止我们所讨论的所有远程技术中,没有一个受到比Enterprise JavaBean (EJB)更多的关注。甚至可以说,有关EJB的出版物比任何其他Java技术都要多。让我们看一下如何把EJB用到你的Spring应用中。

转自:《Spring in Action中文版》 人民邮电出版社 ISBN:7115143153  定价:39元

分享到:
评论

相关推荐

    Spring 实现远程访问详解——httpinvoker

    Spring httpInvoker使用标准java序列化机制,通过Http暴露业务服务。如果你的参数和返回值是比较复杂的,通过httpInvoker有巨大的优势。 1. 远程访问流程 1) 服务端定义服务接口 2) 服务端实现服务接口 3) 暴露服务...

    spring远程调用

    使用 spring 的 httpinvoker 进行远程调用

    spring-httpinvoker-demo

    Spring HTTP Invoker是spring框架中的一个远程调用模型,执行基于HTTP的远程调用,也就是说,可以通过防火墙,并使用java的序列化机制在网络间传递对象。客户端可以很轻松的像调用本地对象一样调用远程服务器上的...

    远程调用服务框架

    给予spring的框架。 封装了xfire、rmi、hessian、httpinvoker 客户端可以统一调用,省略了远程调用的编码。 服务通过服务ID和服务接口来调用。

    Spring 实现远程访问详解——rmi

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

    spring jar 包详解

    (9) spring-remoting.jar 这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、...

    spring-rest-invoker:将远程REST服务映射到本地接口的Spring Invoke

    接口和远程服务之间的具体映射可以通过编程或通过使用Spring或JAX-RS注释对接口进行注释来完成。 特征: 消费REST JSON服务声明服务接口并将其绑定到带有注释的远程URL(spring或jax-rs) 将JSON转换为Java POJO,...

    spring in action英文版

     6.3 使用Hessian和Burlap的远程调用  6.3.1 访问Hessian/Burlap服务  6.3.2 用Hessian或Burlap公开Bean的功能  6.4 使用HTTP invoker  6.4.1 通过HTTP访问服务  6.4.2 把Bean作为HTTP服务公开  ...

    最新最全的spring开发包

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含支持EJB、JMS、远程调用Remoting(RMI、Hessian、Burlap、Http Invoker、JAX-RPC)方面的类。 (10) spring-support.jar  这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java ...

    spring security3.2.0

    Spring Security 的前身是 Acegi Security ,是 Spring 项目组中用来提供安全认证服务的...Transparent authentication context propagation for Remote Method Invocation and HttpInvoker (一个Spring远程调用协议)

    Spring in Action(第2版)中文版

    8.3使用hessian和burlap的远程调用 8.3.1访问hessian/burlap服务 8.3.2用hessian或burlap公开bean的功能 8.4使用httpinvoker 8.4.1通过http访问服务 8.4.2把bean作为http服务公开 8.5spring和web服务 8.5.1...

    Spring in Action(第二版 中文高清版).part2

    8.3 使用Hessian和Burlap的远程调用 8.3.1 访问Hessian/Burlap服务 8.3.2 用Hessian或Burlap公开Bean的功能 8.4 使用HTTP invoker 8.4.1 通过HTTP访问服务 8.4.2 把Bean作为HTTP服务公开 8.5 Spring和Web...

    Spring in Action(第二版 中文高清版).part1

    8.3 使用Hessian和Burlap的远程调用 8.3.1 访问Hessian/Burlap服务 8.3.2 用Hessian或Burlap公开Bean的功能 8.4 使用HTTP invoker 8.4.1 通过HTTP访问服务 8.4.2 把Bean作为HTTP服务公开 8.5 Spring和Web...

    carmine:使用 HTTP(S) 的轻量级 Java RMI 替代方案

    该库为 (远程方法调用)或 [Spring HTTP Invoker]( ),使用HTTP(S)协议进行客户端和服务器端之间的通信。 主要特征 Java 到 Java 的远程方法调用是使用HTTP(S)协议完成的 在客户端处理远程对象仅在实例化过程中...

    java开源包1

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包8

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包11

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包2

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

    java开源包3

    它是 Spring HttpInvoker的一个轻量级选择,特别适合于当你不想在客户端程序中使用Spring框架。 API访问授权的开放标准 OAuth OAuth 协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式...

Global site tag (gtag.js) - Google Analytics