`

Spring整合Hessian

 
阅读更多

         公司做的项目是移动互联网的App产品,采用的是分布式开发架构,总共分为三层,移动端+应用开发平台+基础开发平台。简单介绍下:

移动端:Android,Ios,涉及部分html5

应用开发平台:处理相关业务逻辑,整合平台 提供的各种平台接口的数据,起个聚合的作用。 采用的框架式 SSH(strtus2+spring3+Hessian)

基础开发平台: 注重功能的实现,不涉及业务处理,提供标准的规范的接口与数据库交互,采用的框架是SSI(

springMVC+Spring+Ibatis)

       其中应用开发平台集成得到是相关基础开发平台的接口,数据交互使用的就是Hession。关于Hessian的介绍请在百度下很多介绍,原理分析请看http://blog.csdn.net/zhtang0526/article/details/4788879分享的资源。

 准备工作:

下载Spring3.2.4

http://repo.spring.io/libs-release-local/org/springframework/spring/3.2.4.RELEASE/spring-framework-3.2.4.RELEASE-docs.zip

Logger版本:log4j-1.2.17.jar

Hessian版本:hessian-3.1.3.jar

开发工具:eclipse  Tomcat    

第一步:创建一个动态web项目 Z-Up(可以随意制定,只要符合规范就行),并导入下载的jar包

第二步:配置日志,我这里面涉及日志的配置,详见上篇中介绍,这主要讲Hession的配置

第三步:在包目录下com.syswin.hessian下创建三个类代码如下:

package com.syswin.hessian; 

import java.io.Serializable;

/** 
 * @author  HLY 
 * @date    创建时间:2014年11月24日 下午3:20:47  
 */

public class Person implements Serializable{
	
	private String name;
	
	private Integer age;
	
	private Long id;
	
	public Person(Long id,Integer age,String name){
		this.name = name;
		this.age = age;
		this.id = id;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}
}

 

package com.syswin.hessian; 

/** 
 * @author  HL Y
 * @date    创建时间:2014年11月24日 下午3:19:25  
 */

public interface HessianInterface {
	
	public  Person getPerson();
	
	public  String removePerson();
	
	public  Long addPerson();
	

}

 

package com.syswin.hessian; 

import org.apache.log4j.Logger;

/** 
 * @author  HL Y
 * @date    创建时间:2014年11月24日 下午3:17:01  
 */

public class HessianInterfaceImpl implements HessianInterface{
	
	public static Logger log = Logger.getLogger(HessianInterfaceImpl.class);

	public Person getPerson() {
		 
		return new Person(1L,14,"Wang Mei");
	}

	public String removePerson() {
	 
		return "success";
	}

	public Long addPerson() {
	 
		return new Person(1L,14,"Wang Mei").getId();
	}

}

 

 

第四步:类路径下创建applicationContext.xml并注入PersonService接口

<?xml version="1.0" encoding="UTF-8"?>
<beans 
    xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
		
	<bean id="hessianServiceImpl" class="com.syswin.hessian.HessianInterfaceImpl"></bean>

</beans>

 

 

 第五步:在类路径下出创建hessian-servlet.xml,配置内容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans
	xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd">
	
	<!-- Hessian远程服务 -->
	<bean name="/hessianServiceCall" class="org.springframework.remoting.caucho.HessianServiceExporter">
		<property name="service" ref="hessianServiceImpl" />
		<property name="serviceInterface" value="com.syswin.hessian.HessianInterface" />
	</bean>
	 
</beans>

 第六步:在web.xml中配置我的包含日志的配置,不需要的可以删除掉就ok

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <!--如果不定义webAppRootKey参数,那么webAppRootKey就是缺省的"webapp.root"-->   
  <context-param>
    <param-name>webAppRootKey</param-name>
    <param-value>Z-Up.root</param-value>
  </context-param>
  <!-- log4j.properties 的路径 -->
  <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.properties</param-value>
  </context-param>
  <!-- 开一条watchdog线程每60秒扫描一下配置文件的变化 -->
  <context-param>
    <param-name>log4jRefreshInterval</param-name>
    <param-value>1000</param-value>
  </context-param>
  <!-- log4j的日志监听-->
  <listener>
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
  </listener>
  
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
	    classpath:applicationContext.xml
    </param-value>
  </context-param>
<listener>
  <!-- 在Spring2.0中除了以前的Singleton和Prototype外又加入了三个新的web作用域,分别为request、session和global session,如果你想让你的容器里的某个bean拥有其中某种新的web作用域,除了在bean级上配置相应的scope属性,还必须在容器级做一个额外的初始化配置  -->
  <listener-class>
	org.springframework.web.context.request.RequestContextListener
  </listener-class>
  </listener>
 <listener>
    <listener-class>
	org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
 
  
 <filter>
    <filter-name>CharacterEncoding</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
      <param-name>forceEncoding</param-name>
      <param-value>true</param-value>
    </init-param>
  </filter>

  <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:hessian-servlet.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&gt  
   <welcome-file-list>
    	<welcome-file>index.jsp</welcome-file>
   </welcome-file-list>
</web-app>

配置中红色部分为spring容器加载的配置,Hessian的配置是蓝色字体,其实就是声明的一个大家熟悉的servlet,当然路径可根据实际路径调整。

 

注意事项: 

a)hessian-servlet.xml的文件名必须以<servlet-name>hessian</servlet-name>名字开头,并且加上-servlet.xml一段,组成完整的文件名。
b)hessian-servlet.xml的文件名格式必须是[servlet-name]-servlet.xml格式,否则出错。

因为在配置中没太注意约定的配置,话费了点时间。

 

到此为止整合完成,我们进行最后一步测试

 

第六步测试Hessian的两种调用方式:

在com.syswin.junit包下创建一个TestCase文件名为JunitTest1.java

package com.syswin.junit; 

import java.net.MalformedURLException;

import org.junit.BeforeClass;
import org.junit.Test;

import com.caucho.hessian.client.HessianProxyFactory;
import com.syswin.hessian.HessianInterface;
import com.syswin.hessian.Person;

/** 
 * @author  HL Y 
 * @date    创建时间:2014年11月25日 下午1:25:03  
 */

public class JunitTest1 {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Test
	public void test() throws MalformedURLException, ClassNotFoundException {
	    System.out.println("hessian call --------");
	    String url = "http://172.31.65.50:8080/Z-Up/hessian/hessianServiceCall";
	    HessianProxyFactory factory = new HessianProxyFactory(); 
	    HessianInterface  service =   (HessianInterface) factory.create(url);  factory.create(HessianInterface.class, url);
	    Person person = service.getPerson();
	    System.out.println(" ======== " + service.getPerson().getName());	
	    System.out.println("-----success " + person.getId());
	}
	
}

 解释下方为路径:

http://172.31.65.50:8080/Z-Up/hessian/hessianServiceCall

http://协议 

172.31.65.50本机IP可为localhost

8080是Tomcat端口号

Z-UP为项目的名称

hessian是在web.xml配置的servlet中配置的访问路径

hessianServiceCall为在hessian-servlet.xml中配置的访问的接口注意写法是“/hessianServiceCall”

 

启动Tomcat服务,现在相当于应用提供了Hessian服务,咱们的Main方法相当于客户端做测试代码如下:

package com.syswin.junit; 

import java.net.MalformedURLException;

import org.junit.BeforeClass;
import org.junit.Test;

import com.caucho.hessian.client.HessianProxyFactory;
import com.syswin.hessian.HessianInterface;
import com.syswin.hessian.Person;

/** 
 * @author  HL Y
 * @date    创建时间:2014年11月25日 下午1:25:03  
 */

public class JunitTest1 {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}

	@Test
	public void test() throws MalformedURLException, ClassNotFoundException {
	    System.out.println("hessian call --------");
	    String url = "http://172.31.65.50:8080/Z-Up/hessian/hessianServiceCall";
	    HessianProxyFactory factory = new HessianProxyFactory(); 
	    HessianInterface  service =   (HessianInterface) factory.create(url);  factory.create(HessianInterface.class, url);
	    Person person = service.getPerson();
	    System.out.println(" ======== " + service.getPerson().getName());	
	    System.out.println("-----success " + person.getId());
	}
	
}

 然后在控制台打印出:表示配置 success

 hessian call --------
 ======== Wang Mei
-----success 1

 

好再看另一种测试方法:代码如下

package com.syswin.junit; 

import org.apache.log4j.Logger;
import org.junit.BeforeClass;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.syswin.hessian.HessianInterface;
import com.syswin.hessian.Person;

/** 
 * @author  HL Y 
 * @date    创建时间:2014年11月25日 下午1:25:24  
 */

public class JunitTest2 {
	
	
	private static Logger log  = Logger.getLogger(JunitTest2.class);
	
	private static ApplicationContext ctx ;

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
		ctx = new ClassPathXmlApplicationContext("classpath:applicationContext.xml");
	}

	@Test
	public void test() {
		HessianInterface  personService = (HessianInterface) ctx.getBean("personService");
		Person p = personService.getPerson();
  		System.out.println(" name is " + p.getName() + " age is " + p.getAge());
	}
}

同样控制台打印出:

 name is Wang Mei age is 14

 

第一种方式是基于Hessian代理的方式访问测试

第二种基本spring注入的方式访问相当于spring做有一层封装。

 

初次写博文,若有写的不清楚,或者遗漏之处请大家指出来,希望和大家一块学习交流。

 

 

 

 

 

 

     

分享到:
评论

相关推荐

    Spring集成Hessian案例

    Spring集成Hessian的过程主要包括以下几个步骤: 1. **定义服务接口**:首先,我们需要创建一个Java接口,包含服务提供者需要暴露给消费者的方法。例如,我们可以定义一个名为`UserService`的接口,包含用户查询、...

    spring 集成 hessian例子

    Hessian是一个轻量级的remoting onhttp工具,使用简单的方法提供了RMI的功能。 相比WebService,Hessian更简单、快捷。采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。参考文档地址...

    spring整合hessian进行远程通讯

    标题中的“spring整合hessian进行远程通讯”是指在Spring框架中使用Hessian库来实现远程过程调用(RPC)。这是一个常见的技术组合,用于构建分布式系统,使得应用组件之间可以跨网络进行高效通信。 Hessian是一种二...

    Spring整合Hessian访问远程服务

    首先,让我们理解Spring整合Hessian的基本原理。Spring通过其强大的IoC(Inversion of Control)容器管理服务和客户端,而Hessian则提供了一种二进制的序列化方式,使得远程服务调用更为高效。整合这两者,我们可以...

    spring集成Hessian插件配置改成自动注入。

    总之,Spring集成Hessian插件并改用自动注入可以极大简化服务的管理和调用。通过合理的配置和注解,我们可以实现服务的自动发现和依赖注入,提升代码的灵活性和可维护性。同时,理解并熟练掌握这一技术对于提升开发...

    Spring整合Hessian(Maven Web工程)

    一个Spring整合Hessian的Demo,同时包含Hessian服务端与客户端。是一个Maven工程,IDE使用的Eclipse,运行前需要安装Eclipse的Maven插件。可以结合文章一起学习,地址是...

    Spring中集成Hessian的问题

    在Spring框架中集成Hessian是为了实现远程方法调用(Remote Method Invocation, RMI),这是一种轻量级的序列化协议,可以高效地传输Java对象。Hessian使得服务提供者和服务消费者之间能够通过网络进行快速的数据...

    spring aop hessian 基础demo 部署即可运行

    - **简单易用**:Hessian提供了简单易用的API,便于开发和集成。 **Spring AOP与Hessian的结合** 在Spring中,Hessian通常用来实现远程服务调用。通过AOP,我们可以对Hessian服务进行拦截,添加如日志、性能监控等...

    Spring和Hessian的整合案例

    Hessian是一个由Caucho Technology开发的轻量级二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。 本例子使用spring 整合hessian使开发更加的容易。

    spring+hessian+maven整合.zip

    在Spring整合中,我们可以使用HessianExporter来暴露服务,HessianProxyFactoryBean来创建服务客户端。 3. **Maven**:Maven的pom.xml文件定义了项目依赖、构建过程和插件设置。在这个项目中,它会管理Spring、...

    struts2+ibatis+spring+Hessian 整合项目

    struts2+ibatis+spring+Hessian 整合项目 web项目整合,服务端用hessian协议远程调用服务端的方法,hessian是用spring代理整合,struts2+ibatis+spring的整合项目,用作学习和开发基础平台构建很有用处,工程导入...

    基于spring+hessian框架的webservice实例

    本实例重点探讨的是基于Spring框架和Hessian协议的Web Service实现,这是一种轻量级、高效的远程调用解决方案。 首先,我们要理解Spring框架。Spring是Java领域的一个核心框架,它提供了全面的编程和配置模型,用于...

    Hessian的Spring配置

    在Spring框架中集成Hessian,我们需要进行以下步骤: 1. **创建服务接口和服务实现**: 首先,你需要定义一个服务接口,然后实现这个接口。例如,我们有一个`HelloHessianService`接口,包含一个`sayHello`方法。 `...

    hessian与spring整合的jar包

    当我们将Hessian与Spring进行整合时,主要目标是利用Spring的依赖注入(Dependency Injection, DI)和组件管理能力来简化Hessian服务的创建和管理。以下是一些关键知识点: 1. **Spring核心模块**(spring-core-...

    Spring配置hessian远程服务

    使用eclipse maven工程搭建hessian远程服务demo 分服务端的整合和客户端 建议阅读相关博客http://blog.csdn.net/heisemuyangquan/article/details/79460528

    spring、hessian通过tomcat的简单环境应用源代码

    【标题】"spring、hessian通过tomcat的简单环境应用源代码"涉及到的是在Java Web开发中使用Spring框架和Hessian服务序列化技术在Tomcat服务器上的集成与应用。Spring是一个广泛使用的开源Java应用程序框架,它提供了...

    Hessian与Spring整合需要jar包

    3. **Spring Web库**:如果Hessian服务是通过HTTP提供,那么还需要`spring-web.jar`,它提供了Web相关的支持,如Servlet API的集成。 4. **Servlet容器库**:如`servlet-api.jar`,如果你的应用运行在传统的Java EE...

    flex_spring_hessian框架(Java部分)

    在Java开发中,Flex-Spring-Hessian框架常常被用于构建富客户端应用,它整合了Adobe Flex前端与Spring后端服务,利用Hessian协议进行二进制RPC通信,提高了数据传输效率。本篇文章将围绕这三个关键组件,深入探讨...

Global site tag (gtag.js) - Google Analytics