Hessian is a simple binary protocol for connecting web services. The com.caucho.hessian.client and com.caucho.hessian.server packages do not require any other Resin classes, so can be used in smaller clients, like applets.
利用Hessian 实现webService的发布是一种很简单的方式,下面写个简单的例子。
1. 编写要发布的服务接口
package com.lht;
public interface ISomeService {
public String hello();
public int add(int a,int b);
}
2. 编写实现类
package com.lht;
public class SomeServiceImpl implements ISomeService {
public String hello() {
// TODO Auto-generated method stub
return "hello HessianDemo";
}
public int add(int a, int b) {
// TODO Auto-generated method stub
return a+b;
}
}
3. 配置信息
<web-app>
<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>example.BasicService</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>example.Basic</param-value>
</init-param>
</servlet>
<servlet-mapping>
<url-pattern>/hello</url-pattern>
<servlet-name>hello</servlet-name>
</servlet-mapping>
</web-app>
总结:
利用Hessian 实现分布式,变的相当的简单,就和开发简单的servlet一般。
Hessian的这个远程过程调用,完全使用动态代理来实现的,其实从客户端代码不难看出,HessianProxyFactory的create方法就是创建接口Basic的代理类,该类实现了Basic接口,JDK的proxy类会自动用 InvocationHandler 的实现类(该类在Hessian中表现为HessianProxy)的invoke方法体 来填充所生成代理类的方法体,从而实现远程调用,传输过程使用的是基于Http的二进制字节流。
RMI与Hessian的调用过程比较:
Hessian:客户端(basic.hello())——>序列化写到输出流——>远程方法(服务器端)——>序列化写到输出流 ——>客户端读取输入流——>输出结果
RMI:客户端——>stub——>序列化——>skeleton——>远程方法——>序列化——>stub—— >输出结果
参考信息
1.http://hessian.caucho.com/
2.http://eis.blogdriver.com/eis/331413.html