国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
用RMI開發(fā)基于Java的企業(yè)分布式應(yīng)用 - GAULEN JAVA信息網(wǎng) - info....
概述
  隨著電力企業(yè)信息化建設(shè)的不斷深入和發(fā)展,企業(yè)內(nèi)部和企業(yè)與企業(yè)之間對信息、對數(shù)據(jù)的交換量大大增加,這些信息與數(shù)據(jù)越來越需要在不同的計算機(jī)網(wǎng)絡(luò)間傳送和交流。同時,由于各單位、各部門之間的現(xiàn)存的計算機(jī)網(wǎng)絡(luò)硬件設(shè)備與操作系統(tǒng)千差萬別,應(yīng)用水平也參差不齊,因此,開發(fā)出跨平臺、可移植、高效安全的網(wǎng)絡(luò)分布式應(yīng)用來服務(wù)于電力企業(yè),就顯得尤為重要。
  
  在當(dāng)今的編程術(shù)語里,分布式計算已經(jīng)成為很常見的詞,它將企業(yè)的業(yè)務(wù)數(shù)據(jù)和程序分布在網(wǎng)絡(luò)的不同物理位置上,通過調(diào)動網(wǎng)絡(luò)上多臺計算機(jī)的處理能力,發(fā)揮遠(yuǎn)程調(diào)用數(shù)據(jù)的功能。
  
  遠(yuǎn)程方法調(diào)用(Remote Method Invocation ,RMI),可以在不同的Java虛擬機(jī)(JVM)之間實現(xiàn)對象與對象的通信。JVM可以位于相同或不同計算機(jī)上,在多個JVM中,一個JVM可以調(diào)用存儲在其它JVM的對象的方法。
  
  本文主要介紹RMI的特點,分析應(yīng)用RMI進(jìn)行企業(yè)分布式計算的原理,以及利用RMI實現(xiàn)基于Java的企業(yè)分布式應(yīng)用的具體步驟。
  
  遠(yuǎn)程方法調(diào)用(RMI)的特點
  1、TCP編程的缺點
  
  由于Java編程語言設(shè)計之初就是面向?qū)ο蠛椭С志W(wǎng)絡(luò)的,因此,基于對象的RMI機(jī)制已經(jīng)內(nèi)置在Java平臺中。
  
  我們經(jīng)常會在網(wǎng)絡(luò)開發(fā)中使用TCP/IP編程,這樣,自然而然地就會涉及到Socket(套接字)編程。但是,使用Socket編程需要大量重復(fù)編碼,在復(fù)雜分布式操作時顯得非常麻煩,而且易于出錯。因此,如何快速、高效、安全、可擴(kuò)展地進(jìn)行網(wǎng)絡(luò)分布式計算,是開發(fā)者們一貫追求和倡導(dǎo)的主題。直到RMI的出現(xiàn),這種繁雜、低效的開發(fā)情況才有很大改觀。
  
  2、RMI編程的特點
  
  當(dāng)我們利用對象序列化在網(wǎng)絡(luò)上分配對象時,RMI提供了非Java平臺無法匹敵的獨特而強(qiáng)大的分布式計算模型,RMI主要有以下特點:
  
  客戶機(jī)可以向本地方法一樣調(diào)用遠(yuǎn)程服務(wù)器上的方法;
  
  可以根據(jù)接口指定客戶機(jī)/服務(wù)器編程合約;
  
  可以從服務(wù)器對象缺省二進(jìn)制類文件,自動生成調(diào)動/反調(diào)動代碼;
  
  將Java編程模型擴(kuò)展到機(jī)器邊界(和Java虛擬機(jī)(JVM)邊界之外),不需要任何特殊語法;
  
  還可以和一個遠(yuǎn)程方法調(diào)用中的數(shù)據(jù)同時傳輸行為(代碼)。
  
  盡管RMI不是唯一的企業(yè)級遠(yuǎn)程對象訪問方案,但它卻是最容易實現(xiàn)的。
  
  3、RMI與CORBA
  
  作為分布式應(yīng)用程序框架的規(guī)范,COBRA首當(dāng)其沖,它是由對象管理組織(OMG)開發(fā)的。與CORBA不同的是,CORBA能夠利用不同編程語言(例如C/C++、Basic等)開發(fā)實現(xiàn)分布式應(yīng)用,而RMI是一種純Java解決方案。在RMI中,程序的所有部分都由Java語言編寫,這樣,開發(fā)出來的程序完全符合Java規(guī)范,便于實現(xiàn)跨平臺訪問、擴(kuò)展和移植。按照筆者所在西北電力建設(shè)集團(tuán)公司的情況看,服務(wù)器操作系統(tǒng)主要有Linux和Windows2000 Server,分別存在于公司和部門當(dāng)中,它們是不同的系統(tǒng)平臺;同時,公司下屬各個工程項目部又距離很遠(yuǎn),近的幾十公里,遠(yuǎn)則達(dá)到上千公里甚至位于國外,因此跨平臺和遠(yuǎn)程訪問這兩大功能在開發(fā)企業(yè)應(yīng)用系統(tǒng)時就必須考慮,而RMI恰恰能夠用它的自身特點來滿足編程需要。
  
  RMI基本體系結(jié)構(gòu)簡介
  RMI通過TCP/IP在內(nèi)部使用Socket,象其名稱暗示的那樣,它能夠幫助我們查找并執(zhí)行遠(yuǎn)程對象的方法。RMI的目的是讓位于不同JVM中的對象,在外觀及行為上都像是本地的對象。
  
  通常,我們把調(diào)用這種遠(yuǎn)程對象的JVM,稱為客戶機(jī);而把包括這種遠(yuǎn)程對象的JVM,稱為服務(wù)器。
  
  盡管對一個遠(yuǎn)程對象的引用和獲得對本地對象的引用有所不同,但我們可以把遠(yuǎn)程對象像本地對象一樣使用。應(yīng)用程序并不知道一個對象是遠(yuǎn)程的還是本地的。實際上,遠(yuǎn)程對象上被調(diào)用的方法與本地對象上調(diào)用的方法,具有相同的語法結(jié)構(gòu)。
  
  作為RMI的底層(會包含復(fù)雜的Socket操作),它會自動截獲方法調(diào)用,找到遠(yuǎn)程對象,然后處理遠(yuǎn)程請求。筆者認(rèn)為,RMI設(shè)計的重要之處,就在于不但在設(shè)計上實現(xiàn)了遠(yuǎn)程訪問功能,而且實現(xiàn)了設(shè)計的透明性。
  
  RMI的基本體系結(jié)構(gòu),概括起來說,由三個抽象層組成:
  
  1、存根/框架層(Stubs/Skeletons Layer)
  
  RMI為我們引入了兩種特殊類型的對象,稱為存根(Stub)和框架(Skeleton),它們組成了RMI的第一層。
  
  在遠(yuǎn)程通信的時候,要利用TCP/IP協(xié)議,做很多底層數(shù)據(jù)的打包傳輸。運用Java技術(shù),我們先要把數(shù)據(jù)或者對象轉(zhuǎn)換成字節(jié)流(byte stream),便于網(wǎng)絡(luò)傳輸,這個過程叫匯集(marshaling);當(dāng)收到遠(yuǎn)程傳來的字節(jié)流后,我們要把流信息轉(zhuǎn)換成對象或者數(shù)據(jù),這個過程叫解讀(unmarshaling),它與匯集剛好相反。
  
  Stub和Skeleton層位于實際應(yīng)用程序之下,建立在Proxy(代理)設(shè)計方案之上。Stub類的作用是遠(yuǎn)程服務(wù)器實現(xiàn)的代理的角色,Stub是客戶方對象;Skeleton類用于幫助對象通過RMI鏈接與Stub通信,它從鏈路中讀取方法調(diào)用的參數(shù),向遠(yuǎn)程服務(wù)實現(xiàn)對象進(jìn)行調(diào)用,接受返回值,然后再把返回值寫回到Stub。
  
  2、遠(yuǎn)程引用層(Remote Reference Layer)
  
  遠(yuǎn)程引用層定義和支持著RMI連接的調(diào)用語義(semantics)。
  
  RMI進(jìn)行遠(yuǎn)程訪問要用到JRMP(Java Remote Method Protocol,即Java遠(yuǎn)程方法協(xié)議),這一層提供專用于JRMP的RemoteRef對象,它位于java.rmi.server包內(nèi),代表著遠(yuǎn)程對象的一個句柄。RemoteRef使用遠(yuǎn)程引用來執(zhí)行遠(yuǎn)程對象的一個遠(yuǎn)程方法調(diào)用。
  
  3、傳輸層(Transport Layer)
  
  傳輸層在JVM之間建立基于流的網(wǎng)絡(luò)連接,并且負(fù)責(zé)設(shè)置和管理這些連接。這時候,RMI使用一種線級(wire-level)協(xié)議進(jìn)行基于TCP/IP的連接,該協(xié)議就是Java遠(yuǎn)程方法協(xié)議(JRMP,即Java Remote Method Protocol)。
  
  在JDK版本1.2開始,JRMP不再需要Skeleton,而是使用reflection來建立與遠(yuǎn)程服務(wù)的連接。為了生成Stub,我們須用rmic。
  當(dāng)前的RMI實現(xiàn)中,傳輸層建立在TCP/IP基礎(chǔ)上,設(shè)計用于在客戶和服務(wù)器之間建立一條連接(即使聯(lián)網(wǎng)有障礙)。

