`

Hessian(纯)的应用与研究

阅读更多
  研究Spring集成的hessian-rpc在不同版本的JVM之间是否支持传递复杂对象以及是否支持引用参数传递。
       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。    
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics