`

用RMI实现基于Java的分布式计算(1)

 
阅读更多

概述

随着电力企业信息化建设的不断深入和发展,企业内部和企业与企业之间对信息、对数据的交换量大大增加,这些信息与数据越来越需要在不同的计算机网络间传送和交流。同时,由于各单位、各部门之间的现存的计算机网络硬件设备与操作系统千差万别,应用水平也参差不齐,因此,开发出跨平台、可移植、高效安全的网络分布式应用来服务于电力企业,就显得尤为重要。

在当今的编程术语里,分布式计算已经成为很常见的词,它将企业的业务数据和程序分布在网络的不同物理位置上,通过调动网络上多台计算机的处理能力,发挥远程调用数据的功能。

远程方法调用(Remote Method Invocation ,RMI),可以在不同的Java虚拟机(JVM)之间实现对象与对象的通信。JVM可以位于相同或不同计算机上,在多个JVM中,一个JVM可以调用存储在其它JVM的对象的方法。

本文主要介绍RMI的特点,分析应用RMI进行企业分布式计算的原理,以及利用RMI实现基于Java的企业分布式应用的具体步骤。

远程方法调用(RMI)的特点

1、TCP编程的缺点

由于Java编程语言设计之初就是面向对象和支持网络的,因此,基于对象的RMI机制已经内置在Java分布式计算平台中。

我们经常会在网络开发中使用TCP/IP编程,这样,自然而然地就会涉及到Socket(套接字)编程。但是,使用Socket编程需要大量重复编码,在复杂分布式操作时显得非常麻烦,而且易于出错。因此,如何快速、高效、安全、可扩展地进行网络分布式计算,是开发者们一贯追求和倡导的主题。直到RMI的出现,这种繁杂、低效的开发情况才有很大改观。

2、RMI编程的特点

当我们利用对象序列化在网络上分配对象时,RMI提供了非Java平台无法匹敌的独特而强大的分布式计算模型,RMI主要有以下特点:

客户机可以向本地方法一样调用远程服务器上的方法;

可以根据接口指定客户机/服务器编程合约;

可以从服务器对象缺省二进制类文件,自动生成调动/反调动代码;

将Java编程模型扩展到机器边界(和Java虚拟机(JVM)边界之外),不需要任何特殊语法;

还可以和一个远程方法调用中的数据同时传输行为(代码)。

尽管RMI不是唯一的企业级远程对象访问方案,但它却是最容易实现的。

3、RMI与CORBA

作为分布式应用程序框架的规范,COBRA首当其冲,它是由对象管理组织(OMG)开发的。与CORBA不同的是,CORBA能够利用不同编程语言(例如C/C++、Basic等)开发实现分布式应用,而RMI是一种纯Java解决方案。在RMI中,程序的所有部分都由Java语言编写,这样,开发出来的程序完全符合Java规范,便于实现跨平台访问、扩展和移植。按照笔者所在西北电力建设集团公司的情况看,服务器操作系统主要有Linux和Windows2000 Server,分别存在于公司和部门当中,它们是不同的系统平台;同时,公司下属各个工程项目部又距离很远,近的几十公里,远则达到上千公里甚至位于国外,因此跨平台和远程访问这两大功能在开发企业应用系统时就必须考虑,而RMI恰恰能够用它的自身特点来满足编程需要。

RMI基本体系结构简介

RMI通过TCP/IP在内部使用Socket,象其名称暗示的那样,它能够帮助我们查找并执行远程对象的方法。RMI的目的是让位于不同JVM中的对象,在外观及行为上都像是本地的对象。

通常,我们把调用这种远程对象的JVM,称为客户机;而把包括这种远程对象的JVM,称为服务器。

尽管对一个远程对象的引用和获得对本地对象的引用有所不同,但我们可以把远程对象像本地对象一样使用。应用程序并不知道一个对象是远程的还是本地的。实际上,远程对象上被调用的方法与本地对象上调用的方法,具有相同的语法结构。

作为RMI的底层(会包含复杂的Socket操作),它会自动截获方法调用,找到远程对象,然后处理远程请求。笔者认为,RMI设计的重要之处,就在于不但在设计上实现了远程访问功能,而且实现了设计的透明性。

RMI的基本体系结构,概括起来说,由三个抽象层组成:

1、存根/框架层(Stubs/Skeletons Layer)

RMI为我们引入了两种特殊类型的对象,称为存根(Stub)和框架(Skeleton),它们组成了RMI的第一层。

在远程通信的时候,要利用TCP/IP协议,做很多底层数据的打包传输。运用Java分布式计算技术,我们先要把数据或者对象转换成字节流(byte stream),便于网络传输,这个过程叫汇集(marshaling);当收到远程传来的字节流后,我们要把流信息转换成对象或者数据,这个过程叫解读(unmarshaling),它与汇集刚好相反。

Stub和Skeleton层位于实际应用程序之下,建立在Proxy(代理)设计方案之上。Stub类的作用是远程服务器实现的代理的角色,Stub是客户方对象;Skeleton类用于帮助对象通过RMI链接与Stub通信,它从链路中读取方法调用的参数,向远程服务实现对象进行调用,接受返回值,然后再把返回值写回到Stub。

2、远程引用层(Remote Reference Layer)

远程引用层定义和支持着RMI连接的调用语义(semantics)。

RMI进行远程访问要用到JRMP(Java Remote Method Protocol,即Java远程方法协议),这一层提供专用于JRMP的RemoteRef对象,它位于java.rmi.server包内,代表着远程对象的一个句柄。RemoteRef使用远程引用来执行远程对象的一个远程方法调用。

3、传输层(Transport Layer)

传输层在JVM之间建立基于流的网络连接,并且负责设置和管理这些连接。这时候,RMI使用一种线级(wire-level)协议进行基于TCP/IP的连接,该协议就是Java远程方法协议(JRMP,即Java Remote Method Protocol)。

在JDK版本1.2开始,JRMP不再需要Skeleton,而是使用reflection来建立与远程服务的连接。为了生成Stub,我们须用rmic。

当前的RMI实现中,传输层建立在TCP/IP基础上,设计用于在客户和服务器之间建立一条连接(即使联网有障碍)。

开发的基本步骤

我们使用RMI编写Client/Server模式(客户/服务器)应用程序,包括6个基本步骤:

1) 定义远程接口

2) 实现远程接口

3) 准备远程调用的服务器对象

4) 生成残根Stub(客户代理)和框架Skeleton(服务器实体)

5) 用rmiregistry找到远程对象

6) 运行测试RMI分布式应用

分享到:
评论

相关推荐

    基于-JavaRMI的分布式计算.doc

    总结来说,Java RMI提供了实现分布式计算的有效工具,通过其强大的功能和简便的编程模型,使得开发人员能够轻松地构建跨越多台计算机的复杂系统,从而实现计算资源的共享和优化利用。在科学研究、工程计算、大数据...

    基于Java RMI的分布式数据库系统的应用与研究.pdf

    综上所述,基于Java RMI的分布式数据库系统在设计与应用中,充分利用了Java语言的特点和RMI通信机制的优势,为实现高效、可靠、可扩展的分布式数据库系统提供了坚实的基础。随着技术的不断进步,分布式数据库系统的...

    基于Java的分布式计算的研究.zip

    分布式数据存储系统如HBase、Cassandra和MongoDB,它们提供高可用性和水平扩展性,适合存储和处理海量数据,是Java分布式计算的重要基础设施。 9. **容错与故障恢复** 在分布式环境中,故障是常态。Java的分布式...

    基于Java的分布式计算构件库设计与实现.zip

    在Java分布式计算中,Zookeeper常用于服务发现和分布式锁的实现。 8. **Spring Cloud** Spring Cloud是一系列工具的集合,用于快速构建分布式系统,如服务发现、配置中心、负载均衡、熔断器等。它基于Spring Boot...

    基于Java的分布式计算构件库设计与实现.pdf

    总之,基于Java的分布式计算构件库的设计与实现是一个复杂的工程,它通过面向对象的方法,将分布式计算的底层细节抽象和封装,极大地简化了分布式应用的开发,使得开发者能够更加专注于业务逻辑的实现。这不仅提高了...

    java RMI实现代码

    Java RMI(Remote Method Invocation,远程方法调用)是Java平台提供的一种分布式计算技术,它允许在不同的Java虚拟机之间进行远程对象的调用。RMI使得开发者可以像调用本地对象一样调用网络上的对象,极大地简化了...

    Java网络编程与分布式计算

    文件名“Java网络编程与分布式计算”可能涵盖了这些领域的实战教程、案例研究或者项目实践,包括但不限于如何创建TCP/UDP服务器,实现HTTP客户端,使用RMI进行远程调用,以及如何在Java中集成Hadoop和Spark进行大...

    基于Java的分布式计算的研究.pdf

    分布式计算的研究和应用,尤其是基于Java平台的研究,对于提高计算效率、扩大计算能力以及优化计算资源分配具有重要意义。随着云计算和大数据技术的发展,分布式计算的应用场景更加广泛,它在科学研究、工程计算、...

    基于Java的网络分布式计算相关技术探究.pdf

    【基于Java的网络分布式计算相关技术探究】 分布式计算是一种计算模型,它将大规模计算任务分解为许多小任务,分配到网络中的多台计算机上并行处理,最后将各个计算结果汇总得出整体答案。这种计算方式因其高效处理...

    基于Java RMI的分布式数据库系统开发与应用.pdf

    "基于Java RMI的分布式数据库系统开发与应用.pdf" 本资源主要介绍基于Java RMI的分布式数据库系统的开发与应用。Java RMI(Remote Method Invocation)是一种远程方法调用机制,允许不同的系统和节点之间的数据交互...

    分布式Java RMI实现的学生成绩管理系统

    分布式Java RMI(Remote Method Invocation)技术是一种在Java平台中实现分布式计算的重要工具,它允许一个对象调用在不同 JVM(Java Virtual Machine)上的另一个对象的方法。在这个项目中,我们利用RMI构建了一个...

    基于Agent实现的分布式计算

    总的来说,基于Agent的分布式计算利用了Java的强类型和面向对象特性,以及Agent的自主性和智能性,构建出能够高效处理大规模计算任务的系统。在设计这样的系统时,我们需要关注Agent行为的定义、通信机制的实现、...

    Java网络编程与分布式计算.pdf

    在学习和使用Java网络编程与分布式计算的过程中,Sun公司作为Java技术的原始开发者,提供了大量的核心技术资料。这些资料对于理解Java网络编程和分布式计算的原理和最佳实践非常重要。扫描版资料虽然可能存在一些OCR...

    基于JAVA的分布式系统 RMI

    在Java中,RMI(Remote Method Invocation)和CORBA(Common Object Request Broker Architecture)是两种重要的分布式计算框架。 RMI是Java特有的远程方法调用机制,它使得开发者可以像调用本地对象的方法一样调用...

    JAVA-RMI.rar_rmi _分布式计算

    由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的...

    基于RMI分布式会议系统

    这个项目为学习和理解Java RMI提供了实践平台,有助于深入理解分布式系统的概念和Java中实现分布式计算的方法。通过分析和运行提供的代码,开发者可以更深入地了解如何在实际项目中应用RMI技术。

    西安电子科技大学计算机分布式计算五次上机代码及报告

    在这些实验中,学生们可能需要设计并实现基于UDP的通信机制,使用RMI创建分布式服务,利用消息队列(如ActiveMQ)进行进程间的通信,以及编写MapReduce程序来处理大数据问题。通过这些实践,他们将深刻理解分布式...

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

    这些示例源码是基于《java网络编程与分布式计算》这本书的实践教学内容,可以帮助读者深入理解相关概念并提升实际操作技能。下面将对每个章节的源码进行简要介绍,并探讨可能涵盖的关键知识点。 1. **ch11.zip** - ...

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

    在这个基于Java的C/S(客户端/服务器)编程实验中,我们将探讨两种不同的实现方式:基于Socket的通信和基于Java Remote Method Invocation (RMI) 的通信。 首先,我们来看基于Socket的C/S编程。Socket是网络编程的...

Global site tag (gtag.js) - Google Analytics