使用Spring对RMI的支持,可以非常容易地构建你的分布式应用。在服务端,可以通过Spring的org.springframework.remoting.rmi.RmiServiceExporter可以暴露你的服务;在客户端,通过org.springframework.remoting.rmi.RmiProxyFactoryBean可以使用服务端暴露的服务,非常方便。这种C/S模型的访问方式,可以屏蔽掉RMI本身的复杂性,如服务端Skeleton和客户端Stub等的处理细节,这些对于服务开发和服务使用的人员来说,都是透明的,无需过度关注,而集中精力开发你的商业逻辑。
下面通过一个例子,说明如何通过Spring集成RMI。
服务端发布服务
我们定义了服务接口,服务端实现该服务接口来完成其复杂的逻辑,客户端可以通过该接口调用服务端暴露的服务,如下所示:
[java] view plaincopy
package org.shirdrn.spring.remote.rmi;
public interface AccountService {
int queryBalance(String mobileNo);
String shoopingPayment(String mobileNo, byte protocol);
}
服务实现,示例如下所示:
[java] view plaincopy
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如下所示:
[xhtml] view plaincopy
<?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="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>
<bean id="accountService" class="org.shirdrn.spring.remote.rmi.MobileAccountServiceImpl" />
</beans>
上面配置,指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为MobileAccountService,客户端通过该服务名称就能够进行调用。
下面启动服务端,发布服务,如下所示:
[java] view plaincopy
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如下所示:
[xhtml] view plaincopy
<?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="mobileAccountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://192.168.1.103:8080/MobileAccountService" />
<property name="serviceInterface"
value="org.shirdrn.spring.remote.rmi.AccountService" />
</bean>
</beans>
配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用。调用示例如下所示:
[java] view plaincopy
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);
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);
LOG.info(result);
}
}
可见,实现远程访问变得非常容易。
下面通过一个例子,说明如何通过Spring集成RMI。
服务端发布服务
我们定义了服务接口,服务端实现该服务接口来完成其复杂的逻辑,客户端可以通过该接口调用服务端暴露的服务,如下所示:
[java] view plaincopy
package org.shirdrn.spring.remote.rmi;
public interface AccountService {
int queryBalance(String mobileNo);
String shoopingPayment(String mobileNo, byte protocol);
}
服务实现,示例如下所示:
[java] view plaincopy
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如下所示:
[xhtml] view plaincopy
<?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="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>
<bean id="accountService" class="org.shirdrn.spring.remote.rmi.MobileAccountServiceImpl" />
</beans>
上面配置,指定了暴露的服务的名称,通过serviceName属性注入到RmiServiceExporter中,服务名称为MobileAccountService,客户端通过该服务名称就能够进行调用。
下面启动服务端,发布服务,如下所示:
[java] view plaincopy
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如下所示:
[xhtml] view plaincopy
<?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="mobileAccountService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://192.168.1.103:8080/MobileAccountService" />
<property name="serviceInterface"
value="org.shirdrn.spring.remote.rmi.AccountService" />
</bean>
</beans>
配置中,将一个serviceUrl和serviceInterface注入给RmiProxyFactoryBean,即可进行远程方法调用。调用示例如下所示:
[java] view plaincopy
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);
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);
LOG.info(result);
}
}
可见,实现远程访问变得非常容易。
发表评论
-
jmap详解
2013-06-14 18:11 0jmap详解 1. jmap -heap pid ... -
JVM gc参数设置与分析
2013-06-14 18:00 0JVM gc参数设置与分析 ... -
jvm 调优
2013-05-29 14:46 0(转)JVM调优总结 一、相关概念 基本回收算法 ... -
Hibernate缓存何时使用和如何使用
2013-05-27 13:46 5881. 关于hibernate缓存的问 ... -
转 春天的故事-Spring Security3十五日研究
2013-05-17 10:06 0前言 南朝《述异 ... -
Spring中Bean的管理 – 使用BeanWrapper
2013-04-22 16:08 0Spring中Bean的管理 – 使用ApplicatonCo ... -
Spring 工作流程
2013-04-22 12:02 654请求的分发 请求首先到达DispatcherServlet,应 ... -
(转)Java对象池示例
2013-04-19 11:38 589Java对象池示例(转自http://www.cnblogs. ... -
JAVA泛型? T K V E等代表的意思
2013-04-18 10:54 0平时看java源代码的时候,如果碰到泛型的话,我想? T K ... -
Java Volatile transient
2013-04-18 10:24 644Java Volatile transient Java Vo ... -
spring mvc
2013-04-17 00:01 654Spring-mvc 的处理流程 请求的分发 请求首先到达 ... -
apache commons介绍
2013-04-17 00:01 860目前先转此文章,需要的时候再各个研究一下。 Apach ... -
消息队列ZeroMQ
2013-04-16 10:20 2518(转)ZeroMQ简介 通讯socket语言apijms编程 ...
相关推荐
spring rmi 2.5.x版本与3.0.x版本不兼容解决方案
Spring通过提供RMI集成,简化了RMI服务的创建和调用。以下是一些关键点: 1. **服务接口定义**:首先,你需要定义一个远程服务接口,这个接口将包含你希望在远程进程中执行的方法。 2. **服务实现**:接着,创建该...
1.2 Spring的RMI支持:Spring通过`org.springframework.remoting.rmi.RmiServiceExporter`和`RmiProxyFactoryBean`简化了RMI的使用。`RmiServiceExporter`用于发布服务,而`RmiProxyFactoryBean`则用于创建RMI服务的...
10. **spring-security-remoting-3.1.4.RELEASE.jar**:处理远程方法调用的安全性,如RMI、Hessian和 Burlap等远程调用协议的安全控制。 这些jar包共同构成了Spring Security 3.1.4的完整框架,为企业级应用提供了...
Spring Framework 是一种轻量级的解决方案,是构建你...明式事务管理,通过RMI或Web服务远程访问你的逻辑,以及用于持久存储数据的各种选项。 它提供了一个全功能的 MVC 框架,并使你能够将 AOP 透明地集成到你的软件中
Spring框架提供了对RMI的支持,使得在Spring应用中集成RMI变得更加方便。标题"spring-rmi"暗示我们将探讨Spring框架与RMI的整合。 Spring RMI的核心概念包括服务接口、远程实现和服务注册。首先,我们需要定义一个...
9. **spring-security-remoting**:支持远程调用的安全控制,例如RMI和Hessian。 10. **spring-security-oauth**:虽然不在3.1.2版本内,但Spring Security通常与OAuth集成,提供开放授权功能,允许第三方应用安全...
3. 集成文档:可能包含了如何将RMI与Spring框架整合的教程,指导开发者如何在Spring环境中使用RMI-IIOP实现服务的发布和消费。 4. 相关资料:可能包含了关于RMI、IIOP和CORBA的基础知识,以及相关的技术文章和研究,...
支持远程调用功能,例如EJB、JMS、RMI、Hessian、Burlap、HttpInvoker、JAX-RPC等。 10. **spring-support.jar** 提供了一些额外的功能支持,如缓存管理、定时任务、邮件服务等。 11. **spring-web.jar** ...
Framework supports declarative transaction management, remote access to your logic through RMI or web services, and various options for persisting your data. It offers a full-featured MVC framework, ...
13) spring-mock.jar需spring-core.jar,spring-beans.jar,spring-dao.jar,spring-context.jar,spring-jdbc.jarspring2.0和spring2.5及以上版本的jar包区别Spring 2.5的Jar打包 在Spring 2.5中, Spring Web MVC...
Spring Framework 5.0是Spring大家族中的一个核心框架版本,它支持了Java 8及以上版本中的众多特性,比如Lambda表达式和函数式编程。Spring Framework 5.0的中文文档PDF是学习和参考该框架的重要资源,其内容涵盖了...
此外,Spring还提供了对消息传递(如JMS)、任务调度(如Quartz)、远程调用(如RMI、Hessian)等的支持,构建了一个全面的企业级应用开发平台。 总之,Spring Framework 4.3.23.RELEASE是一个强大且灵活的框架,其...
spring-rmi-示例 项目是从 code.google.com/p/springrmiexample 导出的,我这边稍作修改 这个项目是如何在 Spring 的帮助下设置 RMI 服务器和客户端的示例。 该项目包含2个子项目: Spring RMI 示例服务器,即 Web...
- **远程调用**:支持JMS、RMI、JCA、EJB等远程调用技术。 - **任务调度和缓存**:提供了任务调度和缓存抽象。 - **集成技术**:支持电子邮件、任务调度、Caching等集成技术。 - **编程语言支持**:支持Kotlin、...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架,能够帮助开发者轻松地创建分布式应用程序。在这个"Spring RMI小例子"中,我们将深入理解Spring如何简化RMI的使用,以及...
标题“spring-rpc-case”指的是一个关于Spring RPC的案例研究,RPC(Remote Procedure Call)是远程过程调用,一种在分布式系统中实现客户端与服务器端通信的技术。Spring框架提供了Spring RPC支持,允许开发者构建...
**Spring RMI 深度解析** Spring框架作为Java企业级应用开发的首选,提供了丰富的功能,包括对远程方法调用(Remote Method Invocation,RMI)的支持。RMI是Java平台上的一个核心特性,允许在分布式环境中进行对象...
在IT行业中,远程方法调用(Remote Method Invocation,RMI)和Spring框架是两个非常重要的概念,它们在分布式系统开发中发挥着关键作用。RMI是Java平台提供的一种技术,用于在不同Java虚拟机(JVM)之间进行对象间...
- **依赖关系**:依赖于 `spring-core.jar`、`spring-beans.jar`、`spring-aop.jar`、`spring-dao.jar`、`spring-jdbc.jar`、`spring-orm.jar`、`spring-web.jar` 和 `spring-webmvc.jar`。 ##### 7. spring-jdbc....