- 浏览: 886225 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (687)
- java (127)
- servlet (38)
- struts (16)
- spring (22)
- hibernate (40)
- javascript (58)
- jquery (18)
- tomcat (51)
- 设计模式 (6)
- EJB (13)
- jsp (3)
- oracle (29)
- RUP (2)
- ajax (3)
- java内存管理 (4)
- java线程 (12)
- socket (13)
- path (5)
- XML (10)
- swing (2)
- UML (1)
- JBPM (2)
- 开发笔记 (45)
- Note参考 (15)
- JAXB (4)
- Quartz (2)
- 乱码 (2)
- CSS (2)
- Exception (4)
- Tools (7)
- sqlserver (3)
- DWR (7)
- Struts2 (47)
- WebService (2)
- 问题解决收藏 (7)
- JBOSS (7)
- cache (10)
- easyUI (19)
- jQuery Plugin (11)
- FreeMarker (6)
- Eclipse (2)
- Compass (2)
- JPA (1)
- WebLogic (1)
- powerdesigner (1)
- mybatis (1)
最新评论
-
bugyun:
受教了,谢谢
java 正则表达式 过滤html标签 -
xiongxingxing_123:
学习了,感谢了
java 正则表达式 过滤html标签 -
wanmeinange:
那如果无状态的。对同一个任务并发控制怎么做?比如继承Quart ...
quartz中参数misfireThreshold的详解 -
fanjieshanghai:
...
XPath 元素及属性查找 -
tianhandigeng:
还是没明白
quartz中参数misfireThreshold的详解
摘 要 由于Java具有跨平台、代码可移植性、安全高效等广泛而强大的功能,因而在开发网络分布式应用的时候,可以用它自身的机制实现分布式计算,一种基于Java的远程方法调用(RMI)为我们开发企业分布式应用提供了行之有效的解决方案。
关键词 Java RMI 企业分布式应用
概述
随着电力企业信息化建设的不断深入和发展,企业内部和企业与企业之间对信息、对数据的交换量大大增加,这些信息与数据越来越需要在不同的计算机网络间传送和交流。同时,由于各单位、各部门之间的现存的计算机网络硬件设备与操作系统千差万别,应用水平也参差不齐,因此,开发出跨平台、可移植、高效安全的网络分布式应用来服务于电力企业,就显得尤为重要。
在当今的编程术语里,分布式计算已经成为很常见的词,它将企业的业务数据和程序分布在网络的不同物理位置上,通过调动网络上多台计算机的处理能力,发挥远程调用数据的功能。
远程方法调用(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分布式应用
开发企业信息发布系统实例
在开发RMI进行分布式访问之前,需要将各项功能模块化,即把实际应用抽象成符合Java规范的类和接口模型,使这些类和接口之间互相协作,能实现各自独立的功能,最后,可以把它们组合成统一的网络分布式系统。
现在,我们就以开发公司信息发布系统为例,把主模块(主要的类文件)的名称暂定为InfoDistributeService(信息发布服务),为了保持应用开发的数据一致性和清晰度,接下来涉及的其它模块命名也将以这个模块命名为基准。
1、定义远程接口
Java RMI运行环境要求任何可以远程调用的方法必须放在远程接口中。
该远程接口用来扩展java.rmi.Remote接口,在Java API中,可以发现它没有任何方法,只是个标志性接口,这样,可以让Java运行环境(JRE)认识每个接口的特殊属性,以便能够远程访问。
因此,按照信息发布服务的命名(InfoDistributeService),首先须将InfoDistributeRemote定义为远程接口,同时仅放入一个供测试的方法 getRemoteInfo()来实现编码,将所有模块至于新建的enterprise.distribute包中,代码如下:
// -----------InfoDistributeRemote.java------------------- package enterprise. distribute; import java.rmi.Remote; import java.rmi.RemoteException; public interface InfoDistributeRemote extends Remote{ public String getRemoteInfo() throws RemoteException; } |
发表评论
文章已被作者锁定,不允许评论。
-
操作系统的目标和作用
2012-07-05 23:46 1313操作系统的目标 目前存在着多种类型的OS,不同类型的OS ... -
利用(ffmpeg)生成视频缩略图(java)
2012-07-01 01:11 0对于上传视频生成缩略图使用的是ffmpeg进行生成的。 自己在 ... -
对Java多线程技术中所有方法的详细解析
2012-06-06 11:32 770一、run()和start() 这两个 ... -
java乱码
2012-06-06 11:33 958自从接触Java和JSP以来, ... -
学习apache commons-io类库中的文件清除器
2011-07-06 23:26 1424学习apache commons-io 1.4类库中的File ... -
java 正则表达式 过滤html标签
2011-05-24 15:10 5345前段时间开发的时候要读取一篇文章的简介内容(也就是前200个字 ... -
转---Eclipse中web-inf和meta-inf文件夹的信息
2011-05-24 13:08 1124Eclipse中web-inf和meta-inf ... -
logback与Log4J的区别
2011-05-17 23:34 1415Logback和log4j是非常相似 ... -
性能优化
2011-04-14 16:10 1160(1)jdbc性能优化 jdbc程序的性能主要由两个因素决定 ... -
JAVA的Random类(转)
2011-04-12 00:21 901Random类中实现的随机算法是伪随机,也就是有规则的随机。在 ... -
非阻塞的Socket链接
2011-04-10 21:59 886import java.io.IOException; ... -
创建临时文件
2011-04-10 21:55 1082package net.java2000.io; ... -
面向对象设计的基本原则
2011-04-07 10:28 1136摘自:http://soft6.com/tech/6/6501 ... -
proxool
2011-04-02 15:01 846属性列表说明: fatal-sql- ... -
当前Java软件开发中几种认识误区
2011-04-01 10:12 868越来越多人开始使用Java ... -
Java中查看一个方法被调用的层次(Reflection、StackTrace)
2011-04-01 00:53 2022package test; public class Mai ... -
反序列化时恢复transient字段
2011-03-30 13:20 1204我们知道将字段设置为transient,可以避免该自动被序列化 ... -
用socket连接服务器直接发送接收邮件
2011-03-22 17:22 1294首页 新闻 论坛 问答 博客 招聘 更多 ▼ 专栏 &l ... -
利用JavaMail收/发Gmail邮件(SSL)
2011-03-22 17:21 2378Gmail目前已经启用了POP3和SMTP服务,具体情况请看 ... -
Java 反射与内省
2011-03-14 22:08 1066一、java反射机制 JAVA反 ...
相关推荐
用RMI开发基于Java分布式应用_杜风雷.doc
综上所述,基于Java RMI的分布式数据库系统在设计与应用中,充分利用了Java语言的特点和RMI通信机制的优势,为实现高效、可靠、可扩展的分布式数据库系统提供了坚实的基础。随着技术的不断进步,分布式数据库系统的...
"基于Java RMI的分布式数据库系统开发与应用.pdf" 本资源主要介绍基于Java RMI的分布式数据库系统的开发与应用。Java RMI(Remote Method Invocation)是一种远程方法调用机制,允许不同的系统和节点之间的数据交互...
RMI是基于Java语言编写的一组API,用于开发和维护分布式应用程序。RMI采用三层体系结构,基于C/S模式进行通信,并采用代理来进行客户端和远程对象之间的通信。RMI作为一种远程对象,可以生成客户端和服务器端代理,...
Java 分布式系统是构建大型、可扩展网络应用的关键技术,它允许分布在不同计算机上的对象协同工作,共同完成复杂的任务。...RMI适合于Java环境内的简单分布式应用,而CORBA更适合于需要高度互操作性的大型企业级应用。
### Java RMI 用于远程调用 进行...总之,《Java RMI》这本书不仅是一本技术指南,还是一部实用手册,涵盖了Java RMI开发的所有基础知识和高级技巧。无论是初学者还是经验丰富的开发者,都能从中获得宝贵的知识和经验。
开发使用RMI的分布式应用系统要求开发者熟悉这些概念和相关的API。 关键词RMI和Java表明了该技术紧密地与Java语言绑定,尽管RMI是Java的一部分,但它采用的通信协议和机制本质上是语言无关的。Stub则表示在RMI通信...
综上所述,Java分布式应用和SOA是构建现代企业级系统的重要组成部分。掌握这些技术和架构原理,对于开发高效、可靠且易于维护的分布式应用至关重要。随着云计算和微服务的兴起,Java开发者需要不断更新知识体系,以...
在这个基于Java的C/S(客户端/服务器)编程实验中,我们将探讨两种不同的实现方式:基于Socket的通信和基于Java Remote Method Invocation (RMI) 的通信。 首先,我们来看基于Socket的C/S编程。Socket是网络编程的...
Java分布式应用程序设计是一种构建大型、可扩展且高可用性系统的方法。在Java中,通过利用网络中的多台计算机,可以创建能够跨越多个节点共享资源、处理任务和存储数据的复杂应用。这种技术允许应用程序的不同部分在...
在现代企业级应用中,尤其是在云计算和微服务架构盛行的今天,掌握Java分布式应用的设计原则和技术至关重要。下面将详细介绍Java分布式应用程序设计的相关知识点。 1. **分布式系统基础**: - 分布式系统的概念:...
### Java分布式应用基础 在分布式系统中,Java是一种广泛使用的编程语言,它提供了丰富的库和框架来支持分布式计算。Java的跨平台特性使得它在分布式环境中特别受欢迎,因为可以确保代码在不同的硬件和操作系统上的...
本文主要探讨了一种基于Java语言的分布式应用服务模式,旨在利用Java的特性来构建高效、可靠的分布式系统。 1. **分布式系统与Java概述** 分布式系统是由多台网络互联的计算机组成,它们协同工作,共享资源,共同...
本文将对目前最具代表性的三种分布式应用开发技术进行详细介绍:CORBA、DCOM以及RMI。 #### 1. CORBA (Common Object Request Broker Architecture) **CORBA** 是由 OMG(Object Management Group)制定的一种...
它允许在不同的Java虚拟机(JVM)之间进行对象方法的调用,使得开发分布式应用程序变得更加简单。在本项目中,我们构建了一个基于RMI的分布式议程服务,旨在提供一个跨网络的会议管理平台,让不同客户端可以共享和...
为了实现分布式应用间的通信,J2EE平台支持多种中间件技术,如CORBA、RMI、消息传递等。 - **CORBA (Common Object Request Broker Architecture)**: 一种跨平台的分布式对象模型,允许不同操作系统上的对象进行...
本文将深入探讨基于Java的分布式计算的相关知识点。 1. **Java RMI(远程方法调用)** Java Remote Method Invocation (RMI) 是Java提供的一个核心特性,允许Java对象在不同的Java虚拟机之间进行通信。在分布式...
### 基于MVC和RMI的分布式应用解析 #### MVC设计模式的深度剖析 ...综上所述,基于MVC和RMI的分布式应用不仅能够提供强大的功能和性能,还能简化开发和维护过程,是构建现代企业级应用的理想选择。
基于CORBA和JAVA RMI的分布式系统应用研究的目的是为了开发出一种基于Web的分布式管理系统,能够满足业务到业务和消费者到业务的多步骤交易过程中的复杂需求。该系统需要能够处理静态客户、非类型安全的交互、Web...