開發(fā)的基本步驟
  我們使用RMI編寫Client/Server模式(客戶/服務(wù)器)應(yīng)用程序,包括6個基本步驟:
  
  1) 定義遠(yuǎn)程接口
  
  2) 實現(xiàn)遠(yuǎn)程接口
  
  3) 準(zhǔn)備遠(yuǎn)程調(diào)用的服務(wù)器對象
  
  4) 生成殘根Stub(客戶代理)和框架Skeleton(服務(wù)器實體)
  
  5) 用rmiregistry找到遠(yuǎn)程對象
  
  6) 運行測試RMI分布式應(yīng)用
  
  開發(fā)企業(yè)信息發(fā)布系統(tǒng)實例
  
  在開發(fā)RMI進(jìn)行分布式訪問之前,需要將各項功能模塊化,即把實際應(yīng)用抽象成符合Java規(guī)范的類和接口模型,使這些類和接口之間互相協(xié)作,能實現(xiàn)各自獨立的功能,最后,可以把它們組合成統(tǒng)一的網(wǎng)絡(luò)分布式系統(tǒng)。
  
  現(xiàn)在,我們就以開發(fā)公司信息發(fā)布系統(tǒng)為例,把主模塊(主要的類文件)的名稱暫定為InfoDistributeService(信息發(fā)布服務(wù)),為了保持應(yīng)用開發(fā)的數(shù)據(jù)一致性和清晰度,接下來涉及的其它模塊命名也將以這個模塊命名為基準(zhǔn)。
  
  1、定義遠(yuǎn)程接口
  
  Java RMI運行環(huán)境要求任何可以遠(yuǎn)程調(diào)用的方法必須放在遠(yuǎn)程接口中。
  
  該遠(yuǎn)程接口用來擴(kuò)展java.rmi.Remote接口,在Java API中,可以發(fā)現(xiàn)它沒有任何方法,只是個標(biāo)志性接口,這樣,可以讓Java運行環(huán)境(JRE)認(rèn)識每個接口的特殊屬性,以便能夠遠(yuǎn)程訪問。
  
  因此,按照信息發(fā)布服務(wù)的命名(InfoDistributeService),首先須將InfoDistributeRemote定義為遠(yuǎn)程接口,同時僅放入一個供測試的方法 getRemoteInfo()來實現(xiàn)編碼,將所有模塊至于新建的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;
  }
  
  2、實現(xiàn)遠(yuǎn)程接口
  
  這是一個實現(xiàn)遠(yuǎn)程對象的類。如果實現(xiàn)了遠(yuǎn)程接口,就能夠覆蓋(override)該對象中的所有方法,因此,遠(yuǎn)程對象的實現(xiàn)類將真正包含我們希望導(dǎo)出的方法的代碼。
  
  在遠(yuǎn)程信息發(fā)布系統(tǒng)中,我們至少實現(xiàn)一個遠(yuǎn)程接口的對象,它就是遠(yuǎn)程可訪問的對象。這里,InfoDistributeService類可以為我們生成遠(yuǎn)程可訪問對象的實例:
  
  // -----------InfoDistributeService.java------------------
  package enterprise. distribute;
  import java.rmi.RemoteException;
  import java.rmi.server.UnicastRemoteObject;
  public class InfoDistributeService
  extends UnicastRemoteObject implements InfoDistributeRemote{
  public InfoDistributeService() throws RemoteException{
  super();
  }
  // The return value of the method only for testing...
  public String getRemoteInfo(){
  return "Hello! I am a remote object.";
  }
  }
  
  InfoDistributeService類實現(xiàn)遠(yuǎn)程接口InfoDistributeRemote,并繼承java.rmi.server.UnicastRemoteObject。由于符
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Java RMI 入門
Java分布式處理技術(shù)(RMI,JDNI)
Java RMI與RPC,JMS的比較
第 8 章
rmi(Remote Method Invocation ) 學(xué)習(xí) - what's j...
漫談EJB(1)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服