Hessian是binary transport protocol,但与RMI不同的是他不是java序列化对象,所以他可以和其他语言的程序通信,比如C++、C#、Python、Ruby什么的。
Burlap是基于XML的,自然也可以支持很多不同的语言。
当然,同样地传输内容下,XML的传输量会大一些。
如果要说有什么好处的话也只有可读性了。
实在懒得添加依赖再提供原生实现,但他并不复杂。
Creating a Hessian service using Java has four steps:
Create an Java interface as the public API
Create a client using HessianProxyFactory
Create the Service implementation class
Configure the service in your servlet engine.
在这里我主要记录一下如何在spring中导出与调用Hessian service。
正如上面所说,我需要把服务配置到servlet engine中;
服务端和客户端都需要添加一个dependency:
<dependency>
<groupId>com.caucho
</groupId>
<artifactId>hessian
</artifactId>
<version>4.0.33
</version>
</dependency>
正好我这边有个使用springMVC的应用,我就在这个基础上导出Hessian service。
<servlet>
<servlet-name>springServlet
</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation
</param-name>
<param-value>/WEB-INF/spring-mvc.xml
</param-value>
</init-param>
<load-on-startup>1
</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet
</servlet-name>
<url-pattern>/
</url-pattern>
</servlet-mapping>
简单写一个接口与实现:
package pac.king.common.rpc;
public interface MyHessianService {
public String
justHadEnoughParties();
}
package pac.king.common.rpc.impl;
import pac.king.common.rpc.MyHessianService;
public class MyHessianServiceImpl implements MyHessianService {
public String
justHadEnoughParties() {
return "Please save me..";
}
}
我在spring-mvc.xml中曾经做了如下配置,并在*Controller中使用了RequestMapping注解去给URL做映射。
但这并不妨碍我导出Hessian service再为其映射一个URL:
<context:component-scan base-package="pac.king.controller"
use-default-filters="false">
<context:include-filter type="annotation"
expression="org.springframework.stereotype.Controller" />
</context:component-scan>
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<value>
/service=myHessianService
</value>
</property>
</bean>
导出Hessian service:
<bean id="myHessianServiceImpl" class="pac.king.common.rpc.impl.MyHessianServiceImpl" />
<bean id="myHessianService" class="org.springframework.remoting.caucho.HessianServiceExporter"
p:service-ref="myHessianServiceImpl"
p:serviceInterface="pac.king.common.rpc.MyHessianService"
/>
现在可以调用了,我需要在客户端声明一个接口(pac.test.HessianService),再用代理去调用:
<bean id=
"myHessianClient" class=
"org.springframework.remoting.caucho.HessianProxyFactoryBean"
p:serviceUrl=
"http://localhost:8080/runtrain/service"
p:serviceInterface=
"pac.test.HessianService"
/>