论坛首页 入门技术论坛

关于hessian的一些认识

浏览 4570 次
该帖已经被评为新手帖
作者 正文
   发表时间:2009-12-17   最后修改:2009-12-18
Hessian是一个解耦合的远程调用包
1、hessian是基于http协议的,使用自己的序列化机制,这里和RMI不同,RMI是使用java的序列化机制,包路径不能改变。
2、Hessian中接口的包路径可以不一样,即:server端和client端的接口包路径可以不同(不知道类名可不可以不同),如:在server端开放接口为:com.topsoft.service.TestImpl在client端接收时为:com.topsoft.hessian.Test_Test
3、接口类的名字可以不一样,示例同上
4、远程调用hessian服务其实只需要一个接口,不需要依赖的entity。其中涉及到的实体,hessian以map形式来传递值
如:server端有方法:public TestEntity getObj(TestEntity entity);//其中TestEntity是一个测试实体。有三个简单的属性:name;pwd;key;
在client端可用如下方法调用:(当然客户端需要修改接口为 Map getObj(Map entity));
Map entity=new HashMap();
entity.put("name", "你好");
entity.put("pwd", "123");
entity.put("key", 123);
Map obj=test.getObj(entity);
注:如果在client端传实体,则必须与server端的实体一致。这里的实体需要继承Serializable接口,但是serialVersionUID 并不影响实体的一致性。
这里如果客户端接口修改为Object getObj(Object entity),会有两种情况,如果客户端CLASSAPTH存在TestEntity这个实体,则获得的是实体,如果不存在,则获得HashMap.

5、hessian传递Collection
Hessian对于容器的传递,如果client端容器中该对象类型在CLASSPATH中存在,则容器内是传递的对象,如果不存在,则被转换为HashMap对象。要注意:如果对象类型在CLASSPATH中存在,却想强转是会抛异常的。

6、hessian远程调用分析:
Hessian 的client远程调用时,其实是转化为http请求发送出(HttpURLConnection)去的,发送格式如下:
POST /test/testService HTTP/1.1
Content-Type: x-application/hessian
User-Agent: Java/1.5.0_15
Host: 127.0.0.1:8080
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Transfer-Encoding: chunked

以下是请求中的方法和参数,经过hessian的转化这里不再贴了


返回内容格式如下:
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: application/x-hessian
Transfer-Encoding: chunked
Date: Thu, 17 Dec 2009 08:39:13 GMT

以下是请求方法的返回结果,经过hessian的转化这里不再贴了


   发表时间:2010-01-20  
它不支持方法的重载
0 请登录后投票
   发表时间:2010-01-22  
正是因为在客户端他把javaBean都转化为hashmap传过去的,所以就不支持方法重载。(如果两个方法就JavaBean参数不一样,无法确定是调用哪个方法)
0 请登录后投票
   发表时间:2010-01-24  
还有一个是同一个接口中的名字不能相同。
0 请登录后投票
   发表时间:2010-01-25  

允许方法重载 是HessianProxyFactory调用 setOverloadEnabled.


0 请登录后投票
   发表时间:2010-02-18  
不太清楚hessian是否有好的客户端生成工具。

如果开发人员希望进行大量跨语言调用,比如C# Client调用Java Server,将遇到非常麻烦的客户端生成问题。

手工书写很容易产生server/client不一致问题。

而使用webservice则通常有成熟的客户端生成工具,不会发生这样的问题。

不知现在是否有较好的解决方案。
0 请登录后投票
   发表时间:2010-02-22  
protobuf支持
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics