一、Hessian簡介(摘自百度百科)
(7)不支持JDK1.6+weblogic11g+Spring -2、客戶端必須具備以下幾點: (1)包含Hessian的jar包。 (2)具有和服務器端結構一樣的接口和交互對象。 (3)利用HessianProxyFactory調用遠程接口。
三、基于Spring2.0的Hessian開發實例
1、環境:
(1)服務端:JDK1.4+weblogic8.1
(2)客戶端:JDK1.6+weblogic11g
2、相關JAR包:
(1)服務端:spring.jar、hessian-2.1.12.jar、commons-logging-1.0.4.jar
(2)客戶端:spring.jar、hessian-2.1.12.jar、commons-logging-1.0.4.jar
四、服務端的實現
1、相關model(com.govdo.model)
(1)ServiceRequest.java 客戶端請求服務類,用于接受客戶端請求數據
ServiceRequest.java(2)ServiceResponse.java 客戶端響應服務類,用于返回客戶端響應數據
package com.govdo.model;

import java.io.Serializable;
import java.util.Map;

public class ServiceResponse implements Serializable {

private static final long serialVersionUID = 1L;
public static final String SERVICE_RESPONSE_RESULT = "SERVICE_RESPONSE_RESULT";
public static final String BUSINESS_SUCCESS = "0";
public static final String BUSINESS_FAILURE = "1";

private Map model = null;

public ServiceResponse() {}
public ServiceResponse(Map model) {
this.model = model;
}
public Map getModel() {
return model;
}

public void setModel(Map model) {
this.model = model;
}

}(3)QueryCityInfoIn.java 城市信息客戶端請求對象,實現Serializable,源碼略
(4)QueryCityInfoOut.java 城市信息客戶端響應對象,實現Serializable,源碼略
2、用于客戶端調用的公共接口及實現
(1)Action.java 暴露給客戶端的抽象公共接口
package com.govdo.action;

import com.govdo.model.ServiceRequest;
import com.govdo.model.ServiceResponse;

public abstract interface Action {

public abstract ServiceResponse perform(ServiceRequest request) throws Exception;
}
(2)AbstractAction.java 實現Action、BeanFactoryAware接口的抽象類
package com.govdo.action;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.BeanFactoryAware;

import com.govdo.model.ServiceRequest;
import com.govdo.model.ServiceResponse;

public abstract class AbstractAction implements Action, BeanFactoryAware {

protected BeanFactory context;
public void setBeanFactory(BeanFactory context) throws BeansException {
this.context = context;
}

public abstract ServiceResponse perform(ServiceRequest request)
throws Exception;
}(3)RemotingAction 繼承AbstractAction的公共類,用于遠程實現接口Action,其中serviceID是真正實現功能的bean,這個bean必須實現perform方法
package com.govdo.action;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.govdo.model.ServiceRequest;
import com.govdo.model.ServiceResponse;
import com.govdo.util.StringUtils;

public class RemotingAction extends AbstractAction {

private Log logger = LogFactory.getLog(getClass());
public ServiceResponse perform(ServiceRequest request)
throws Exception {
String serviceID = (String)request.getRequestedServiceID();
if (StringUtils.isBlank(serviceID)) {
logger.error("service id isn't allowed to be null!");
throw new IllegalArgumentException("service id isn't allowed to be null!");
}
Action action = (Action)context.getBean(serviceID);
return action.perform(request);
}
}
3、服務端的相關配置Hessian是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能. 相比WebService,Hessian更簡單、快捷。采用的是二進制RPC協議,因為采用的是二進制協議,所以它很適合于發送二進制數據
二、Hessian開發要點
1、JAVA服務器端必須具備以下幾點:
(7)不支持JDK1.6+weblogic11g+Spring -2、客戶端必須具備以下幾點: (1)包含Hessian的jar包。 (2)具有和服務器端結構一樣的接口和交互對象。 (3)利用HessianProxyFactory調用遠程接口。
三、基于Spring2.0的Hessian開發實例
1、環境:
(1)服務端:JDK1.4+weblogic8.1
(2)客戶端:JDK1.6+weblogic11g
2、相關JAR包:
(1)服務端:spring.jar、hessian-2.1.12.jar、commons-logging-1.0.4.jar
(2)客戶端:spring.jar、hessian-2.1.12.jar、commons-logging-1.0.4.jar
四、服務端的實現
1、相關model(com.govdo.model)
(1)ServiceRequest.java 客戶端請求服務類,用于接受客戶端請求數據




























(4)QueryCityInfoOut.java 城市信息客戶端響應對象,實現Serializable,源碼略
2、用于客戶端調用的公共接口及實現
(1)Action.java 暴露給客戶端的抽象公共接口




















































(1)remoting-servlet.xml 在WEB-INF下添加這個xml文件,其中/myHessian是暴露給客戶端的訪問路經,Action是調用接口,remotingAction是公共實現類









































(1)HessianTestImpl.java具體實現類,繼承AbstractAction相當于實現了Action接口,這里對請求數據做了簡單處理,對城市名稱后加了(by remoting),然后返回客戶端,注意要實現perform方法






























五、客戶端實現
1、準備工作
(1)相關model,服務端的4個對象都需要加到客戶端來
(2)客戶端調用的接口,Action接口也要加到客戶端來
2、遠程調用相關配置
(1)remoting-client.xml 配置遠程調用接口和URL,回顧上章3(1)節,/myHessian是在remoting-servlet.xml 中配置的遠程訪問服務路徑,所以這里URL為http://127.0.0.1:7008/webRoot/remoting/myHessian,而接口則只需配Action這個公共接口即可











3、客戶端調用測試類TestHessianTest.java






































這個(by remoting)就是通過服務端程序加的,請回顧上章4(1)節,至此客戶端調用實現結束。
六、小結
對于服務端的這種實現方式,有以下優缺點
1、優點
(1)配置簡單擴展性好,服務端只需一次配置,客戶端即可調用多個實現不同功能的實例,如文章例中的hessianTest是通過serviceRequest.setRequestedServiceID("hessianTest")去獲取,也就是說服務端的其他實現了Action接口的bean都可以通過這個方法遠程獲取并調用
2、缺點
(1)目前經本人測試,hessian的多個版本(包括最老的最新的)都不支持JDK1.6+weblogic11g的Spring配置,而weblogic11g需要依賴JDK1.6以上版本,weblogic8.1不支持1.4以上版本,所以服務端想用泛型就不可能了,本人對泛型情有獨鐘,本打算出一個Spring+hessian+ibatis的介紹,看來只能分開講了。