hessian是一个优秀的轻量级RMI框架,可以简单方便的实现分布式系统之间的web service。然而强大的spring也集成了hessian,封装了hessian客户端和服务端的实现。接下来简单说明下用spring实现hessian的应用。
【实现步骤】
1、编写服务端接口
package com.lvmama.hessian.service.impl;
public interface BaseService {
public abstract void setStr(String str);
public abstract void say();
}
2、编写服务端实现
package com.lvmama.hessian.service.impl;
public class BaseServiceImpl implements BaseService {
private String str;
public void setStr(String str) {
this.str = str;
}
public void say() {
System.out.println(str);
}
}
3、配置服务端web.xml
<servlet>
<servlet-name>service</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>service</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
4、配置服务端web.xml同路径下的service-servlet.xml
<bean name="/baseService" class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="baseService" />
<property name="serviceInterface" value="com.lvmama.hessian.service.impl.BaseService" />
</bean>
<bean id="baseService" class="com.lvmama.hessian.service.impl.BaseServiceImpl" />
5、配置客户端applicationContext.xml
<bean id="baseService"
class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<property name="serviceUrl"
value="http://localhost:8080/hessian_service_implement/remoting/baseService" />
<property name="serviceInterface"
value="com.lvmama.hessian.service.impl.BaseService" />
<property name="chunkedPost" value="false" />
<property name="overloadEnabled" value="true" />
</bean>
package com.lvmama.hessian.client.test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import com.lvmama.hessian.service.impl.BaseService;
public class HessianSpringClientTestImpl {
public static void main(String[] args) {
Resource resource = new ClassPathResource("applicationContext.xml");
BeanFactory factory = new XmlBeanFactory(resource);
BaseService service = (BaseService)factory.getBean("baseService");
service.setStr("hi tony!");
service.say();
}
}
7、运行
hi tony!
【注意事项】
服务端web.xml中servlet-name为service,则同目录下服务端hessian的spring配置文件名就必须是service-servlet.xml,否则启动服务端时会报service-servlet.xml文件找不到,具体错误如下:
org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/service-servlet.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/service-servlet.xml]