Hessian(Spring集成的)的应用与研究

研究Spring集成的hessian-rpc在不同版本的JVM之间是否支持传递复杂对象以及是否支持引用参数传递。
1.核心对象People、Person、Address、Boyfriend1、Boyfriend2。通过Hessian传输的对象都要实现java.io.Serializable接口。


2.接口PeopleService 接口实现PeopleServiceImpl
PeopleService.java
public interface PeopleService {

public People getPeopleByName(String name);

}

PeopleServiceImpl.java
public class PeopleServiceImpl implements PeopleService {

private People people;

public void setPeople(People people) {
this.people = people;
}

public People getPeopleByName(String name) {
return people;
}
}


3.核心配置文件
applicationContext-hessianrpc-hessian.xml
<bean id="peopleServiceRemote" name="/peopleServiceRemote"
class="org.springframework.remoting.caucho.HessianServiceExporter">
<property name="service" ref="peopleService"></property>
<property name="serviceInterface">
<value>com.mangocity.hessianrpc.service.PeopleService</value>
</property>

</bean>
applicationContext-hessianrpc-services.xml
<bean id="peopleService" class="com.mangocity.hessianrpc.service.impl.PeopleServiceImpl">
<property name="people" ref="people">
</property>
</bean>

<bean id="people" class="com.mangocity.hessianrpc.pojo.People" >
<property name="name"> <value>fenglin</value></property>
<property name="boyfriend" ref="boyfriend"></property>
<property name="boyfriend1" ref="boyfriend1"></property>
<property name="boyfriends">
<list>
<ref bean="boyfriend"/>
<ref bean="boyfriend1"/>
</list>
</property>

<property name="boyfriendMap">
<map>
<entry>
<key><value>fengluan</value></key>
<ref bean="boyfriend"/>
</entry>
<entry>
<key><value>fengluan1</value></key>
<ref bean="boyfriend1"/>
</entry>
</map>
</property>
<property name="boyfriendSet">
<set>
<ref bean="boyfriend"/>
<ref bean="boyfriend1"/>
</set>
</property>
</bean>

<bean id="boyfriend" class="com.mangocity.hessianrpc.pojo.Boyfriend">
<property name="address">
<ref bean="address"/>
</property>
</bean>

<bean id="boyfriend1" class="com.mangocity.hessianrpc.pojo.Boyfriend1">
<property name="address">
<ref bean="address"/>
</property>
</bean>

<bean id="address" class="com.mangocity.hessianrpc.pojo.Address">
<property name="zipCode"><value>518000</value>
</property>
<property name="url"><value>深圳市芒果网有限公司</value>
</property>
</bean>
web.xml
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/applicationContext-hessianrpc-beans.xml
</param-value>
</context-param>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

<servlet>
<servlet-name>Hessian</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:spring/applicationContext-hessianrpc-hessian.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>Hessian</servlet-name>
<url-pattern>/hessian/*</url-pattern>
</servlet-mapping>


4.hessian访问客户端
HessianRPCClient.java
public class HessianRPCClient {

String url;
/**
*
*/
public HessianRPCClient(String url) {
this.url = url;
}

public People getPeopleFromPeopleService(String name){

HessianProxyFactory factory = new HessianProxyFactory();
try {
PeopleService proxy = (PeopleService)factory.create(PeopleService.class, url);
return proxy.getPeopleByName(name);
} catch (MalformedURLException e) {
e.printStackTrace();
}
return new People();
}
/**
* @param args
*/
public static void main(String[] args) {

HessianRPCClient client = new HessianRPCClient("http://127.0.0.1:8088/hessianRPC/hessian/peopleServiceRemote");
People people = client.getPeopleFromPeopleService("people");
System.out.println(people.getName());
System.out.println(people.getBoyfriend().getAddress() == people.getBoyfriend1().getAddress());
System.out.println(people.getBoyfriend() == people.getBoyfriends().get(0));
System.out.println(people.getBoyfriendMap().get("fengluan") == people.getBoyfriendSet().iterator().next());
System.out.println(people.getBoyfriend() == people.getBoyfriendMap().get("fengluan"));
}

}

6.将项目发布到tomcat上,启动客户访问,测试结果:
Hessian-rpc支持在不同的JVM版本之间传递复杂对象,并且还支持引用参数传递。速度的话,在传输小对象比RMI还快,传输大对象则不如RMI。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值