`
bit1129
  • 浏览: 1070077 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【RPC框架Hessian四】Hessian与Spring集成

 
阅读更多

【RPC框架Hessian二】Hessian 对象序列化和反序列化一文中介绍了基于Hessian的RPC服务的实现步骤,在那里使用Hessian提供的API完成基于Hessian的RPC服务开发和客户端调用,本文使用Spring对Hessian的集成来实现Hessian的RPC调用。

 

定义模型、接口和服务器端代码

|---Model

        |--ComplexModel

        |--Person

        |--Point

 

|---Interface

        |--IComplexModelService

 

|---Service Implementation

        |--ComplexModelService

 

 

定义pom.xml

 添加对Spring、Hessian和Spring Remoting的支持

 

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>hessian.project</artifactId>
        <groupId>com.tom</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>learn.hessian.spring.integration</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.caucho</groupId>
            <artifactId>hessian</artifactId>
            <version>4.0.38</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>


        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-remoting</artifactId>
            <version>2.0.8</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <!--jetty plugin to manage embedded jetty-->
            <!--No goal  is specified-->
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>maven-jetty-plugin</artifactId>
                <version>6.1.7</version>
                <configuration>
                    <connectors>
                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                            <port>8668</port>
                            <maxIdleTime>30000</maxIdleTime>
                        </connector>
                    </connectors>
                    <webAppSourceDirectory>${project.basedir}/web
                    </webAppSourceDirectory>
                    <contextPath>/web</contextPath>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

 

定义web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <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:applicationContext-hessian-server.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>
</web-app>

 

定义applicationContext-hessian-server.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <!-- 服务暴露 -->
    <bean name="/complexModelService" class="org.springframework.remoting.caucho.HessianServiceExporter">
        <!-- 服务类 -->
        <property name="service">
            <bean id="complexModelService" class="com.tom.hessian.server.ComplexModelService"/>
        </property>
        <property name="serviceInterface">
            <value>
                com.tom.hessian.common.IComplexModelService
            </value>
        </property>
    </bean>

</beans>

 

定义applicationContext-hessian-client.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
 http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
    <!--远程对象代理工厂-->
    <bean name="complexModelService" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
        <property name="connectTimeout" value="60000"/>
        <property name="serviceUrl" value="http://localhost:8668/web/hessian/complexModelService"/>
        <property name="serviceInterface" value="com.tom.hessian.common.IComplexModelService"/>
    </bean>

</beans>

 

定义客户端测试代码

 

package com.tom.hessian.client;

import com.tom.hessian.common.ComplexModel;
import com.tom.hessian.common.IComplexModelService;
import com.tom.hessian.common.Person;
import com.tom.hessian.common.Point;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class ComplextModelServiceSpringTest {

    public static void main(String[] args) throws Exception {
        ComplexModel<Point> model = new ComplexModel<Point>();
        model.setId(1);
        Person person = new Person();
        person.setName("Tom");
        person.setAge(86);
        person.setBirthDay(new Date());
        person.setSensitiveInformation("This should be private over the wire");
        model.setPerson(person);

        List<Point> points = new ArrayList<Point>();
        Point point = new Point();
        point.setX(3);
        point.setY(4);
        points.add(point);

        point = new Point();
        point.setX(100);
        point.setY(100);
        points.add(point);

        model.setPoints(points);


        //远程方法调用
        ClassPathXmlApplicationContext cxt = new ClassPathXmlApplicationContext("applicationContext-hessian-client.xml");
        IComplexModelService service = cxt.getBean("complexModelService", IComplexModelService.class);
        service.save(model);
        model = service.read(model.getId());
        List<Point> points1 = model.getPoints();
        for(Point elem : points1) {
            System.out.println(elem.getX() + "\t" + elem.getY());
        }

    }

}

 

运行

启动Jetty Server,然后运行上面的客户端代码,可以正常执行

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    Spring集成Hessian案例

    本案例主要关注如何将Spring与Hessian进行集成,实现远程服务调用,从而提高系统的分布式能力。 首先,我们要理解Spring的核心概念。Spring通过依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-...

    Hessian和Spring集成示例

    下面将详细讲解Hessian与Spring集成的关键知识点。 首先,理解Hessian是什么至关重要。Hessian是一个二进制的Web服务协议,由Caucho公司开发。它提供了轻量级、高效的RPC(Remote Procedure Call)框架,使得Java...

    Hessian RPC-RMI技术 整合Structs Spring Hibernate Ibatis

    本文主要讨论的是如何将Hessian RPC与RMI技术整合到Structs、Spring、Hibernate和Ibatis这四个关键的Java开发框架中,以构建一个高效、灵活的分布式应用程序。 1. **Hessian配置说明**: Hessian的配置通常涉及...

    Hessian的Spring配置

    在Spring框架中,Hessian是一种轻量级的远程方法调用(RPC)协议,它能够实现Java对象到字节流的序列化,从而使得服务端的对象可以在客户端直接调用,仿佛对象就在本地一样。Hessian提供了高效的二进制RPC协议,使得...

    spring 集成 hessian例子

    Hessian是一个轻量级的remoting onhttp工具,使用...采用的是二进制RPC协议,因为采用的是二进制协议,所以它很适合于发送二进制数据。参考文档地址为:http://blog.csdn.net/likunwen_001/article/details/78119765

    Hessian与Spring整合需要jar包

    在Java开发中,Hessian和Spring是两个非常重要的框架,它们各自在不同的领域发挥着关键作用。Hessian是一种轻量级的远程方法调用(RPC)协议,它基于HTTP协议,能够有效地传输二进制数据,提高网络通信效率。而...

    基于spring+hessian框架的webservice实例

    Spring的核心特性包括依赖注入(Dependency Injection, DI)和面向切面编程(Aspect-Oriented Programming, AOP),它还支持数据库事务管理、JMS、JMX等功能,并且可以与其他Java EE技术如JPA、JSF等无缝集成。...

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

    Spring框架为了提供远程服务调用的支持,将其集成到自己的服务中,使得开发者能够利用Hessian的特性来实现高效、轻量级的服务间通信。本文将深入探讨Hessian在Spring中的应用以及相关研究。 一、Hessian简介 ...

    Hessian与spring整合

    当我们谈论“Hessian与Spring整合”时,通常是指将Hessian作为服务通信的机制,结合Spring框架来构建分布式服务系统。这种整合有以下几个关键点: 1. **服务提供者(Service Provider)**:首先,我们需要在服务端...

    hessian轻量级 rpc实现

    5. 简单集成:Hessian可以轻松地与现有的Web服务框架集成,如Spring,无需额外的配置和代码。 四、Hessian的应用 在实际项目中,我们可以通过以下步骤使用Hessian实现RPC: 1. 客户端:创建HessianProxyFactory,...

    spring springmvc hessian rpc客户端及服务端示例demo

    本示例着重介绍如何在Spring和SpringMVC框架中集成Hessian RPC,以实现客户端和服务端的通信。 Hessian是一种轻量级的二进制Web服务协议,由Caucho公司开发。它具有较高的传输效率,支持Java和.NET等多种语言,特别...

    spring+hessian搭建rpc体系

    如果用tomcat部署服务器,需要hessian的认证,请在E:\tomcat\apache-tomcat-7.0.69\conf\tomcat-users.xml下面配置信息:如下 &lt;role rolename="Hessian"/&gt; 账号" password="密码" roles="Hessian"/&gt;

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

    这篇博客文章可能详细介绍了如何将Spring与Hessian插件结合,并将原本的手动配置改为自动注入,从而简化了项目的配置和管理。 首先,我们需要理解Spring的自动注入机制。Spring依赖注入(Dependency Injection, DI...

    在 Spring Web Flow 项目中应用 Hessian 服务

    Spring Web Flow(SWF)是一个强大的MVC框架,用于构建具有复杂导航逻辑的Web应用程序,而Hessian则是一种轻量级的二进制RPC协议,能够有效地减少网络传输的数据量,提高服务调用的效率。这两者的结合可以为大型...

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

    **Spring AOP与Hessian的结合** 在Spring中,Hessian通常用来实现远程服务调用。通过AOP,我们可以对Hessian服务进行拦截,添加如日志、性能监控等额外功能。以下是一个基本的步骤: 1. **创建Hessian服务**:首先...

    hessian4.0.7结合spring2.5.6的bug

    Hessian 4.0.7是这个协议的一个版本,它与Spring 2.5.6框架结合使用时,可能会遇到一些特定的问题。Spring作为一个流行的Java企业级应用框架,提供了强大的依赖注入、AOP(面向切面编程)等功能,而Hessian则为远程...

    轻量级远程服务调用Hessian的入门实例和与Spring整合的实例.zip

    这个压缩包文件包含了关于Hessian的入门实例以及如何将其与Spring框架整合的教程。 一、Hessian入门实例 Hessian的入门实例主要展示了如何创建一个简单的服务提供者和消费者。首先,我们需要定义一个服务接口,例如...

    Hessian 使用小结

    4. **客户端调用**:客户端可以选择与Spring集成,通过Spring的`ApplicationContext`获取代理对象,或者直接使用Hessian工具生成代理。 **安全机制** Hessian提供了基于X.509证书的加密和签名机制,这包括`X509...

    spring整合hessian进行远程通讯

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

    基于Netty的高性能RPC框架 .zip

    基于Netty的高性能RPC框架 项目概述 NettyRPC是一个基于Netty构建的高性能Java RPC服务器,支持多种消息序列化方式,如Kryo、Hessian和Protostuff。该项目通过Spring容器管理服务定义和实现,采用主从Reactor线程...

Global site tag (gtag.js) - Google Analytics