在Spring环境使用RMI时,可以省略以下几点:
1、接口类不需要继承Remote,方法不需要抛出RemoteException异常对象。
2、实现类不需要继承UnicastRemoteObject。
3、RMI服务自动注册。
下面通过具体的例子来说明其用法。
一、导出RMI服务
1、bean的配置
<beans>
<bean id="syncServiceImpl" class="com.cjm.service.rmi.SyncServiceImpl" />
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="3015"/>
</bean>
<bean id="syncServiceProxy" class="com.cjm.service.rmi.SyncServiceRMIExporter">
<property name="service">
<ref bean="syncServiceImpl" /> <!-- 服务对象 -->
</property>
<property name="serviceName">
<value>hawkeyeService</value> <!-- 服务名 -->
</property>
<property name="serviceInterface">
<value>com.cjm.service.rmi.SyncService</value> <!-- 服务接口类 -->
</property>
<property name="servicePort">
<value>1099</value>
</property>
<!-- 服务端口
<property name="registryPort">
<value>3015</value>
</property>-->
<property name="registry" ref="registry"/>
<property name="registryHost">
<value>${rmiServerIp}</value>
</property>
</bean>
</beans>
2、类源码
public class SyncServiceRMIExporter extends RmiServiceExporter{
public SyncServiceRMIExporter() {
//通过系统属性设置RMI的hostname
System.setProperty("java.rmi.server.hostname", "localhost");
}
}
//RMI服务接口类
public interface SyncService{
public boolean updateMonicaSiInfos(String oldInfo, String newInfo);
}
public class SyncServiceImpl implements SyncService {
@Override
public boolean updateMonicaSiInfos(String oldInfo, String newInfo) {
oldInfo = StringUtils.trimToEmpty(oldInfo);
newInfo = StringUtils.trimToEmpty(newInfo);
if (StringUtils.isEmpty(newInfo)) {
return false;
}
......
logger.warn("成功: oldInfo=" + oldInfo + ", newInfo=" + newInfo);
return true;
}
}
二、调用RMI服务
1、bean的配置
<beans>
<bean id="serviceImpl" class="RMIServiceImpl">
<property name="syncService" ref="hawkeyeService"/>
</bean>
<bean id="hawkeyeService" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl">
<value>rmi://localhost:1099/hawkeyeService</value> <!-- RMI服务地址 -->
</property>
<property name="serviceInterface">
<value>com.cjm.service.rmi.SyncService</value> <!-- RMI服务接口类 -->
</property>
<property name="lookupStubOnStartup" value="false"/>
<property name="refreshStubOnConnectFailure" value="true"/>
</bean>
</beans>
2、类源码
public class RMIServiceImpl {
private SyncService syncService;
public SyncService getSyncService() {
return syncService;
}
public void setSyncService(SyncService syncService) {
this.syncService = syncService;
}
public void doAction(String oldValue, String newValue)throws Exception{
boolean b = syncService.updateMonicaSiInfos(oldValue, newValue);
if(b){
System.out.println("RMI调用成功");
}else{
System.out.println("RMI调用失败");
}
}
}
通过Spring导出的RMI服务由于其接口类没有继承Romote接口,所以,在非Spring环境下调用RMI时,不是返回服务接口对象,而是返回RmiInvocationWrapper_Stub实例,然后通过反射方式来调用具体的服务方法,下面给出范例的源码供参考:
Context context = new InitialContext();
RmiInvocationWrapper_Stub stub = (RmiInvocationWrapper_Stub)context.lookup("rmi://localhost:3016/hawkeyeService");
Object[] arguments = new Object[]{"", "9999", "", ""};
Class[] parameterTypes = new Class[]{String.class, String.class, String.class, String.class};
RemoteInvocation invocation = new RemoteInvocation();
invocation.setMethodName("updateMonicaSiInfos");
invocation.setArguments(arguments);
invocation.setParameterTypes(parameterTypes);
RMIFeedback feedback = (RMIFeedback)stub.invoke(invocation);
分享到:
相关推荐
本压缩包提供了两个Java工程示例,帮助开发者了解如何在Spring环境中集成并使用RMI。 首先,让我们理解RMI的基本概念。RMI是Java提供的一种机制,使得一个Java对象能够调用运行在不同JVM上的另一个Java对象的方法。...
- **配置RMI服务**:在Spring的XML配置文件中,使用`<bean>`标签定义RMI服务,指定远程接口、实现类以及RMI服务的端口。 - **注册RMI服务**:使用`<bean>`标签的`lookup-by-name`属性,将服务注册到RMI注册表。 - **...
通过分析和学习这个源码,开发者可以了解如何在Spring环境中设置RMI服务,如何处理异常,以及如何在客户端使用代理进行调用。这对于提升分布式系统的开发能力,理解服务间的通信机制,以及掌握Spring和RMI的整合应用...
3. **Spring配置**:在Spring配置文件中,你需要声明一个`RmiServiceExporter`,它会暴露你的服务实现为RMI服务。你可以通过指定`serviceInterface`和`serviceImplementation`属性来关联接口和实现。 4. **客户端...
Spring RMI(Remote Method Invocation)是Spring框架对Java RMI技术的一种封装,使得在Spring环境中使用RMI变得更加简便。RMI是一种Java平台上的远程对象调用机制,它允许一个Java对象在不同的Java虚拟机之间调用另...
**Spring RMI 集成详解*...综上所述,Spring RMI集成使得在分布式环境中开发和管理服务变得更为便捷。通过正确配置服务器和客户端,可以实现高效的远程调用,同时利用Spring的管理能力,提高代码的可维护性和可测试性。
Spring Remote Method Invocation (RMI) 是Java平台上的一个远程对象调用框架,它允许你在分布式环境中调用对象的方法。在本示例中,我们将探讨如何使用Spring RMI创建一个小的应用程序,这通常涉及到服务器端(服务...
- **安全考虑**:在Web环境中,必须考虑到安全性问题,例如使用Spring Security来保护RMI接口,防止未经授权的访问。 - **负载均衡**:在大型分布式系统中,可能有多台服务器提供RMI服务。Spring可以配合负载均衡...
在Java世界中,远程方法调用(Remote Method Invocation...通过"SpringRMIClient"和"SpringRMIServer"示例,我们可以清晰地了解如何在Spring框架下设置和调用RMI服务。这在构建可扩展、高可用的企业级应用中非常有用。
本项目提供了一个入门级的源代码示例,帮助开发者理解如何在 Spring 环境下集成 RMI 技术。以下是关于这两个技术及其整合的详细知识点: **Spring 框架** 1. **Spring 概述**:Spring 是一个开源的 Java 应用开发...
在IT行业中,远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种用于在分布式环境中实现对象间通信的技术。Spring框架作为Java企业级应用的基石,它提供了与RMI集成的能力,使得开发者可以方便...
在Java项目中,Spring RMI(Remote Method Invocation)是一种整合远程方法调用功能与Spring框架的方式,它使得在分布式环境中管理对象和服务变得更加便捷。本文将深入探讨Spring RMI涉及的包,以及如何在项目中使用...
Java Spring RMI(Remote Method Invocation)是Java平台上用于构建分布式应用程序的一种技术,它允许Java对象在不同的JVM(Java Virtual Machine)之间进行交互。Spring框架提供了对RMI的支持,简化了RMI的配置和...
在Spring 3.1版本中,通常会使用Spring的RMI支持,这可能涉及到的包包括Spring的核心库、AOP库、beans库以及RMI相关的库。确保这些库都在项目的`lib`目录下,以避免运行时的依赖问题。整合Spring和RMI可以让你更专注...
Spring框架提供了对RMI的支持,使得开发者能够方便地在分布式环境中进行服务的调用。这个压缩包文件“Spring+RMI”很可能包含了实现这样一个远程调用示例的所有必要组成部分,包括配置文件、接口定义、服务器端实现...
Spring RMI(Remote Method Invocation)远程接口调用是Spring框架提供的一个特性,它允许你在分布式环境中调用对象的方法,使得应用程序能够跨越网络边界操作远程对象。这个技术在大型企业级应用中尤其有用,因为它...
通过分析和实践这个Spring RMI实例,开发者可以学习到如何在Spring环境中设置和使用RMI,这对于理解和掌握分布式系统的设计原则,尤其是Java环境下的分布式服务实现非常有帮助。同时,这也是一个很好的起点,可以...
Spring RMI(Remote Method Invocation)是Java平台上的远程方法调用技术,结合Spring框架的特性,使得在分布式系统中实现服务间的通信变得更加便捷。本文将深入探讨Spring RMI的实用知识,包括其基本原理、配置步骤...
总结来说,Spring RMI简单应用主要是利用Spring框架简化了RMI的配置和调用,使得在分布式环境中实现远程方法调用更加方便。通过定义远程接口、实现远程接口并在服务器端注册,以及在客户端创建代理类来调用远程方法...
Spring Remote Method Invocation (RMI) 是Spring框架提供的一种远程服务调用机制,它允许你在分布式环境中调用对象的方法,就像是在本地执行一样。这个技术基于Java的RMI系统,但通过Spring的抽象层,简化了配置和...