【注:前段文字部分来自网络,本文为学习摘要。】
RMI全称是Remote Method Invocation-远程方法调用,Java RMI在JDK1.1中实现的,其威力就体现在它强大的开发分布式网络应用的能力上,是纯Java的网络分布式应用系统的核心解决方案之一。其实它可以被看作是RPC的Java版本。但是传统RPC并不能很好地应用于分布式对象系统。而Java RMI 则支持存储于不同地址空间的程序级对象之间彼此进行通信,实现远程对象之间的无缝远程调用。
RMI目前使用Java远程消息交换协议JRMP(Java Remote Messaging Protocol)进行通信。由于JRMP是专为Java对象制定的,Java RMI具有Java的"Write Once,Run Anywhere"的优点,是分布式应用系统的百分之百纯Java解决方案。用Java RMI开发的应用系统可以部署在任何支持JRE的平台上。但由于JRMP是专为Java对象制定的,因此,RMI对于用非Java语言开发的应用系统的支持不足。不能与用非Java语言书写的对象进行通信。
RMI可利用标准Java本机方法接口JNI与现有的和原有的系统相连接。RMI还可利用标准JDBC包与现有的关系数据库连接。RMI/JNI和RMI/JDBC相结合,可帮助您利用RMI与目前使用非Java语言的现有服务器进行通信,而且在您需要时可扩展Java在这些服务器上的使用。RMI可帮助您在扩展使用时充分利用Java的强大功能。
一个正常工作的RMI系统由下面几个部分组成:
·远程服务的接口定义
·远程服务接口的具体实现
·桩(Stub)和框架(Skeleton)文件
·一个运行远程服务的服务器
·一个RMI命名服务,它允许客户端去发现这个远程服务
·类文件的提供者(一个HTTP或者FTP服务器)
·一个需要这个远程服务的客户端程序
本文以简单RMI使用和spring-remote为例演示java rmi使用。
一:RMI使用
1,定义业务接口(继承java.rmi.Remote接口),业务方法需要 抛出 java.rmi.RemoteException
public interface IHello extends Remote {
String echo(String msg)throws RemoteException;//需要声明异常
}
2,定义接口实现类
public class Hello extends UnicastRemoteObject implements IHello {
public Hello() throws RemoteException {//需要声明异常
super();
}
public String echo(String msg) throws RemoteException{
return "hello:"+msg;
}
}
3,编译接口和实现类
javac *.Hello
4,生成桩和框架文件 (Hello_Stub.class)
rmic *.Hello 生成 -->(Hello_Stub.class)
成功执行完上面的命令可以发现生成一个HelloImpl_stub.class文件,如果JDK是使用Java2SDK,那么还可以发现多出一个HelloImpl_Skel.class文件。如果服务端程序与客户端程序在同一台机器上并在同一目录中,则可以省略掉接口实现类生成的桩和框架文件,但这就失去了使用RMI的意义,而如果要在不同的JVM上运行时,客户端程序就必须得依靠服务端运程方法实现的桩和框架文件以及接口类。
5,编写RMI服务启动器,启动RMI服务绑定业务对象
IHello hello = new Hello();
LocateRegistry.createRegistry(1099);//启动注册服务 相当于 rmiregistry 命令。RMI默认接口1099
Naming.rebind("rmi://127.0.0.1:1099/hello", hello);//绑定远程对象到指定url
System.out.println("Started.....");
6,客户端调用RMI服务获取远程对象
IHello hello = (IHello)Naming.lookup("rmi://127.0.0.1:1099/hello");
System.out.println(hello.echo("hfsss"));
二:使用Spring-remote实现RMI功能
1,同上,定义业务接口及实现类
public interface SpringService {
String helloSpring(String msg);
}
实现类
public class SpringServiceImpl implements SpringService {
public String helloSpring(String msg) {
return "hellospring:"+msg;
}
}
2,定义服务端spring配置,spring启动后,ApplicatiolnContext会自动加载配置启动RMI服务
<!-- 注册rmi端口-->
<bean id="registry" class="org.springframework.remoting.rmi.RmiRegistryFactoryBean">
<property name="port" value="1199"/>
</bean>
<!-- 使用spring暴露rmi服务-->
<bean class="org.springframework.remoting.rmi.RmiServiceExporter">
<property name="serviceName" value="SpringTest"/>
<property name="service">
<ref bean="springServiceTestBean" />
</property>
<property name="serviceInterface" value="spring.rmi.service.SpringService"/>
<property name="registryPort" value="1199"/>
<property name="registryHost" value="localhost"/>
</bean>
注:需要注册rmi服务端口,不然启动后会报
Connection refused: connect 异常
3,客户端配置,首先获取接口class文件,配置spring文件如下。(也可以采用非spring方式使用)
<bean id="remoteObjBean" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
<property name="serviceUrl" value="rmi://localhost:1199/SpringTest"/>
<property name="serviceInterface" value="spring.rmi.service.SpringService"/>
</bean>
4,客户端调用
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:applicationContext-client.xml");
SpringService service = (SpringService)context.getBean("remoteObjBean");
String msg = service.helloSpring("hff");
System.out.println(msg);
分享到:
相关推荐
Java Remote Method Invocation(Java RMI)是Java编程语言中用于在网络间进行远程对象调用的技术。它是Java平台的标准部分,允许程序员在分布式环境中调用对象的方法,就像它们在同一台计算机上一样。Java RMI对于...
【JAVA RMI入门教程】 Java Remote Method Invocation (RMI) 是Java平台中用于构建分布式应用程序的一个关键技术。RMI使得不同Java虚拟机(JVM)之间的对象可以相互通信,从而共享资源和处理能力,实现分布式计算。其...
这个"java RMI入门例子"将带你深入理解RMI的工作原理和主要组件。 RMI的核心概念包括: 1. **远程接口**:这是定义远程方法的接口,通常继承自java.rmi.Remote。这些方法声明抛出java.rmi.RemoteException,表示...
本文档是关于Java远程方法调用(Java RMI)的入门教程,适用于JDK 1.1版本。文档首次发布于1997年2月10日,由Sun Microsystems公司版权所有。Sun Microsystems公司授予用户一个全球性的、非独家的、不可转让的、无...
通过这个 "java Spring+RMI 入门程序源代码",开发者可以学习如何在 Spring 框架中集成 RMI 技术,创建可扩展、高可用的分布式应用。项目中的 `rmiservice` 文件很可能包含了 RMI 服务端的实现,可以从中深入理解 ...
简约而不简单的描述了RMI技术,希望对大家有所帮助。
这是原创的最简单的Java RMI入门项目,内含二个Eclipse项目,一是服务器端,二是客户端。非常简单,只看其中的注释就能理解(当然先要知道什么是RMI了),只供入门用。 这是用Java 1.7编辑的,如果你用的版本低,则...
java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许Java对象在不同的Java虚拟机之间进行通信,仿佛这些对象都在同一台机器上。RMI是构建分布式应用程序的关键组件,...
- **Getting Started Using Java RMI.mht**:一份RMI的入门指南,可能包含如何设置环境、编写远程接口和实现、注册以及调用远程对象的步骤。 - **javathread.ppt**:虽然不直接关联RMI或HTTP,但线程是Java编程中的...
【JAVA-RMI使用快速入门】 Java RMI(Remote Method Invocation,远程方法调用)是Java平台中用于构建分布式应用程序的一种核心技术。它允许Java对象在不同的Java虚拟机(JVM)之间进行交互,实现了"Write Once, ...
提供的`JAVA_RMI_实例.doc`文档可能包含了一个简单的RMI应用实例,通常包括以下部分: 1. **创建远程接口:**定义一个名为`MyRemoteInterface`的接口,声明如`sayHello()`等远程方法。 2. **实现远程接口:**创建一...
RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。
这个“RMI入门好例子”旨在帮助初学者理解并实践RMI的基本原理和操作流程。 首先,RMI的核心思想是通过接口实现远程对象的透明调用。在示例中,`rmidemo`可能包含了服务器端的代码,它会定义一个接口,例如`...
通过以上步骤,我们成功地实现了一个简单的基于RMI的文件下载系统。整个过程中,远程接口的定义、远程对象的实现以及客户端和服务端的交互都是RMI技术的核心部分。掌握了这些基本原理和技术细节,就可以进一步开发更...
### Java RMI (Remote Method Invocation) 分布式服务器通信详解 #### 一、Java RMI 概述 Java RMI (Remote Method ...对于初学者来说,这是一个很好的起点,可以帮助他们快速入门并掌握RMI的核心概念和技术细节。
RMI(Remote Method Invocation)是Java提供的一种用于构建分布式应用程序的机制,它允许Java对象在不同的网络环境中相互调用方法,实现了远程对象间的无缝通信。RMI是在JDK1.1版本中引入的,它是纯Java实现的,遵循...
这篇博客“RMI入门小结”主要探讨了RMI的基础概念、实现步骤以及常见问题。 1. RMI的基本原理: RMI的核心是通过接口定义服务,服务端实现接口,并将实现类注册到RMI注册表中。客户端通过引用远程接口,即可调用...