`

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。    
分享到:
评论

相关推荐

    Vanishing and Finiteness Results in Geometric Analysis

    消失性定理是指某些几何量在特定条件下趋近于零,它们在研究流形的拓扑性质、奇点理论以及复几何中的应用非常广泛。 消失性和有限性结果是几何分析中的重要概念。消失性结果通常是指在某种意义下(如几何、拓扑或...

    非线性数值分析PPT和程序.rar

    非线性数值分析是计算数学的一个重要分支,它主要研究如何使用数值方法来解决实际问题中的...通过学习和实践,可以提升对非线性数值方法的理解和应用能力,为进一步深入研究计算数学或相关领域的复杂问题打下坚实基础。

    810+运筹学.doc

    在硕士研究生入学考试的810运筹学试题中,涉及了多个关键知识点,包括优化算法、线性规划、运输问题、整数规划以及非线性规划等。 1. 对偶问题的性质:若对偶问题为无界解,根据对偶理论,原问题也可能是无界解或无...

    SURF特征匹配 C语言版

    总的来说,这个项目为开发者提供了一个不依赖OpenCV的SURF特征匹配实现,有助于扩展计算机视觉技术的应用范围,同时也为学习和研究提供了宝贵的资源。通过阅读和理解这个项目的源码,开发者可以深化对特征检测和匹配...

    Spring in Action(第2版)中文版

    10.3.2编写纯pojomdp 10.4使用基于消息的rpc 10.4.1引入lingo 10.4.2输出服务 10.4.3代理jms 10.5小结 第11章spring和ejb 11.1在spring中置入ejb 11.1.1代理会话bean(ejb2.x) 11.1.2将ejb置入springbean ...

    Spring in Action(第二版 中文高清版).part2

    10.3.2 编写纯POJO MDP 10.4 使用基于消息的RPC 10.4.1 引入Lingo 10.4.2 输出服务 10.4.3 代理JMS 10.5 小结 第11章 Spring和EJB 11.1 在Spring中置入EJB 11.1.1 代理会话Bean(EJB 2.x) 11.1.2 将EJB...

    Spring in Action(第二版 中文高清版).part1

    10.3.2 编写纯POJO MDP 10.4 使用基于消息的RPC 10.4.1 引入Lingo 10.4.2 输出服务 10.4.3 代理JMS 10.5 小结 第11章 Spring和EJB 11.1 在Spring中置入EJB 11.1.1 代理会话Bean(EJB 2.x) 11.1.2 将EJB...

    java开源包101

    6、支持多种通信框架(Mina/Netty/Grizzly),支持多种序列化/反序列化(Java/Hessian/PB); 7、支持自定义通信协议,可完全替换NFS-RPC自带的协议。 淘宝开放平台JAVA版SDK top4java 设计原则 容易维护扩展(不...

    resin-4.0.65-src.tar.gz

    《Resin 4.0.65源码解析与服务器应用》 Resin,全称为CometD Resin,是一款高性能、轻量级的Java应用服务器,尤其在处理WebSocket和Comet(长轮询)技术方面表现优秀。Resin 4.0.65是其在2013年发布的一个版本,...

    srpc:一个基于netty的简单快速的rpc,没有痛苦

    2. **序列化与反序列化**:RPC调用涉及到跨进程的数据交换,因此需要一个高效的序列化机制,如protobuf、JSON或Hessian,srpc可能内置了这些序列化方案。 3. **负载均衡**:为了实现服务的高可用,srpc可能实现了...

Global site tag (gtag.js) - Google Analytics