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

【RPC框架Burlap】Spring集成Burlap

 
阅读更多

Burlap和Hessian同属于codehaus的RPC调用框架,但是Burlap已经几年不更新,所以Spring在4.0里已经将Burlap的支持置为Deprecated,所以在选择RPC框架时,不应该考虑Burlap了。

这篇文章还是记录下Burlap的用法吧,主要是复制粘贴了Hessian与Spring集成一文,【RPC框架Hessian四】Hessian与Spring集成

 

Burlap和Hessian的共同点:

  • 基于HTTP协议
  • 简单易上手,不需要定义复杂的接口描述文件,如WSDL,IDL
  • 在RPC框架中,性能优越
  • Spring对它们一致的集成,使得在Burlap和Hessian之间切换很容易,只要修改Spring的暴露接口(Exporter)和远程服务代理工厂类,就可以实现切换

Burlap和Hessian的不同点:

  • Burlap基于XML,Hessian基于二进制,这使得Burlap传输数据的可读性优于Hessian
  • Hessian的性能稍微优于Burlap

 

 

【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">
    <!-- 服务暴露 -->
    <!--BurlapServiceExporter代替HessianServiceExporter-->
    <bean name="/complexModelService" class="org.springframework.remoting.caucho.BurlapServiceExporter">
        <!-- 服务类 -->
        <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">
    <!--远程对象代理工厂-->
    <!--BurlapProxyFactoryBean代替HessianProxyFactoryBean-->
    <bean name="complexModelService" class="org.springframework.remoting.caucho.BurlapProxyFactoryBean">
        <!--BurlapProxyFactoryBean没有connectTimeout属性-->
        <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,然后运行上面的客户端代码,可以正常执行

分享到:
评论

相关推荐

    burlap-spring-demo

    Burlap现在已经集成到hessian jar中 不作为一个单独的项目了 "&gt;Burlap是一个轻量级的XML RPC协议 这使得他可以移植到任何可以解析XML的语言中 比起Hessian 它的可读性更强 和其他基于Xml的远程技术(如SOAP和XML RPC...

    spring jar 包详解

    - **功能简介**:包含了 Web 应用开发时使用 Spring 框架时所需的核心类,包括自动载入 WebApplicationContext 特性的类、Struts 与 JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。 - **应用场景**:...

    rpc 远程调用

    例如,Spring框架的`JDK Proxy`或`CGLIB`可以用来创建动态代理,使得客户端可以透明地调用远程服务。 2. **序列化与反序列化**:由于RPC涉及跨进程通信,数据需要在网络中传输,这就需要将对象转换为可传输的格式,...

    基于Spring的RPC通讯模型的使用与比较

    Hessian是一个序列化工具,可以将Java对象序列化成二进制流,而Burlap是一个 RPC 框架,使用Hessian序列化工具来实现RPC调用。 (三)HTTP Invoker HTTP Invoker是Spring自带的RPC解决方案,它使用HTTP协议来传输...

    一个基于Java的RPC工具.zip

    - **Hessian和Burlap**: 这是两个轻量级的RPC框架,它们提供二进制和XML序列化协议,简化跨语言的RPC调用。 - **gRPC**: Google开源的高性能、通用的RPC框架,基于HTTP/2协议,支持多种语言,包括Java,提供了强大...

    Spring 实现远程访问详解——rmi

    Spring为各种远程访问技术提供集成工具类。Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 ...

    spring 培训资料

    ORM(Object-Relational Mapping)包则为流行的ORM框架提供了集成,使得开发者能够无缝地使用这些框架并结合Spring的其他功能。 除此之外,Spring还提供了EJB(Enterprise JavaBeans)的支持,可以方便地与远程服务...

    最新最全的spring开发包

     这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...

    Spring 2.5 jar 所有开发包及完整文档及项目开发实例

     这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar  这个...

    Spring依赖包

    这些JAR包包含了Spring框架的类库,以及其他与Spring集成的第三方库,确保了项目能够正常运行和编译。 下面将详细介绍这些子文件所代表的库和它们在Spring框架中的作用: 1. **org.testng**: TestNG是一个自动化...

    Spring包结构以及各个包之间引用关系说明.doc

    - 提供了对 EJB、JMS 以及远程调用(如 RMI、Hessian、Burlap、HttpInvoker、JAX-RPC)相关的类。 10. **spring-support.jar** - 该组件提供了对 Cache(如 ehcache)、JCA、JMX、邮件服务(如 JavaMail、COS ...

    spring framework中文开发参考手册

    在服务调用上,Spring的Remoting模块支持远程过程调用(RPC),如RMI、Hessian、 Burlap等协议,使得分布式系统间的通信更为便捷。 最后,Spring Boot和Spring Cloud的出现简化了Spring应用的开发和部署,提供了...

    Spring-Reference_zh_CN(Spring中文参考手册)

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 13.4. ...

    Spring——jar详解

    9. **spring-remoting.jar**:提供了对远程调用的支持,如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker和JAX-RPC。 10. **spring-support.jar**:包含缓存、JCA、JMX、邮件服务、任务调度等高级功能的类。 11. **...

    基于Spring的远程访问与Web Service

    标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...

    spring2.5 -3.0 hibernate3.3 jar包说明

    支持远程调用功能,例如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker、JAX-RPC等。 10. **spring-support.jar** 提供了一些额外的功能支持,如缓存管理、定时任务、邮件服务等。 11. **spring-web.jar** ...

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

    15.4 集成Spring Web Flow与其他框架 15.4.1 Jakarts Struts 15.4.2 JavaServer Face 15.5 小结 第16章 集成其他Web框架 16.1 协同使用Spring和Struts 16.1.1 向Struts注册Spring插件 16.1.2 编写知晓Spring...

    spring远程调用和xfire aegis 源代码上传

    Spring提供了多种RPC实现,如RMI、Hessian、 Burlap和Web服务。 3. **XFire**:XFire是一款基于Java的轻量级Web服务框架,它简化了创建和消费Web服务的过程。XFire支持多种协议,如SOAP、REST,并能与Spring框架...

    Spring 2.0 开发参考手册

    13.1.2. Spring Web MVC框架的特点 13.2. DispatcherServlet 13.3. 控制器 13.3.1. AbstractController 和 WebContentGenerator 13.3.2. 其它的简单控制器 13.3.3. MultiActionController 13.3.4. 命令控制器 ...

Global site tag (gtag.js) - Google Analytics