【注:前段文字部分来自网络,本文为学习摘要。】
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的开始阶段必须要了解和学习的重要内容,它能带领大家快速的进入Java的开发过程中来,给大家解决迷津....
RMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMIRMI教程 Java RMI
java Spring+RMI入门程序源代码
简约而不简单的描述了RMI技术,希望对大家有所帮助。
这是原创的最简单的Java RMI入门项目,内含二个Eclipse项目,一是服务器端,二是客户端。非常简单,只看其中的注释就能理解(当然先要知道什么是RMI了),只供入门用。 这是用Java 1.7编辑的,如果你用的版本低,则...
编程语言JavaRMI入门教程.pdf
本文档主要讲述的是JAVA_RMI使用快速入门;RMI目前使用Java远程消息交 换协议JRMP(Java Remote Messaging Protocol)进行通信。JRMP是专为Java的远程对象制定的协议。因此,Java RMI具有Java的“Write Once,Run ...
没有使用过RMI的学者来说这是一个很好的资源,很清晰很明确的讲述了RMI的工作原理和基本实例,很好的入门教材
java rmi入门级实例:分为三个javase项目,rmi-api(存放公共的接口和实体),rmi-server(rmi服务器端),rmi-client(rmi客户端),其中服务端和客户端都依赖rmi-api项目
通过这个例子可以大概了解RMI的很多机制
精通RMI 这是RMI的入门基础 特别对刚开始学RMI的同胞们很有帮助
学习java RMI 很好的例子,入门程序
rmi java 入门 网络编程
RMI,远程方法调用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java应用程序的方便途径。RMI是非常容易使用的,但是它非常的强大。
描述java rmi的实用方式,有实用简单的入门介绍,很容易理解!!!
Java语言编写的简单的分布式Demo,使用RMI远程调用实现,RMI是JavaEE中EJB调用的基础,入门的需要先搞清楚
这是本人刚学习RMI时整理出来的一份RMI入门级的资料,其中有几个简单的RMI应用的例子,公布出来供初学RMI的朋友参考学习,提高初学者对RMI学习的速度...
没有使用过RMI的学者可以参考本资源的实例,比较适用于没有RMI基础的学者,使用分布式编程
压缩文件内含有java原始的rmi原理分析及入门示例代码。