`

Java之RMI设计模式基本原理与示例

    博客分类:
  • java
阅读更多
1. Name

RMI是Romote Method Invocation的缩写,就是远程方法调用。


2. Intent

具体的说,就是能够通过这种机制,实现在一个JVM上调用另一个JVM上的Java对象的方法。


3. Structure

(1)RMI Interface and Class


第一步:继承了Remote的interface

定义一个继承了Remote的interface,命名为TestRMIService。在其中有我们期望在Client端调用的方法testHello(),注意要抛出RemoteException。


第二步:继承了UnicastRemoteObject且实现了TestRMIService的class

定义一个继承了UnicastRemoteObject且实现了TestRMIService的class,命名为TestRMIServiceImpl。在其中实现testHello方法。


(2)RMI Server

第一步:

定义一个class,命名为TestServer,其中有main方法。在main方法中实例化TestRMIService一个远程对象,命名为testRMI。


第二步:

创建一个Registry,并向远程对象testRMI注册,注册名为“rmi://locahost:1234/testrmi”。


(3)RMI Client

第一步:

定义一个class,命名为TestClient,其中有main方法。查询注册


第二步:

查询注册名为“rmi://locahost:1234/testrmi”的TestRMIService远程对象,查询结果为testRMI。


第三步:

调用远程对象testRMI的方法testHello。


4. Sample Code

(1)TestRMIService

  
 package com.sinosuperman.rmi;  
      
    import java.rmi.Remote;  
    import java.rmi.RemoteException;  
      
    public interface TestRMIService extends Remote {  
        public String testHello() throws RemoteException;  
    }  


(2)TestRMIServiceImpl

   
package com.sinosuperman.rmi;  
      
    import java.rmi.RemoteException;  
    import java.rmi.server.UnicastRemoteObject;  
      
    public class TestRMIServiceImpl extends UnicastRemoteObject implements TestRMIService {  
      
        private static final long serialVersionUID = -9039976499370682232L;  
          
        public TestRMIServiceImpl() throws RemoteException {  
        }  
      
        @Override  
        public String testHello() throws RemoteException {  
            return "I'm RMI, Hello World!";  
        }  
    }  


(3)TestServer

   
package com.sinosuperman.server;  
      
    import java.net.MalformedURLException;  
    import java.rmi.AlreadyBoundException;  
    import java.rmi.Naming;  
    import java.rmi.RemoteException;  
    import java.rmi.registry.LocateRegistry;  
      
    import com.sinosuperman.rmi.TestRMIService;  
    import com.sinosuperman.rmi.TestRMIServiceImpl;  
      
    public class TestServer {  
          
        public static void main(String[] args) {  
              
            try {  
                /* Create a Remote object. */  
                TestRMIService testRMI = new TestRMIServiceImpl();  
                  
                /* Create a registry object with 1234 port. */  
                LocateRegistry.createRegistry(1234);  
                  
                /* Register the Remote object to RMI registry server, and name it as testrmi. */  
                Naming.bind("rmi://localhost:1234/testrmi", testRMI);  
                  
                System.out.println("注册远程对象成功");  
                  
            } catch (RemoteException e) {  
                System.out.println("远程对象创建异常");  
                e.printStackTrace();  
            } catch (MalformedURLException e) {  
                System.out.println("URL畸形异常");  
                e.printStackTrace();  
            } catch (AlreadyBoundException e) {  
                System.out.println("重复绑定异常");  
                e.printStackTrace();  
            }  
        }  
    }  


(4)TestClient

   
package com.sinosuperman.rmi;  
      
    import java.net.MalformedURLException;  
    import java.rmi.Naming;  
    import java.rmi.NotBoundException;  
    import java.rmi.RemoteException;  
      
    public class TestRMIClient {  
        public static void main(String[] args) {  
            try {  
                TestRMIService testService = (TestRMIService) Naming.lookup("rmi://localhost:1234/testrmi");  
                System.out.println(testService.testHello());  
            } catch (MalformedURLException e) {  
                e.printStackTrace();  
            } catch (RemoteException e) {  
                e.printStackTrace();  
            } catch (NotBoundException e) {  
                e.printStackTrace();  
            }  
        }  
    }  


5. Test

(1)运行TestServer

在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman包中,右击TestServer,选择Run As,选择Java Application。

这时界面上会显示:

“注册远程对象成功”


(2)运行TestClient

在Eclipse主界面的Package Explorer中你所创建的测试RMI的工程中的com.sinosuperman.rmi包中,右击TestClient,选择Run As,选择Java Application。

这时界面上会显示:

“I'm RMI, Hello World!”
分享到:
评论

相关推荐

    JAVA设计模式在JDK中的应用

    ### JAVA设计模式在JDK中的应用 #### 一、引言 在软件开发过程中,设计模式作为一套被广泛接受的解决方案,能够帮助开发者解决常见的设计问题。Java作为一门流行的编程语言,其标准库(JDK)中巧妙地融入了多种设计...

    分布式程序java 实验名称 基于Java RMI的C/S编程实验

    总的来说,这个实验旨在让学生掌握Java中分布式编程的基本概念和技术,包括Socket编程和RMI,同时也会接触到Swing GUI的开发。通过实践,学生将能够理解如何在分布式环境中设计和实现高效的客户端-服务器通信,以及...

    探寻Java源码中的设计模式

    在本篇中,我们将深入探讨几个常见的设计模式,并通过具体的Java源码示例来阐述它们的应用。 1. 工厂模式(Factory Pattern):工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在Java中,`java....

    RMI.rar_rmi

    1. "Readme.txt"通常包含关于压缩包的使用指南或者简要介绍,可能概述了RMI的基本原理、配置步骤,或者异步消息处理和回调机制的实践示例。 2. "www.pudn.com.txt"可能是从网站pudn.com下载的资源,可能包含了与RMI...

    Java云计算简单示例

    对于初学者来说,通过阅读和理解这些代码,可以学习到如何在Java中设计和实现基本的云计算功能,例如任务分发、结果收集、错误处理等。 总之,Java云计算简单示例是一个很好的学习资源,它可以帮助我们理解Java在...

    java分布式应用程序设计 pdf+源码

    本资源包含一本名为“JAVA分布式程序设计”的电子书以及相关的源码示例,旨在帮助开发者深入理解和实践Java在分布式环境中的应用。 《JAVA分布式程序设计》这本书可能涵盖了以下几个核心知识点: 1. **分布式系统...

    二十三种设计模式【PDF版】

    设计模式之 Template(模板方法) 实际上向你介绍了为什么要使用 Java 抽象类,该模式原理简单,使用很普遍. 设计模式之 Strategy(策略) 不同算法各自封装,用户端可随意挑选需要的算法. 设计模式之 Chain of ...

    java网络编程与分布式计算示例源码

    通过研究这些章节的源码,读者可以逐步掌握Java网络编程的基本技巧,了解分布式计算的原理,并能够运用到实际项目中去解决复杂问题。这些示例代码不仅提供了理论知识的验证,也为实际工作中的问题解决提供了参考。

    一个RMI的分布式应用的实例

    ### RMI分布式应用实例解析 #### 一、RMI简介及分布式应用原理 RMI (Remote Method Invocation) 是 Java 提供的一种远程...通过遵循上述的设计模式和实现细节,我们可以有效地利用 RMI 构建高效、可靠的分布式系统。

    RMI分布式应用程序

    在IT行业中,分布式应用程序是一种将任务分散到多个计算设备上以提高性能和可扩展性的软件设计模式。远程方法调用(Remote Method Invocation, RMI)是Java平台提供的一种技术,它使得运行在不同JVM(Java虚拟机)上...

    jdk中设计模式

    【设计模式概述】 设计模式是软件工程中经过实践...学习JDK中的设计模式可以让我们更好地理解Java库的设计思想,提升编程技巧,同时也能帮助我们更有效地运用这些模式到自己的项目中,编写出高质量、易于维护的代码。

    Java-J2EE Job Interview

    - RMI远程方法调用:RMI的工作原理、服务端与客户端的通信过程。 - EJB实体Bean:EJB的种类、实体Bean的生命周期管理。 6. **JMS消息传递**: - JMS消息模型:JMS消息类型、发布/订阅模式、点对点模式。 - JMS...

    EJB设计模式(中文版)

    《EJB设计模式(中文版)》这本书详细阐述了以上各种模式,并提供了丰富的示例和最佳实践,旨在帮助开发者更有效地利用EJB技术构建高质量的企业应用。通过阅读此书,读者可以深入理解EJB的工作原理,提升其在J2EE环境...

    AlumnosRMI:RMI数据库访问项目

    6. **设计模式**:可能使用到如工厂模式(用于创建远程对象)、单例模式(管理RMI注册表的访问)等设计模式。 7. **版本控制**:项目名包含"AlumnosRMI-master",这可能是从Git仓库克隆下来的,因此还可能涉及到...

    分布式JAVA应用基础与实践(林昊)完整版pad+源码

    在学习过程中,重点应放在理解分布式系统的原理和设计模式上,同时,通过实践项目来提升实战技能。这本书提供的源码就是一个很好的实践平台,可以动手实践,调试代码,模拟分布式环境下的各种场景,从而更好地掌握...

    基于Java的网格计算框架及其实现

    本文旨在探讨一种基于Java语言的网格计算框架,并深入分析其设计原理与实现方法。 #### 二、网格计算概述 网格计算(Grid Computing)是一种通过互联网将地理上分布的资源(如计算机、存储设备、数据等)连接起来,...

    java常用类库手册

    - **java.rmi**:提供了与远程方法调用相关的所有类。 - **java.net**:提供了用于实现网络通信应用的所有类。 - **java.security.\***:提供了设计网络安全方案需要的一些类。 - **java.sql**:提供了访问和处理...

    《Java架构师指南》 配套代码

    作为一本专为Java架构师打造的指导书籍,它涵盖了从基础到高级的多个方面,包括但不限于设计模式、并发编程、分布式系统、微服务、性能优化以及框架与工具的使用。 在Java开发中,设计模式是架构师必备的知识,如...

Global site tag (gtag.js) - Google Analytics