实际生产情况,接口项目里面只定义接口,分别为服务端项目和客户端项目所引用:
1. 接口项目:
pom.xml文件:
<groupId>com.john.spring</groupId> <artifactId>hessian-intf</artifactId> <version>1.0.0</version> <packaging>jar</packaging>
public interface AddService { public int add(int a, int b); public long add(long a, long b); }
2. 服务端项目:
pom.xml文件:
<groupId>com.john.spring</groupId> <artifactId>hessian-server</artifactId> <version>1.0.0</version> <packaging>war</packaging> <properties> <testng.version>6.4</testng.version> <hessian.version>4.0.7</hessian.version> <spring.version>3.1.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>com.john.spring</groupId> <artifactId>hessian-intf</artifactId> <version>1.0.0</version> </dependency> <dependency><!-- DispatcherServlet在spring-webmvc包中 --> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>${hessian.version}</version> </dependency> </dependencies>
public class AddServiceImpl implements AddService { @Override public int add(int a, int b) { System.out.println("add(int a, int b) is invoked"); return a + b; } @Override public long add(long a, long b) { System.out.println("add(long a, long b) is invoked"); return a + b; } }
web.xml
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> <servlet> <servlet-name>hessian</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>/WEB-INF/hessian-simple.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>hessian</servlet-name> <url-pattern>*.htm</url-pattern> </servlet-mapping> </web-app>
hessian-simple.xml:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="addService.htm" class="com.john.spring.hessian.service.impl.AddServiceImpl" /> <bean name="/addService.htm" class="org.springframework.remoting.caucho.HessianServiceExporter"> <property name="service" ref="addService.htm" /> <property name="serviceInterface" value="com.john.spring.hessian.service.intf.AddService" /> </bean> </beans>
启动服务端项目:
浏览器输入:http://localhost/hessian/addService.htm,查看是否可以调用。
3. 客户端项目:
pom.xml文件
<groupId>com.john.spring</groupId> <artifactId>hessian-client</artifactId> <version>1.0.0</version> <packaging>jar</packaging> <properties> <testng.version>6.4</testng.version> <hessian.version>4.0.7</hessian.version> <spring.version>3.1.2.RELEASE</spring.version> </properties> <dependencies> <dependency> <groupId>com.john.spring</groupId> <artifactId>hessian-intf</artifactId> <version>1.0.0</version> </dependency> <dependency><!-- HessianProxyFactoryBean在spring-web包中 --> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.caucho</groupId> <artifactId>hessian</artifactId> <version>${hessian.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.testng</groupId> <artifactId>testng</artifactId> <version>${testng.version}</version> <scope>test</scope> </dependency> </dependencies>
spring-beans.xml文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="addService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <property name="serviceUrl" value="http://localhost:8080/hessian/addService.htm" /> <property name="serviceInterface" value="com.john.spring.hessian.service.intf.AddService" /> <!-- By default the value is false. As a matter of fact, it doesn't influence the test result, the overloaded method still be supported --> <property name="overloadEnabled" value="false" /> </bean> </beans>
测试类:
@ContextConfiguration(locations={"classpath:conf/spring/spring-beans.xml"}) public class AddServiceTest { @Autowired AddService addService; @Test public void test() { int r = addService.add(4, 5); System.out.println("The result is " + r); } }
运行测试方法,查看是否调用成功。
附:
客户端Hessian bean的配置也可以放到接口项目中,这样一来,调用hessian的工程只需添加对接口项目的引用,而后在spring配置文件中导入:
<import resource=”classpath*:conf/spring/spring-*.xml” />