Hessian是一個輕量級的remoting onhttp工具,使用簡單的方法提供了RMI的功能. Spring也對Hessian進行了支持,以下就用一個簡單的例子來說明下如何在Spring中使用Hessian吧。
Hessian的服務端配置:
在服務端的某個applicationContext-*.xml(命名不限)創建HessianServiceExporter來暴露你的服務接口(接口以及接口實現類略):
<!-- RemoteService的Hessian Exporter --> <bean name="remoteServiceExporter" class="org.springframework.remoting.caucho.HessianServiceExporter"> <property name="service" ref="xxxRemoteService" /> <property name="serviceInterface" value="com.nineclient.talk.service.xxxRemoteService" /> </bean> <!-- 服務接口的實現Bean定義 --> <bean id="xxxRemoteService" class="com.nineclient.talk.service.impl.JtalkRemoteServiceImpl" />
在web.xml中爲Exporter定義一個相應的Servlet,目的是爲了將這個Exporter映射到一個url地址中,但這個Servlet的名稱需和這個Exporter bean的name一樣!
<servlet> <servlet-name>remoteServiceExporter</servlet-name> <servlet-class>org.springframework.web.context.support.HttpRequestHandlerServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>remoteServiceExporter</servlet-name> <url-pattern>/remoting/xxxRemoteservice</url-pattern> </servlet-mapping> <servlet>
Hessian客戶端的配置:
1)把服務端的接口(實現類不需要)打包成jar給客戶端
2)在一個配置文件如config.properties中,配置遠程服務的地址,如:
HESSIAN_REMOTESERVICE_URL=http://ip:port/serverName/remoting/xxxRemoteservice
2)不妨寫一個工具類來獲得遠程服務的調用地址
public class RemoteHessianUtil {
public static HessianProxyFactory factory;
public static String url;
static {
factory = new HessianProxyFactory();
factory.setOverloadEnabled(true);
url = PropertyReader.getProperty("HESSIAN_REMOTESERVICE_URL");//讀取配置文件屬性並把這些屬性放入map中過程略。。
}
public static Object create(Class<?> api, String urlName) {
try {
return factory.create(api, urlName);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
//獲取遠程調用服務的方法
public static xxxRemoteService getRemoteService() {
return (xxxRemoteService) RemoteHessianUtil.create(xxxRemoteService.class, url);
}
}
做完這些,依次啓動服務端和客戶端,就可以做簡單的遠程調用了。當服務端接口更新,需要重新打包給客戶端。