`

初识Java RMI远程调用

rmi 
阅读更多
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远程调用,一方面可以了解代理模式,一方面熟悉java低层的远程

    java rmi远程方法调用 客户端

    在RMI架构中,客户端能够像调用本地对象一样调用远程服务器上的对象,极大地简化了分布式应用的开发。 RMI的核心概念包括: 1. **远程接口(Remote Interface)**:定义了可以在远程对象上执行的方法。这个接口...

    三种方式实现java远程调用(rmi),绝对可用

    Java远程调用(Remote Method Invocation,RMI)是Java平台中一种重要的分布式计算技术,它允许在不同网络环境中的Java对象之间进行透明的交互。在本文中,我们将深入探讨三种不同的RMI实现方法:原始方式、Spring...

    JAVA RMI远程调用方法代码

    RMI的主要优点是其透明性,即开发者可以像调用本地方法一样调用远程方法,而无需关心方法的实际执行位置。 ### 一、RMI的原理与工作流程 RMI的基本工作流程包括以下几个步骤: 1. **服务器端**: - 创建并实现一...

    Java RMI远程方法调用详解-例子代码

    客户端通过RMI注册表获取远程对象的引用,然后就可以像调用本地对象一样调用远程方法了。 ```java public class RMIClient { public static void main(String[] args) { try { Registry registry = ...

    Java RMI 远程调用实例.rar

     DISPLAYPERFECTTIME.JAVA|:向rmiregistry查找PerfectTime对象,定义调用远程对象的方法。  PERFECTTIME.JAVA:向RMI注册服务,以便客户端查找,创建提供注册服务的本地对象,参数为端口号,也可以在Dos窗口下,执行...

    java 实现RMI远程调用

    实现java RMI 远程调用,包括 RMIServer RMIClient源码,测试用例。

    Java RMI 远程方法调用

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行方法调用,仿佛这些方法是在本地对象上执行一样。这个技术极大地简化了构建分布式应用的...

    Java RMI(远程方法调用)Demo

    4. **客户端(Client)**:客户端通过RMI机制获取远程对象的引用,然后调用远程方法。这通常涉及到反序列化过程,因为远程方法的调用结果需要通过网络传输。 5. **服务器端(Server)**:服务器端运行远程对象,...

    RMI远程调用代码及使用方法

    远程方法调用(Remote Method Invocation,简称RMI)是Java平台提供的一种分布式计算技术,它允许开发人员在不同的Java虚拟机(JVM)之间进行对象的远程调用。通过RMI,开发者可以在一台计算机上编写一个类,并在另...

    通过Java RMI实现远程调用的一个简单例子

    通过RMI,开发者可以在网络环境中透明地调用远程对象的方法,使得分布式系统的开发变得简单。然而,实际应用中还需要考虑线程安全、异常处理、安全性、性能优化等复杂问题。在进行RMI开发时,确保理解并适当地处理...

    Java RMI远程方法调用

    6. **客户端调用**:在客户端,首先需要通过 `Naming.lookup()` 方法从注册表中查找远程对象的引用,然后就可以像调用本地对象一样调用远程对象的方法。 7. **安全性**:Java RMI支持安全性特性,包括SSL/TLS加密、...

    RMI远程方法调用RMI远程方法调用

    总结来说,RMI提供了一种透明的方式来调用远程对象的方法,使得开发者可以创建分布式的Java应用程序而无需深入理解网络编程的复杂性。通过RMI,可以轻松地将服务部署在多台机器上,提升系统的可扩展性和可用性。

    RMI远程调用

    3. **调用远程方法**:客户端使用获取的引用调用远程方法,RMI会将调用封装成一个消息,通过网络发送到服务器。 4. **执行远程方法**:服务器接收到消息后,RMI系统会在服务器端的JVM上激活远程对象,执行相应的...

    java rmi 远程方法调用 服务端

    4. RMI服务器(Server):启动并暴露远程对象,使得客户端能够通过注册表找到并调用远程方法。 二、RMI服务端实现步骤 1. 创建远程接口:首先定义一个接口,使用`@Remote`注解,并声明抛出`RemoteException`的远程...

    java 远程方法调用(java rmi)

    Java 远程方法调用(Java RMI,Remote Method Invocation)是Java平台提供的一种用于构建分布式应用程序的技术。它允许一个对象在某个Java虚拟机(JVM)上执行的方法调用另一个在不同JVM上的对象的方法,仿佛它们是...

    java RMI客户端调用远程服务器系统命令

    在本例中,"java RMI客户端调用远程服务器系统命令"可能指的是一个实际的应用场景,其中服务器端提供了一个可以执行操作系统命令的远程接口,如`executeCommand`。客户端通过RMI调用这个方法,传递需要执行的命令...

    rmi远程调用读取文件

    - 调用远程方法:使用获取到的引用调用`readFile`方法,传入文件路径,获取返回的文件内容。 在实际应用中,需要注意以下几点: - **异常处理**:RMI调用可能会抛出`RemoteException`和其他网络相关的异常,需要...

    动态代理与RMI远程调用

    RMI是一种Java提供的远程对象调用机制,它允许在不同的JVM之间透明地调用方法,仿佛它们都在同一个JVM中。RMI的关键组件包括: 1. 远程接口:定义了可以在远程服务器上执行的方法。 2. 远程实现:实现了远程接口的类...

    RMI实现的远程调用

    5. **编写客户端代码**:在客户端,通过Registry获取远程对象的引用,然后就可以像调用本地对象一样调用远程方法。 6. **处理异常**:RMI可能会抛出多种异常,如RemoteException、NotBoundException等,需要在...

Global site tag (gtag.js) - Google Analytics