Hessian——輕量級遠程調用方案


Hessian是caucho公司開發的一種基於二進制RPC協議(Remote Procedure Call protocol)的輕量級遠程調用框架。具有多種語言的實現,但用的最多的當然是Java實現 :)

Creating a Hessian service using Java has four steps:

1、Create an Java interface as the public API
2、Create a client using HessianProxyFactory
3、Create the Service implementation class
4、Configure the service in your servlet engine.

下面,我們來實現1個例子:

首先下載hessian-4.0.37.jar,服務端和客戶端都要用的。

然后編寫程序。

server端:

package com.lin.hessian.service;
public interface Basic {
    public String sayHello();
}
package com.lin.hessian.service;
public class BasicService implements Basic{
    private String message = "balalala!";
    @Override
    public String sayHello() {
        return message;
    }
}
package com.lin.hessian.service;
import com.caucho.hessian.server.HessianServlet;
public class LinyService extends HessianServlet implements Basic{
    private String message = "wowwowowowowow";
    @Override
    public String sayHello() {
        return message;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>HessianWeb</display-name>
  <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.lin.hessian.service.BasicService</param-value>     
        </init-param>     
        <init-param>     
            <param-name>home-api</param-name>
            <param-value>com.lin.hessian.service.Basic</param-value>     
        </init-param>     
    </servlet>
    
    <servlet-mapping>     
        <servlet-name>hello</servlet-name>     
        <url-pattern>/hello</url-pattern>     
    </servlet-mapping>

    <servlet>     
        <servlet-name>liny</servlet-name>     
        <servlet-class>com.lin.hessian.service.LinyService</servlet-class>         
    </servlet>
    
    <servlet-mapping>     
        <servlet-name>liny</servlet-name>
        <url-pattern>/liny</url-pattern>     
    </servlet-mapping>
</web-app>

在服務端其實定義了兩個service: BasicService和LinyService,不同之處在於是否繼承HessianServlet,BasicService是一個pojo,而LinyService是一個servlet。

在web.xml里,BasicService是通過home-class和home-api兩個參數傳遞給HessianServlet,然后將HessianServlet配置到web.xml的<servlet>里來實現服務配置到容器的。

而LinyService是直接將自己(它自己就是個Servlet)配置到web.xml的<servlet>來實現配置到容器。如果我們在一個應用中要實現多個hessian服務,應該采用這種方式

下面來看看客戶端:

package com.liny.hessian.service;
public interface Basic {
    public String sayHello();
}
package com.lin.hessian.client;
import java.net.MalformedURLException;
import com.caucho.hessian.client.HessianProxyFactory;
import com.liny.hessian.service.Basic;
public class HessianClient {
    public static void main(String[] args) throws MalformedURLException{
     //String url = "http://localhost:8080/HessianWeb/hello"; String url
= "http://localhost:8080/HessianWeb/liny"; HessianProxyFactory factory = new HessianProxyFactory(); Basic basic = (Basic)factory.create(Basic.class, url); System.out.println(basic.sayHello()); } }

客戶端要定義一個同服務端一模一樣的接口Basic,然后通過HessianProxyFactory獲得代理,並調用遠程服務的方法。

注意:這里筆者故意將客戶端與服務端的Basic接口的包路徑定義成不一樣(一個是com.liny.hessian.service,一個是com.lin.hessian.service),經過驗證這樣是可以的,但是推薦最好兩者一模一樣

 

日子過得艱苦,但更要堅韌不拔,每天都能進步一點的話,許多天之后必能精進。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM