遠(yuǎn)程方法調(diào)用_第1頁(yè)
遠(yuǎn)程方法調(diào)用_第2頁(yè)
遠(yuǎn)程方法調(diào)用_第3頁(yè)
遠(yuǎn)程方法調(diào)用_第4頁(yè)
遠(yuǎn)程方法調(diào)用_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼1第18章遠(yuǎn)程方法調(diào)用2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼2學(xué)習(xí)目標(biāo)

了解Java遠(yuǎn)程方法調(diào)用編程2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼3兩大類(lèi)網(wǎng)絡(luò)應(yīng)用程序網(wǎng)絡(luò)通信-----在程序之間移動(dòng)文件和數(shù)據(jù)分布式應(yīng)用---就好象在本地一樣DCOMCORBAJavaRMI-----Java分布式技術(shù)的基礎(chǔ)好處負(fù)載均衡減少數(shù)據(jù)通信量2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼4遠(yuǎn)程方法調(diào)用定義Remotemethodinvocation(RMI)istheactionofinvokingamethodofaremoteinterfaceonaremoteobject.Mostimportantly,amethodinvocationonaremoteobjecthasthesamesyntaxasamethodinvocationonalocalobject.2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼5與遠(yuǎn)程過(guò)程調(diào)用(RPC)的區(qū)別RPC可以用于一個(gè)進(jìn)程調(diào)用另一個(gè)進(jìn)程(很可能在另一個(gè)遠(yuǎn)程主機(jī)上)中的過(guò)程,從而提供了過(guò)程的分布能力。Java的RMI則在RPC的基礎(chǔ)上向前又邁進(jìn)了一步,即提供分布式對(duì)象間的通訊,允許我們獲得在遠(yuǎn)程進(jìn)程中的對(duì)象(稱為遠(yuǎn)程對(duì)象)的引用,進(jìn)而通過(guò)引用調(diào)用遠(yuǎn)程對(duì)象的方法,就好像該對(duì)象是與你的客戶端代碼同樣運(yùn)行在本地進(jìn)程中一樣。RMI使用了術(shù)語(yǔ)"方法"(Method)強(qiáng)調(diào)了這種進(jìn)步,即在分布式基礎(chǔ)上,充分支持面向?qū)ο蟮奶匦浴?023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼6對(duì)象的串行化在同一虛擬機(jī)上,當(dāng)對(duì)象作為參數(shù)傳遞時(shí),是引用傳遞。如何在不同虛擬機(jī)上傳遞對(duì)象?將對(duì)象轉(zhuǎn)化為字節(jié)序列,再將這些字節(jié)序列發(fā)送給遠(yuǎn)程機(jī)器。-----類(lèi)似傳值調(diào)用傳遞特殊的遠(yuǎn)程對(duì)象引用----當(dāng)遠(yuǎn)程機(jī)器調(diào)用此引用的方法時(shí),該調(diào)用會(huì)通過(guò)Internet回到最初創(chuàng)建此對(duì)象的機(jī)器,類(lèi)似引用調(diào)用。RMI:綜合運(yùn)用。2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼7工作原理P621圖12023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼82023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼9如何定位遠(yuǎn)程對(duì)象?RMI的命名/注冊(cè)服務(wù)正是解決這一問(wèn)題的。當(dāng)服務(wù)器端想向客戶端提供基于RMI的服務(wù)時(shí),它需要將一個(gè)或多個(gè)遠(yuǎn)程對(duì)象注冊(cè)到本地的RMI注冊(cè)表中。每個(gè)對(duì)象在注冊(cè)時(shí)都被指定一個(gè)將來(lái)用于客戶程序引用該對(duì)象的名稱??蛻舫绦蛲ㄟ^(guò)命名服務(wù),指定類(lèi)似URL的對(duì)象名稱就可以獲得指向遠(yuǎn)程對(duì)象的遠(yuǎn)程引用。在Naming

中的lookup()

方法找到遠(yuǎn)程對(duì)象所在的主機(jī)后,它將檢索該主機(jī)上的RMI注冊(cè)表,并請(qǐng)求所需的遠(yuǎn)程對(duì)象。如果注冊(cè)表發(fā)現(xiàn)被請(qǐng)求的遠(yuǎn)程對(duì)象,它將生成一個(gè)對(duì)該遠(yuǎn)程對(duì)象的遠(yuǎn)程引用,并將其返回給客戶端,客戶端則基于遠(yuǎn)程引用生成相應(yīng)的Stub對(duì)象,并將引用傳遞給調(diào)用者。2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼10RMI編程定義遠(yuǎn)程接口。這一步是通過(guò)擴(kuò)展java.rmi.Remote

接口,并定義所需的業(yè)務(wù)方法實(shí)現(xiàn)的。定義遠(yuǎn)程接口的實(shí)現(xiàn)類(lèi)。即實(shí)現(xiàn)上一步所定義的接口,給出業(yè)務(wù)方法的具體實(shí)現(xiàn)邏輯。編譯遠(yuǎn)程接口和實(shí)現(xiàn)類(lèi),并通過(guò)RMI編譯器rmic

基于實(shí)現(xiàn)類(lèi)生成所需的Stub和Skeleton類(lèi)。2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼112023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼12定義遠(yuǎn)程接口遠(yuǎn)程接口必須直接或者間接的擴(kuò)展自java.rmi.Remote

接口。遠(yuǎn)程方法必須聲明拋出java.rmi.RemoteException

異常。在遠(yuǎn)程方法聲明中,作為參數(shù)或者返回值的遠(yuǎn)程對(duì)象,或者包含在其它非遠(yuǎn)程對(duì)象中的遠(yuǎn)程對(duì)象,必須聲明為其對(duì)應(yīng)的遠(yuǎn)程接口,而不是實(shí)際的實(shí)現(xiàn)類(lèi)。2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼13舉例:Fibonacci接口

P6232023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼14實(shí)現(xiàn)遠(yuǎn)程接口必須繼承java.rmi.server.UnicastRemoteObject

或其子類(lèi)。UnicastRemoteObject

類(lèi)實(shí)現(xiàn)了我們前面所講的基于TCP/IP的點(diǎn)對(duì)點(diǎn)通訊機(jī)制。該類(lèi)構(gòu)造函數(shù)的最重要的作用就是調(diào)用UnicastRemoteObject

類(lèi)的exportObject()方法。導(dǎo)出(Export)對(duì)象是指使遠(yuǎn)程對(duì)象準(zhǔn)備就緒,可以接受進(jìn)來(lái)的調(diào)用的過(guò)程。而這個(gè)過(guò)程的最重要內(nèi)容就是建立服務(wù)器套接字,監(jiān)聽(tīng)特定的端口,等待客戶端的調(diào)用請(qǐng)求。2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼15舉例:FibonacciImpl類(lèi)

P6252023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼16服務(wù)器端注冊(cè)舉例:FibonacciServerP626生成非守護(hù)進(jìn)程,服務(wù)器程序繼續(xù)運(yùn)行。2023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼17編寫(xiě)客戶程序舉例:FibonacciClientP6292023年2月6日廣州大學(xué)Java網(wǎng)絡(luò)編程主講:劉淼18運(yùn)行編譯服務(wù)器程序:javacFibonacciServer.java生成樁類(lèi):rmicFibonacciImpl啟動(dòng)服務(wù)器啟動(dòng)注冊(cè)表:rmiregistry&新啟動(dòng)JVM,啟動(dòng)服務(wù)器:javaFibonacciServer編譯客戶程序:javacFibonacciClient.java運(yùn)行客戶程序:javaFibonacciClientrmi://localhost/fibonacci01234555155

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論