Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个
Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。
Java RMI不是什么新技术(在Java1.1的时代都有了),但却是是非常重要的底层技术。
大名鼎鼎的EJB都是建立在rmi基础之上的,现在还有一些开源的远程调用组件,其底层技术也是rmi。
在大力鼓吹Web Service、SOA的时代,是不是每个应用都应该选用笨拙的Web
Service组件来实现,通过对比测试后,RMI是最简单的,在一些小的应用中是最合适的。
下面通过一个简单的例子来说明RMI的原理和应用,下面这个例子是一个简单HelloWorld,但已涵盖RMI的核心应用与开发模式。
public
interface
IHello extends
Remote {
public
String helloWorld() throws
RemoteException;
public
String sayHelloToSomeBody(String someBodyName) throws
RemoteException;
}
public
class
HelloImpl extends
UnicastRemoteObject implements
IHello {
public
HelloImpl() throws
RemoteException
{
}
public
String helloWorld() throws
RemoteException {
return
"Hello World!"
;
}
public
String sayHelloToSomeBody(String someBodyName) throws
RemoteException {
return
"你好,"
+ someBodyName + "!"
;
}
}
public
class
HelloServer {
public
static
void
main(String args[]) {
try
{
//创建一个远程对象
IHello
rhello = new
HelloImpl();
//本地主机上的远程对象注册表Registry的实例,并指定端口为8888,这一步必不可少(Java默认端口是1099),必不可缺的一步,缺少注册表创建,则无法绑定对象到远程注册表上
LocateRegistry.createRegistry(8888);
//把远程对象注册到RMI注册服务器上,并命名为RHello
//绑定的URL标准格式为:rmi://host:port/name(其中协议名可以省略,下面两种写法都是正确的)
Naming.bind("rmi://localhost:8888/RHello",rhello);
// Naming.bind("//localhost:8888/RHello",rhello);
System.out.println(">>>>>INFO:远程IHello对象绑定成功!"
);
}
catch
(RemoteException e) {
System.out.println("创建远程对象发生异常!"
);
e.printStackTrace();
}
catch
(AlreadyBoundException e)
{
System.out.println("发生重复绑定对象异常!"
);
e.printStackTrace();
}
catch
(MalformedURLException e)
{
System.out.println("发生URL畸形异常!"
);
e.printStackTrace();
}
}
}
public
class
HelloClient {
public
static
void
main(String args[]){
try
{
//在RMI服务注册表中查找名称为RHello的对象,并调用其上的方法
IHello
rhello =(IHello) Naming.lookup("rmi://localhost:8888/RHello");
System.out.println(rhello.helloWorld());
System.out.println(rhello.sayHelloToSomeBody("熔岩"
));
}
catch
(NotBoundException e) {
e.printStackTrace();
}
catch
(MalformedURLException e)
{
e.printStackTrace();
}
catch
(RemoteException e) {
e.printStackTrace();
}
}
}
运行RMI服务端程序:
运行RMI客户端程序:
总结:
从上面的过程来看,RMI对服务器的IP地址和端口依赖很紧密,但是在开发的时候不知道将来的服务器IP和端口如何,但是客户端程序依赖这个IP和端口。
这也是RMI的局限性之一。这个问题有两种解决途径:一是通过DNS来解决,二是通过封装将IP暴露到程序代码之外。
RMI的局限性之二是RMI是Java语言的远程调用,两端的程序语言必须是Java实现,对于不同语言间的通讯可以考虑用Web
Service或者公用对象请求代理体系(CORBA)来实现。
分享到:
相关推荐
最近在学习代理模式,用到了java rmi远程调用,包含服务端和客户端,之前一直没有接触过,学习了java rmi远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程
在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象,极大地简化了分布式应用的开发。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:定义了可以在远程对象上执行的方法。这个接口...
Java远程调用(Remote Method Invocation,RMI)是Java平台中一种重要的分布式计算技术,它允许在不同网络环境中的Java对象之间进行透明的交互。在本文中,我们将深入探讨三种不同的RMI实现方法:原始方式、Spring...
RMI的主要优点是其透明性,即开发者可以像调用本地方法一样调用远程方法,而无需关心方法的实际执行位置。 ### 一、RMI的原理与工作流程 RMI的基本工作流程包括以下几个步骤: 1. **服务器端**: - 创建并实现一...
客户端通过RMI注册表获取远程对象的引用,然后就可以像调用本地对象一样调用远程方法了。 ```java public class RMIClient { public static void main(String[] args) { try { Registry registry = ...
DISPLAYPERFECTTIME.JAVA|:向rmiregistry查找PerfectTime对象,定义调用远程对象的方法。 PERFECTTIME.JAVA:向RMI注册服务,以便客户端查找,创建提供注册服务的本地对象,参数为端口号,也可以在Dos窗口下,执行...
实现java RMI 远程调用,包括 RMIServer RMIClient源码,测试用例。
Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...
4. **客户端(Client)**:客户端通过RMI机制获取远程对象的引用,然后调用远程方法。这通常涉及到反序列化过程,因为远程方法的调用结果需要通过网络传输。 5. **服务器端(Server)**:服务器端运行远程对象,...
远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过RMI,开发者可以在一台计算机上编写一个类,并在另...
通过RMI,开发者可以在网络环境中透明地调用远程对象的方法,使得分布式系统的开发变得简单。然而,实际应用中还需要考虑线程安全、异常处理、安全性、性能优化等复杂问题。在进行RMI开发时,确保理解并适当地处理...
6. **客户端调用**:在客户端,首先需要通过 `Naming.lookup()` 方法从注册表中查找远程对象的引用,然后就可以像调用本地对象一样调用远程对象的方法。 7. **安全性**:Java RMI支持安全性特性,包括SSL/TLS加密、...
3. **调用远程方法**:客户端使用获取的引用调用远程方法,RMI会将调用封装成一个消息,通过网络发送到服务器。 4. **执行远程方法**:服务器接收到消息后,RMI系统会在服务器端的JVM上激活远程对象,执行相应的...
4. RMI服务器(Server):启动并暴露远程对象,使得客户端能够通过注册表找到并调用远程方法。 二、RMI服务端实现步骤 1. 创建远程接口:首先定义一个接口,使用`@Remote`注解,并声明抛出`RemoteException`的远程...
Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...
在本例中,"java RMI客户端调用远程服务器系统命令"可能指的是一个实际的应用场景,其中服务器端提供了一个可以执行操作系统命令的远程接口,如`executeCommand`。客户端通过RMI调用这个方法,传递需要执行的命令...
- 调用远程方法:使用获取到的引用调用`readFile`方法,传入文件路径,获取返回的文件内容。 在实际应用中,需要注意以下几点: - **异常处理**:RMI调用可能会抛出`RemoteException`和其他网络相关的异常,需要...
RMI是一种Java提供的远程对象调用机制,它允许在不同的JVM之间透明地调用方法,仿佛它们都在同一个JVM中。RMI的关键组件包括: 1. 远程接口:定义了可以在远程服务器上执行的方法。 2. 远程实现:实现了远程接口的类...
5. **编写客户端代码**:在客户端,通过Registry获取远程对象的引用,然后就可以像调用本地对象一样调用远程方法。 6. **处理异常**:RMI可能会抛出多种异常,如RemoteException、NotBoundException等,需要在...
- `BankClient.java`:客户端代码,用于调用远程服务。 - `server.properties`:服务器配置文件,可能包含RMI注册表的端口号和绑定名称。 - `build.xml`或`pom.xml`:构建脚本,用于编译和打包项目。 了解RMI对于...