spring为各种远程访问技术的集成提供了整合类,spring支持的远程技术有以下这些:
1.远程方法调用(RMI)。通过使用RmiProxyFactoryBean和RmiServiceExporter,spring同时支持传统rmi(使用java.rmo.Remote接口和java.rmi.RemoteException)和通过RMI调用器实现的透明远程调用(支持任何java接口)
2.spring的HTTP调用器。spring提供了一种允许通过HTTP进行串行化的特殊远程调用策略,他支持任意java接口(就像rmi调用器)。相应的支持类是HttpInvokerProxyFactoryBean和HttpInvokerServiceExporter。
3.Hessian。通过HessianProxyFactoryBean和HessianServiceExporter,可以使用Caucho提供的基于HTTP轻量级二进制协议来透明的暴露服务。
4.Burlap。Burlap是caucho基于XML用来替代Hessian的项目。spring提供了诸如BurlapProxyFactoryBean和BurlapServiceExporter的支持类。
5.JAX RPC。
6.JAX-WS。
7.JMS,通过JmsInvokerServiceExporter和JmsInvokerProxyFactoryBean使用JMS作为底层协议提供远程服务。
框架
优点
缺点
rmi
全面支持java对象串行化。因此,你能够通过网络发送复杂数据类型。
rmi仅是一种java到java型远程方案。如果你拥有任何非java客户端的话,那么你无法使用它。另外,你还无法通过http协议存取对象,除非你有专门的“通道”实现rmi通讯。注意,它需要一个rmi编译器(为了生成代理和框架)和一个外部注册表(用于查询服务)。
hessian/burlap
跨防火墙工作良好
它们使用一种专利对象串行化机制。其中,burlap仅支持java客户端。它们能够串行化hibernate对象,但是对集合对象执行“惰式”加载。
http invoker
基于http的java到java remoting;通过http实现java串行化;容易建立。
服务器和客户端应用程序都需要使用spring。
仅是一种java方案。
ejb
支持remoting j2ee服务,应用程序安全以及事务处理
ejb是一种重量级技术。它要求使用一个j2ee容器。
web服务
平台和语言独立
要付出soap操作所带来的开销,并且要求使用一个web服务引擎。
下面是做一个基于HTTP调用器的demo。
首先web.xml中需要配置spring的监听和mvc的dispatcher
引用
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!--spring 启动配置 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<!-- 配置spring service 发布服务远程访问 -->
<servlet>
<servlet-name>remoteService</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:remote/service-exporter.xml
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>remoteService</servlet-name>
<url-pattern>/remote/*</url-pattern>
</servlet-mapping>
然后,你可以写一个接口类和一个实现类。
引用
public interface IUserRemoteService {
public abstract String hello(String name);
}
@Service("userRemoteService")
public class UserRemoteService implements IUserRemoteService {
/* (non-Javadoc)
* @see com.huawei.iread.portal.service.remote.server.IUserRemoteService#hello(java.lang.String)
*/
public String hello(String name){
return "hello:"+name;
}
}
注意,我这里使用了spring的注解,至于注解的用法,不再详细介绍。
然后要做的就是发布服务。
引用
<bean name="/userRemoteService" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
<property name="service" ref="userRemoteService" />
<property name="serviceInterface" value="com.huawei.bportal.portal.service.remote.server.IUserRemoteService"></property>
</bean>
然后是客户端的配置
随意写一个接口,名称可以自定义,如果服务的发布使用了复杂类型的java对象,可以将服务的java对象和接口打成jar包引入到client项目中,如果是简单的字符串类型调用返回,就不必了。这是我客户端的接口,方法名和服务端的方法名保持了一致。
引用
public interface MyTestRemoteService {
String hello(String name);
}
这是xml配置
引用
<bean name="testRemoteService" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">
<property name="serviceUrl" value="${spring.httpInvoker.uri}/userRemoteService" />
<property name="serviceInterface" value="com.huawei.bportal.portal.service.remote.client.MyTestRemoteService"></property>
<!-- 若用默认可不定义此属性 -->
<property name="httpInvokerRequestExecutor" ref="httpInvokerRequestExecutor"></property>
</bean>
<!-- 单线程
<bean id="httpInvokerRequestExecutor" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
<property name="httpClient">
<bean class="org.apache.commons.httpclient.HttpClient">
<property name="connectionTimeout" value="2000" />
<property name="timeout" value="5000" />
</bean>
</property>
</bean>-->
<bean id="httpInvokerRequestExecutor" class="org.springframework.remoting.httpinvoker.CommonsHttpInvokerRequestExecutor">
<property name="httpClient" ref="httpclient" />
</bean>
<!-- HttpClient 启用Apache HttpClient 通信
默认实现,服务器平均10s左右才能响应一个请求。
多线程实现,服务器平均20ms左右响应一个请求。 -->
<bean id="httpclient" class="org.apache.commons.httpclient.HttpClient">
<constructor-arg>
<ref bean="connectionManager"/>
</constructor-arg>
</bean>
<!-- http管理参数配置 -->
<bean id="connectionManager" class="org.apache.commons.httpclient.MultiThreadedHttpConnectionManager">
<property name="params" ref="connectionManagerParams"/>
</bean>
<!-- httpclient线程池 -->
<bean id="connectionManagerParams" class="org.apache.commons.httpclient.params.HttpConnectionManagerParams">
<!-- 设置 连接超时时间(毫秒),默认为0不使用 -->
<property name="connectionTimeout" value="5000"/>
<!-- 设置 读取数据超时(毫秒),默认为0不使用 -->
<property name="soTimeout" value="10000"/>
<!-- 设置默认的连接数量最大允许对一个给定的主机配置 -->
<property name="maxTotalConnections" value="30"/>
<!-- 允许的最大连接数 -->
<property name="defaultMaxConnectionsPerHost" value="20"/>
</bean>
其中${spring.httpInvoker.uri}是服务端的地址,ip加端口号。
下面的调用的方法
引用
//注入来自server端的接口
@Autowired @Qualifier("testRemoteService")
private MyTestRemoteService remoteService;
public String showUser() {
logger.info("测试spring-rmi:"+remoteService.hello("aaaa"));
return SUCCESS;
}
返回hello aaaa就基本成功了完成了
分享到:
相关推荐
Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 RmiProxyFactoryBean 和 RmiServiceExporter,并且,...
标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...
本示例聚焦于一个具体的场景:使用C#客户端远程调用基于Spring框架的Java Web服务。以下将详细阐述涉及的技术点。 首先,Spring框架是Java领域的一个核心组件,尤其在企业级应用开发中广泛使用。它提供了一个全面的...
1. **Spring支持的远程访问技术**:Spring框架支持多种远程访问技术,包括RMI(Remote Method Invocation)、JAX-RPC(Java API for XML-based Remote Procedure Call)、Hessian、Burlap、XFire以及Spring自带的...
Spring Web Services 是基于 Spring 框架的 Web 服务框架,主要侧重于基于文档驱动的Web服务,提供 SOAP 服务开发,允许通过多种方式创建 Web 服务。本章利用Apache CXF构建和开发webservice. 1. webservice远程...
它还包含了对事务管理、数据访问/集成、远程访问、声明式缓存等的支持,以及用于简化企业级应用开发的各种工具。 2. **SpringMVC**: SpringMVC 是 Spring 框架的一部分,用于构建 Web 应用的模型视图控制器。它...
这样,Spring会自动创建一个客户端代理,可以通过这个代理调用远程Web服务。 6. **CxfSpringClient**:根据提供的文件名,这可能是一个示例项目或者代码,展示了如何在Spring环境中配置和使用CXF客户端。可能包含...
4. **发布服务**:将服务部署到Web服务器,如Tomcat,这样客户端就可以通过HTTP访问Hessian服务。 5. **创建Hessian客户端**:在客户端,我们需要创建一个HessianProxyFactoryBean,指定远程服务的URL和接口类型。 ...
- **Spring MVC**:Spring MVC框架用于构建Web应用程序,支持RESTful Web服务的开发。 - **Spring Boot**:简化了Spring应用的初始搭建以及开发过程,提供了一系列的默认配置,便于快速开发。 #### 架构与数据模型 ...
10. **Web服务**:Spring Web Services模块提供了创建和消费SOAP服务的能力,同时支持WSDL-first和代码-first的开发方式。 通过深入学习这本《Spring2.x 开发手册》,开发者不仅可以掌握Spring的基本用法,还能理解...
在IT行业中,Spring框架是Java开发中的一个核心组件,它提供了丰富的功能,包括依赖注入、AOP(面向切面编程)以及模块化的服务支持。在分布式系统中,远程调用是一个常见需求,允许不同的服务之间进行通信。本篇...
3. **创建Hessian客户端**:在Spring Web Flow的客户端,我们需要创建一个`HessianProxyFactoryBean`,设置远程服务的URL和接口类型,这样就能生成一个可以调用远程方法的代理对象。 4. **在SWF中使用Hessian服务**...
Spring开发指南是一份详细指导如何使用Spring框架进行Java开发的文档。Spring框架是由Rod Johnson创建,并且在设计上主张实用主义,它基于Interface21开发包改造而来,旨在创建一个更开放、清晰、全面和高效的开发...
此外,Spring框架还包含对消息传递(如JMS)、任务调度、缓存、远程服务调用等多种企业级服务的支持。Spring Boot的出现进一步简化了基于Spring的应用程序的启动和配置,通过默认配置和起步依赖,极大地加速了开发...
这个jar文件包含Web应用开发时,用到Spring框架时所需的核心类,包括自动载入WebApplicationContext特性的类、Struts与JSF集成类、文件上传的支持类、Filter类和大量工具辅助类。 (12) spring-webmvc.jar 这个...
在IT行业中,Spring框架和Web服务(Web Service)是两个重要的技术领域,它们在构建分布式系统和企业级应用中发挥着关键作用。本示例"Spring+webservice例子"聚焦于如何结合Spring框架来实现Web服务,特别是侧重于...
Spring还提供了Web服务支持,使得其他应用程序(如Flex)可以通过HTTP或更高级的协议(如SOAP或RESTful服务)来调用Spring Bean。 集成Spring和Flex的关键步骤包括: 1. 在Spring配置中定义服务Bean,这些Bean将...
│ 开篇词 从零开始:为什么要学习 Spring Boot?.mp4 │ 01 家族生态:如何正确理解 Spring 家族的技术体系?.mp4 │ 02 案例驱动:如何剖析一个 ...│ 24 服务测试:如何使用 Spring 测试 Web 服务层组件?.mp4
- **Web**:提供了丰富的Web应用开发功能,包括MVC框架、远程调用、Web服务等。 - **测试**:为单元测试和集成测试提供了便利,可以方便地进行Mock操作。 #### 三、使用场景 - **企业级应用开发**:Spring框架因其...
Spring框架是Java企业级应用开发中的主流选择,它提供了全面的基础设施支持,包括依赖注入(DI)、面向切面编程(AOP)、数据访问、事务管理、远程服务、Web应用以及测试工具等。Spring的jar包分为多个模块,每个...