Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据
.
这两天有空把hessian接口也学习一下。由于学习是为了以后测试工作而进行的,所以对于hessian和soap机制孰优孰劣就没有深入的研究,这些问题还是留给我们架构师来研究吧。根据网上的文献:Hessian是采用二进制流进行通讯的,所以我想性能应该会好一些,既然通过二进制流传递,是不是对复杂对象的传递有问题呢,我想可能会有些难度,毕竟传递过程中没有象soap这样保留了对象的结构的。这个问题有待以后考证。今天我想把我第一次学习hessian的经历分享一下。
和ICE,WebService一样,既然作为服务类那么必须有文档公布它的接口形式,客户端用户在通过这个文档来生成代理类。ICE是通过.Ice文件,WebService是通过wsdl,但是hessian没有这个类型的文档,hessian的代理类是直接通过factrory去生成的。所以在做hessian客户端代码之前,需要拿到接口文件interface。下面我们通过一个完整的例子看看hessian服务器端代码和客户端代码如何实现。
服务器端代码和配置:
2. 新建服务器端工程(web工程:hessian),新增接口声明文件new->interface。代码如下:
package com.ems.hessian.service;
public interface IPrinter {
public String printstr(); //与服务端的printstr方法对应
public String printstr(String name); //与服务端的printstr方法对应
}
|
3. 新建服务器类实现代码,new->class,代码如下
package com.ems.hessian.service.impl;
import com.ems.hessian.service.IPrinter;
public class PrinterService implements IPrinter {
@Override
public String printstr() {
return "hello hessian demo.";
}
@Override
public String printstr(String name) {
// TODO Auto-generated method stub
return "hello,"+name+", hessian demo.";
}
}
|
4. 修改服务器端web.xml文件如下
上述代码实现如下功能:
* 指定接口的url
* 指定API使用的inteface文件
* 指定服务器类实现的代码
5. 导出工程为hessian.war,部署到tomcat5的webapps目录下。
6. 将hessian jar包拷贝到lib目录下。
客户端代码:
1. 新建客户端工程,新增测试类,代码如下
package com.ems.client;
import com.caucho.hessian.client.HessianProxyFactory;
import com.ems.rmi.service.IPrinter;
public class TestClient {
public static void main(String[] args)
throws Exception
{
HessianProxyFactory factory = new HessianProxyFactory();
factory.setOverloadEnabled(true); //启用方法重载识别
// 客户端需实现Basic接口
IPrinter printer = (IPrinter) factory.create(IPrinter.class, url);
//System.out.println("Hessian: " + printer.printstr());
System.out.println("Hessian: " + printer.printstr("Hurry"));
}
}
|
运行客户端代码:可以看见:
Hessian: hello hessian demo.
Hessian: hello,Hurry, hessian demo.
|
。初学者需要源代码的,请留言。
如果读者有兴趣使用comview去捕捉实际传递的内容,发现根本看不懂传递的内容,因为是以二进制流进行传递的。
Meet so Meet.
C plusplus
I-PLUS....