Hessian学习总结

来源:互联网 发布:街霸2网络对战卡b 编辑:程序博客网 时间:2024/05/22 13:36

一.     Hessian简介

 

Hessian是由caucho提供的一种开源的远程通讯协议。Hessian采用二进制RPC协议,基于HTTP传输,服务器端不用开放防火墙端口。Hessian协议的规范是公开的,可以用于任意语言。

二.       Hessian实现

a)       基本实现

服务器端:

定义接口: Hello, World API

publicinterface BasicAPI {

  public String hello();

}

接口实现:Hello, World Service

publicclass BasicService implements BasicAPI {

  private String _greeting = "Hello,world";

 

  public void setGreeting(String greeting)

  {

    _greeting = greeting;

  }

 

  public String hello()

  {

    return _greeting;

  }

}

配置WEB-INF.xml 部署到Web容器中:

         <servlet>  

            <servlet-name>hello</servlet-name>  

            <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>  

             <init-param>  

                <param-name>home-class</param-name>  

                 <param-value>com.xiaonei.jebe.hessian.BasicService</param-value>  

             </init-param>  

             <init-param>  

                <param-name>home-api</param-name>  

                <param-value>com.xiaonei.jebe.hessian.BasicAPI</param-value>  

            </init-param>

         </servlet>

  

         <servlet-mapping>  

            <servlet-name>hello</servlet-name>  

            <url-pattern>/hello.htm</url-pattern>  

         </servlet-mapping>

客户端:

Stringurl = "http://hessian.caucho.com/hessian/hello.htm";

 

HessianProxyFactoryfactory = new HessianProxyFactory();

BasicAPIbasic = (BasicAPI) factory.create(BasicAPI.class, url);

 

System.out.println("hello():" + basic.hello());

b)      spring的整合

Hessian通过Servlet提供远程服务。需要将匹配某个模式的请求映射到Hessian服务。SpringDispatcherServlet 可以完成该功能,DispatcherServlet可将匹配模式的请求转发到Hessian服务,web.xml只是定义了“请求转发器”,该转发器将匹配/remoting/*的请求截获,转发给contextbean处理。而HessianServiceExporter提供bean服务。

可以总结为两步:

1.      拦截url请求

2.      HessianServiceExporter提供bean服务,Spring使用HessianServiceExporter,将一个常规bean导出成Hessian服务。

 

服务器端设置:

web.xml的详细配置

<servlet>

          <servlet-name>remoting</servlet-name>

 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

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

    </servlet>

    <servlet-mapping>

          <servlet-name>remoting</servlet-name>

          <url-pattern>/remoting/*</url-pattern>

</servlet-mapping>

配置remoting-servlet.xml文件

<!--  定义普通bean实例-->

    <bean id="hello" class="com.xiaonei.jebe.hessian.BasicService "/>

    <!-- 使用HessianServiceExporter 将普通bean导出成Hessian服务-->

    <bean name="/hello"class="org.springframework.remoting.caucho.HessianServiceExporter">

           <!--  需要导出的目标bean-->

           <propertyname="service" ref="hello"/>

           <!--  Hessian服务的接口-->

           <propertyname="serviceInterface" value="com.xiaonei.jebe.hessian.BasicAPI "/>

</bean>

 

客户端设置:

客户端定义一个remoting-client.xml文件

<beanid="myServiceClient"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">

<propertyname="serviceUrl">

<value>http://hessian.caucho.com/hessian/hello.htm</value>

</property>

<propertyname="serviceInterface">

<value>com.xiaonei.jebe.hessian.BasicAPI </value>

</property>

</bean>

c)       OSGispring dm server)的整合

请参见文档HessianOSGispring dm server)的整合

三.       Hessian原理

请参见文档Hessian原理分析》

四.       Hessian和其他远程调用实现的比较

1.       常见远程通讯协议:

RMIHttpinvokerHessianBurlapWeb service

通讯效率测试结果:

RMI > Httpinvoker >= Hessian >>Burlap >> Web service

2.      各个通讯协议的分析:

RMIJava首选远程调用协议,非常高效稳定,特别是在数据结构复杂,数据量大的情况下,与其他通讯协议的差距尤为明显。

HttpInvoker使用java的序列化技术传输对象,与RMI在本质上是一致的。从效率上看,两者也相差无几,HttpInvokerRMI的传输时间基本持平。

Hessian在传输少量对象时,比RMI还要快速高效,但传输数据结构复杂的对象或大量数据对象时,较RMI要慢20%左右。但这只是在数据量特别大,数据结构很复杂的情况下才能体现出来,中等或少量数据时,Hessian并不比RMI慢。Hessian的好处是精简高效,可以跨语言使用,而且协议规范公开,我们可以针对任意语言开发对其协议的实现。

另外,HessianWEB服务器结合非常好,借助WEB服务器的成熟功能,在处理 大量用户并发访问时会有很大优势,在资源分配,线程排队,异常处理等方面都可以由成熟的WEB服务器保证。而RMI本身并不提供多线程的服务器。而 且,RMI需要开防火墙端口,Hessian不用。

Burlap采用xml格式传输。仅在传输1条数据时速度尚可,通常情况下,它的毫时是RMI3倍。

Web Service的效率低下是众所周知的,平均来看,Web Service的通讯毫时是RMI10倍。

 

五.       Hessian使用感受

在本次的系统中大量使用hessian进行远程通讯。系统环境是OSGi实现spring dm server

在使用中,我们发现hessian的确精简很容易使用,而且效率很高,基本可以满足系统需求。但是我们也发现了很多不足,有hessian特有的也有hessianOSGispring dm server)整合后造成的。

 

优点:

1.        简单易用

2.        效率高

缺点:

1.        报错机制不够完善。在开发过程中发现hessian总是报一些错误,错误原因也是千奇百怪。当然,有可能是前期大家对hessian理解不够深刻,但是也确实暴露出来hessian的一些问题。

解决方案有:加深对hessian实现机制的理解;总结hessian出错的原因,每种错误可以列举出几种原因,便于以后查找。

2.        事务处理。至今还没有针对hessian服务的有效的事务处理机制,大家提出了几种实现方案,但都不是很合适,需要继续研究。

3.        版本问题:在开发过程中,发现springsourcebundle库中最新的版本是3.2.1,但是3.2.1spring2.5存在兼容问题,现在可用的版本有3.1.53.1.63.2.0。而在hessian官网发现最新版本为4.0.1,但4.0.1没有bundle形式jar包。

 

 

参考文献:

1.        hessian binary web serviceprotocol http://hessian.caucho.com/

2.        《几种通讯协议的比较》 http://javag.javaeye.com/blog/319285

3.        Spring 2.0宝典》 14.5.1 Hessian介绍

http://book.csdn.net/bookfiles/126/1001264302.shtml

4.        Hessian 学习笔记》http://www.alisdn.com/wordpress/?p=478

5.        Hessian学习记录》 http://www.javaeye.com/topic/212028

 

                                                                                                        2009-10-19

原创粉丝点击