輕量級遠程調用框架-Hessian學習筆記-Demo實現

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服務器端代碼和客戶端代碼如何實現。

服務器端代碼和配置:

1.  去http://hessian.caucho.com/#Java 下載hessian jar包。

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文件如下

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
  <display-name>HessianDemo</display-name>
  <servlet>
    <servlet-name>hessianService</servlet-name>
    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
    <init-param>
      <param-name>home-class</param-name>
      <param-value>com.ems.hessian.service.impl.PrinterService</param-value>
    </init-param>
    <init-param>
      <param-name>home-api</param-name>
      <param-value>com.ems.hessian.service.IPrinter</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>hessianService</servlet-name>
    <url-pattern>/service</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

上述代碼實現如下功能:

         * 指定接口的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

 {

  String url = "http://127.0.0.1:8080/hessianDemo/service";
  // 創建factory實例

  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去捕捉實際傳遞的內容,發現根本看不懂傳遞的內容,因爲是以二進制流進行傳遞的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章