使用Spring对RMI的支持,可以非常容易地构建你的分布式应用。在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。
下面通过一个例子,说明如何通过Spring集成RMI。
服务端发布服务
我们定义了服务接口,服务端实现该服务接口来完成其复杂的逻辑,客户端可以通过该接口调用服务端暴露的服务,如下所示:
package org.shirdrn.spring.remote.rmi; public interface AccountService { int queryBalance(String mobileNo); String shoopingPayment(String mobileNo, byte protocol); }
服务实现,示例如下所示:
package org.shirdrn.spring.remote.rmi; import org.apache.log4j.Logger; public class MobileAccountServiceImpl implements AccountService { private static final Logger LOG = Logger.getLogger(MobileAccountServiceImpl.class); public int queryBalance(String mobileNo) { if (mobileNo != null) return 100; return 0; } public String shoopingPayment(String mobileNo, byte protocol) { StringBuffer sb = new StringBuffer().append("Your mobile number is \"").append(mobileNo).append("\" protocol type is \"").append(protocol).append("\"."); LOG.info("Message is: " + sb.toString()); return sb.toString(); } }
服务端发布服务,供客户端进行(远程方法)调用,Spring配置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" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 定义服务实现 --> <bean id="accountService" class="org.shirdrn.spring.remote.rmi.MobileAccountServiceImpl" /> <!-- 使用RmiServiceExporter将服务对象的接口暴露成RMI对象 --> <bean id="serviceExporter" class="org.springframework.remoting.rmi.RmiServiceExporter"> <property name="serviceName" value="MobileAccountService" /> <property name="service" ref="accountService" /> <property name="serviceInterface" value="org.shirdrn.spring.remote.rmi.AccountService" /> <property name="registryPort" value="8080" /> <property name="servicePort" value="8088" /> </bean> </beans>
上面配置,指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为MobileAccountService,客户端通过该服务名称就能够进行调用。
下面启动服务端,发布服务,如下所示:
package org.shirdrn.spring.remote.rmi; import org.springframework.context.support.ClassPathXmlApplicationContext; public class RmiServer { public static void main(String[] args) throws InterruptedException { new ClassPathXmlApplicationContext("org/shirdrn/spring/remote/rmi/server.xml"); Object lock = new Object(); synchronized (lock) { lock.wait(); } } }
客户端调用服务
客户端服务调用配置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" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <!-- 客户端使用RmiProxyFactoryBean连接远程暴露的服务 --> <bean id="mobileAccountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean"> <property name="serviceUrl" value="rmi://localhost:8080/MobileAccountService" /> <property name="serviceInterface" value="org.shirdrn.spring.remote.rmi.AccountService" /> </bean> <!-- 运用依赖注入装配 --> <bean class="org.shirdrn.spring.remote.rmi.RmiClient"> <property name="accountService" ref="mobileAccountService"/> </bean> </beans>
配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用(服务调用)。调用示例如下所示:
package org.shirdrn.spring.remote.rmi; import org.apache.log4j.Logger; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class RmiClient { private static final Logger LOG = Logger.getLogger(RmiClient.class); /** * 容器通过依赖注入装配 */ private static AccountService accountService; public void setAccountService(AccountService accountService) { this.accountService = accountService; } public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("org/shirdrn/spring/remote/rmi/client.xml"); /** * 容器直接实例化 */ // AccountService accountService = (AccountService) ctx.getBean("mobileAccountService"); String result = accountService.shoopingPayment("13800138000", (byte) 5); System.out.println(result); LOG.info(result); } }
可见,实现远程访问变得非常容易
相关推荐
Spring为各种远程访问技术提供集成工具类。Spring远程访问通过使用普通POJOs,能更容易的开发远程访问服务。目前,Spring远程访问的主要技术如下: 1. 远程调用RMI(Remote Method Invocation): 通过使用 ...
当我们结合Spring与RMI时,可以构建分布式系统,使得服务可以在网络中的不同节点上运行并交互。 在这个“spring+rmi非本地实现”的项目中,我们有两个主要部分:客户端(client)和服务端(rmiserver)。让我们深入...
Java Spring与RMI(Remote Method Invocation)的整合是企业级应用中常见的远程服务交互方式。Spring框架提供了对RMI的支持,使得开发者能够方便地在分布式环境中进行服务的调用。这个压缩包文件“Spring+RMI”很...
本文将详细讲解Spring与RMI的整合,以及如何通过"SpringRMIClient"和"SpringRMIServer"这两个示例文件实现跨项目的远程方法调用。 一、Spring整合RMI基础 1.1 RMI原理:RMI的核心在于Java的`java.rmi`包,它定义了...
将Spring与RMI结合,可以实现非本地部署的服务,使得客户端能够跨网络调用服务端的方法。以下是对这个主题的详细阐述: 首先,我们需要理解Spring框架的核心概念。Spring通过依赖注入(Dependency Injection,DI)...
远程接口定义了可供远程访问的方法,远程实现是这些方法的具体实现,RMI 运行时系统负责对象的注册、查找和调用。 3. **RMI 注册**:远程对象需要在 RMI 注册表中注册,以便其他客户端可以找到并调用它。通常,` ...
总结来说,Spring中的RMI集成提供了一种简单且灵活的方式来实现分布式系统中的跨JVM通信。通过学习这个压缩包中的示例,开发者不仅可以掌握RMI的基本原理,还能了解到Spring如何简化这个过程,从而在实际开发中更...
将Spring与RMI结合使用,可以实现分布式服务的灵活构建。 首先,我们需要理解RMI的基本原理。RMI允许一个Java对象调用位于不同JVM中的另一个对象的方法。这涉及到三个主要步骤:导出远程对象、注册远程对象和调用...
6. **连接现有/原有的系统**:RMI可以与现有的网络服务和系统集成。 7. **编写一次,到处运行**:Java的“Write Once, Run Anywhere”原则同样适用于RMI。 8. **分布式垃圾收集**:RMI支持在分布式环境中进行垃圾...
- **依赖注入**:Spring的依赖注入可以轻松地将RMI服务与其他组件集成。 - **事务管理**:Spring的事务管理支持可以跨RMI调用进行事务控制。 4. **RMI与Spring AOP的结合**: Spring的面向切面编程(AOP)可以...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中实现服务间的通信变得更加便捷。本文将深入探讨Spring RMI的实用知识,包括其基本原理、配置步骤...
前几章我们分别利用spring rmi、httpinvoker、httpclient、webservice技术实现不同服务器间的远程访问。本章我将通过spring jms和activemq实现单Web项目服务器间异步访问和多Web项目服务器间异步访问。 一. 简介 1. ...
JMX集成到spring中,并提供了一个rmi远程连接的配置文件
标题与描述中提到的主题是“基于Spring的远程访问与Web Service”,这涉及到Spring框架在企业级应用中的关键特性——即其支持多种远程服务调用的方式,包括但不限于RMI、HTTP Invoker、Hessian、Burlap、JAX-RPC以及...
例如,可能会讨论如何在 Spring 中配置和使用 Hibernate 进行持久化操作,或者如何通过 RMI 在不同进程中通信,以及如何利用线程来优化程序性能,还可能涉及到 Webservice 如何实现跨平台的系统交互。 `持久层设计...
**RMI在Spring中的配置与调用** RMI是Java提供的一种机制,允许一个Java对象调用位于不同JVM中的另一个Java对象的方法。在Spring框架中,我们可以利用其对RMI的支持轻松地创建和消费远程服务。 1. **定义RMI接口**...
- 为了实现**Flex** 与**Spring** 的集成,可以采用**BlazeDS**。这是一种开源服务,使用AMF(Action Message Format)二进制协议构建了**Flex** 与**Java EE** 后端之间的通信桥梁。 - **BlazeDS** 支持**Flex** 对...
RMI(Remote Method Invocation,远程方法调用)是Java平台上的一个重要特性,它允许...不过,实际应用中,还应关注RMI与其他技术(如EJB、JMS、JNDI等)的集成,以及现代Java框架(如Spring)中对RMI的支持和扩展。
- **J2EE项目框架集成**:许多J2EE项目框架如Spring和EJB都封装了RMI技术,以便更方便地实现远程服务调用。 **Spring中实现RMI的步骤**: 1. **定义服务接口**:在服务器端定义一个服务接口,该接口通常包含了...