研究Spring集成的hessian-rpc在不同版本的JVM之间是否支持传递复杂对象以及是否支持引用参数传递。
1.核心对象ComplexModel、Person、TestModel1、TestModel2、User。通过Hessian传输的对象都要实现java.io.Serializable接口。
2.接口PeopleService 接口实现PeopleServiceImpl
PeopleService.java
PeopleServiceImpl.java
3.web.xml配置文件
web.xml
4.hessian访问客户端
HessianRPCClient.java
6.将项目发布到tomcat上,启动客户访问,测试结果:
Hessian-rpc支持在不同的JVM版本之间传递复杂对象,并且还支持引用参数传递。速度的话,在传输小对象比RMI还快,传输大对象则不如RMI。
1.核心对象ComplexModel、Person、TestModel1、TestModel2、User。通过Hessian传输的对象都要实现java.io.Serializable接口。
2.接口PeopleService 接口实现PeopleServiceImpl
PeopleService.java
public interface PeopleService {
public String showMessage(String name);
public User getUser();
public ComplexModel getModel();
public void compareModel(ComplexModel model);
}
PeopleServiceImpl.java
public class PeopleServiceImpl implements PeopleService {
public User getUser() {
User result = new User();
result.setId("007");
result.setUserName("zhangsan");
result.setPassword("123456");
List<String> fs = new ArrayList<String>();
fs.add("sdsfdsfsd");
fs.add("sfsdfdsgsdf");
result.setFriends(fs);
return result;
}
public ComplexModel getModel() {
ComplexModel model = new ComplexModel();
User user = new User();
user.setId("007");
user.setUserName("zhangsan");
user.setPassword("123456");
List<String> fs = new ArrayList<String>();
fs.add("sdsfdsfsd");
fs.add("sfsdfdsgsdf");
user.setFriends(fs);
TestModel1 m1 = new TestModel1();
m1.setUser(user);
TestModel2 m2 = new TestModel2();
m2.setUser(user);
model.setModel1(m1);
model.setModel2(m2);
System.out.println("....." + (model.getModel1().getUser() == model.getModel2().getUser()));
return model;
}
public void compareModel(ComplexModel model) {
System.out.println("....." + (model.getModel1().getUser() == model.getModel2().getUser()));
}
public String showMessage(String name) {
return null;
}
}
3.web.xml配置文件
web.xml
<servlet>
<servlet-name>hessianService</servlet-name>
<servlet-class>
com.caucho.hessian.server.HessianServlet
</servlet-class>
<init-param>
<param-name>home-class</param-name>
<param-value>
com.mangocity.hessianrpc.service.impl.PeopleServiceImpl
</param-value>
</init-param>
<init-param>
<param-name>home-api</param-name>
<param-value>
com.mangocity.hessianrpc.service.PeopleService
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>hessianService</servlet-name>
<url-pattern>/hessianService</url-pattern>
</servlet-mapping>
4.hessian访问客户端
HessianRPCClient.java
public class HessianRPCClient {
public static String url;
/**
*
*/
public HessianRPCClient(String url) {
this.url = url;
}
/**
* @param args
*/
public static void main(String[] args) {
for (int index = 0; index < 1000; index++) {
String url = "http://10.10.40.9/hessian/hessianService";
HessianProxyFactory factory = new HessianProxyFactory();
PeopleService service;
try {
service = (PeopleService) factory.create(PeopleService.class, url);
ComplexModel cm = service.getModel();
System.out.println(cm.getModel1().getUser() == cm.getModel2().getUser());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
}
6.将项目发布到tomcat上,启动客户访问,测试结果:
Hessian-rpc支持在不同的JVM版本之间传递复杂对象,并且还支持引用参数传递。速度的话,在传输小对象比RMI还快,传输大对象则不如RMI。