hessian手記の勉強


一、Hessian原理紹介:
Hessianはcauchoによって提供されるBinary−RPCプロトコルに基づいて実現される遠隔通信libraryである.使用中、要求側はHessian自身が提供するAPIを通じてサービス側に要求を開始し、Hessianはそのカスタムシリアル化メカニズムを通じて要求情報をシーケンス化し、バイナリストリームを生成し、Httpプロトコルで伝送する.応答側は、Hessianが提供するAPIに従って要求を受信し、その後、Hessianは、そのプライベートなシリアル化メカニズムに従って要求情報を逆シーケンス化し、使用者に伝達する際にすでに対応する要求情報オブジェクトである.処理が完了すると直接戻り、hessianは結果オブジェクトをシーケンス化して呼び出し側に転送します.
 
二、Hessian呼び出しインスタンス
    1. サービス側のエンティティークラス:
 
package com.shhx.model;

import java.io.Serializable;

public class PlaneBean implements Serializable {
	
	private String color;
	private String length;
	private String owner;
	
	private static final long serialVersionUID = 1L;

	public PlaneBean() {
	}

	public String getColor() {
		return color;
	}

	public void setColor(String color) {
		this.color = color;
	}

	public String getLength() {
		return length;
	}

	public void setLength(String length) {
		this.length = length;
	}

	public String getOwner() {
		return owner;
	}

	public void setOwner(String owner) {
		this.owner = owner;
	}
    
}

 2.サービス側インタフェース:
 
package com.shhx.service;

import com.shhx.model.PlaneBean;

public interface IBasic {
	
	public String getAirLine();

	public PlaneBean getPlaneBean();
}

   3.サービス側インタフェース実装クラス:
 
package com.shhx.service;

import com.caucho.hessian.server.HessianServlet;
import com.shhx.model.PlaneBean;

public class IBasicImpl extends HessianServlet implements IBasic {
	
	private String airline= "Shanghai - Shenzhen";  

	public String getAirLine() {
		return airline;
	}

	public PlaneBean getPlaneBean() {
		PlaneBean plane = new PlaneBean();
		plane.setColor("silver");
		plane.setLength("30");
		plane.setOwner("MU");
		
		return plane;
	}

}
 
      4. web.xmlの構成:
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/remoting-servlet.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>


	<servlet>
		<servlet-name>hessian</servlet-name>
		<servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
		<init-param>
			<param-name>home-class</param-name>
			<param-value>com.shhx.service.IBasicImpl</param-value>
		</init-param>
		<init-param>
			<param-name>home-api</param-name>
			<param-value>com.shhx.service.IBasic</param-value>
		</init-param>
	</servlet>

	<servlet-mapping>
		<servlet-name>hessian</servlet-name>
		<url-pattern>/hessian</url-pattern>
	</servlet-mapping>

</web-app>

   5.WEB-INF下remoting-servlet.xmlの構成:
 
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
	<!--      bean  -->
	<bean id="iBasicImpl" class="com.shhx.service.IBasicImpl" />

	<!--    HessianServiceExporter    bean   Hessian  -->
	<bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">
	
		<!--         bean-->
		<property name="service" ref="iBasicImpl" />
		
		<!--  Hessian     -->
		<property name="serviceInterface" value="com.shhx.service.IBasic" />
	</bean>
</beans>

  6. クライアントには、対応するエンティティークラスとインタフェース、クライアントコードが必要です.
 
package com.shhx.service;

import java.net.MalformedURLException;

import com.caucho.hessian.client.HessianProxyFactory;
import com.shhx.model.PlaneBean;

public class BasicClient {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String url = "http://127.0.0.1:8080/hessianDemo/hessian";
		HessianProxyFactory factory = new HessianProxyFactory();
		
		try {
			IBasic basic = (IBasic) factory.create(IBasic.class, url);
			System.out.println(basic);
			System.out.println("airline: " + basic.getAirLine());
			
			PlaneBean plane = basic.getPlaneBean();
			System.out.println("color: " + plane.getColor());
			System.out.println("length: " + plane.getLength());
			System.out.println("owner: " + plane.getOwner());
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
	}

}

クライアントの実行結果は次のとおりです.
      HessianProxy[http://127.0.0.1:8080/hessianDemo/hessian]       airline: Shanghai - Shenzhen       color: silver       length: 30       owner: MU
 
三、Hessianに基づくプロジェクト開発を行う場合、以下の点に注意しなければならない.
▲JAVAサーバー側は以下の点を備えなければならない.
-Hessianを含むjarパッケージ;
-クライアントに呼び出すインタフェースを設計します. 
-インタフェースの機能を実現する.
-Webを設定します.xml、対応するservletを配置します;  
-オブジェクトはSerializableインタフェースを実装する必要があります. 
-複雑な対像に対してMapの方法を用いて伝達することができる.  
▲クライアントは以下の点を備えなければならない.
-javaクライアントにはHessianが含まれています.JArのパッケージ; 
-サーバー側の構造と同じインタフェースがあります.ネーミングスペースも含めて一番いいです.
-HessianProxyFactoryを使用してリモートインタフェースを呼び出します.
四、Hessian特徴総括:
-jar全体が小さく、200 K以上、3.1バージョンです.もちろん、私がダウンロードしたfor javaのバージョンです.
-構成は簡単で、基本的に経験を必要とせずに構成されています.
-機能が強く、soapを捨てることもできるし、EJBを捨てることもでき、バイナリを採用してオブジェクトを伝達することができる.
-python c++という複数の言語サポートがあります.Netはflexさえclientとすることができます.
ダウンロード先:http://hessian.caucho.com/