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现在已经集成到hessian jar中 不作为一个单独的项目了 ">Burlap是一个轻量级的XML RPC协议 这使得他可以移植到任何可以解析XML的语言中 比起Hessian 它的可读性更强 和其他基于Xml的远程技术(如SOAP和XML RPC...
- **功能简介**:包含了 Web 应用开发时使用 Spring 框架时所需的核心类,包括自动载入 WebApplicationContext 特性的类、Struts 与 JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。 - **应用场景**:...
例如,Spring框架的`JDK Proxy`或`CGLIB`可以用来创建动态代理,使得客户端可以透明地调用远程服务。 2. **序列化与反序列化**:由于RPC涉及跨进程通信,数据需要在网络中传输,这就需要将对象转换为可传输的格式,...
Hessian是一个序列化工具,可以将Java对象序列化成二进制流,而Burlap是一个 RPC 框架,使用Hessian序列化工具来实现RPC调用。 (三)HTTP Invoker HTTP Invoker是Spring自带的RPC解决方案,它使用HTTP协议来传输...
- **Hessian和Burlap**: 这是两个轻量级的RPC框架,它们提供二进制和XML序列化协议,简化跨语言的RPC调用。 - **gRPC**: Google开源的高性能、通用的RPC框架,基于HTTP/2协议,支持多种语言,包括Java,提供了强大...
Spring为各种远程访问技术提供集成工具类。Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 ...
ORM(Object-Relational Mapping)包则为流行的ORM框架提供了集成,使得开发者能够无缝地使用这些框架并结合Spring的其他功能。 除此之外,Spring还提供了EJB(Enterprise JavaBeans)的支持,可以方便地与远程服务...
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...
这些JAR包包含了Spring框架的类库,以及其他与Spring集成的第三方库,确保了项目能够正常运行和编译。 下面将详细介绍这些子文件所代表的库和它们在Spring框架中的作用: 1. **org.testng**: TestNG是一个自动化...
- 提供了对 EJB、JMS 以及远程调用(如 RMI、Hessian、Burlap、HttpInvoker、JAX-RPC)相关的类。 10. **spring-support.jar** - 该组件提供了对 Cache(如 ehcache)、JCA、JMX、邮件服务(如 JavaMail、COS ...
在服务调用上,Spring的Remoting模块支持远程过程调用(RPC),如RMI、Hessian、 Burlap等协议,使得分布式系统间的通信更为便捷。 最后,Spring Boot和Spring Cloud的出现简化了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. ...
9. **spring-remoting.jar**:提供了对远程调用的支持,如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker和JAX-RPC。 10. **spring-support.jar**:包含缓存、JCA、JMX、邮件服务、任务调度等高级功能的类。 11. **...
标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...
支持远程调用功能,例如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker、JAX-RPC等。 10. **spring-support.jar** 提供了一些额外的功能支持,如缓存管理、定时任务、邮件服务等。 11. **spring-web.jar** ...
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提供了多种RPC实现,如RMI、Hessian、 Burlap和Web服务。 3. **XFire**:XFire是一款基于Java的轻量级Web服务框架,它简化了创建和消费Web服务的过程。XFire支持多种协议,如SOAP、REST,并能与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. 命令控制器 ...