




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、2009-10-22RMI實例1 / 9Remote Method Invocation (RMI - Java遠程方法調(diào)用)允許您使用Java編寫分布式對象。本文將介紹RMI的優(yōu)點以及如何將其連接到現(xiàn)有的和原有的系統(tǒng)中,以及與用Java 編寫的組件的連接,同時給出了一個詳細的例子,可以給初學(xué)者提供一個學(xué)習(xí)范本。 一、RMI(遠程方法調(diào)用)的組成 一個正常工作的RMI系統(tǒng)由下面幾個部分組成: 1、遠程服務(wù)的接口定義 2、遠程服務(wù)接口的具體實現(xiàn) 3、樁(Stub)和框架(Skeleton)文件 4、一個運行遠程服務(wù)的服務(wù)器 5、一個RMI命名服務(wù),它允許客戶端去發(fā)現(xiàn)這個遠程服務(wù) 6、類文件的提供
2、者(一個HTTP或者FTP服務(wù)器) 7、一個需要這個遠程服務(wù)的客戶端程序 二、RMI(遠程方法調(diào)用)的工作原理 RMI系統(tǒng)結(jié)構(gòu),在客戶端和服務(wù)器端都有幾層結(jié)構(gòu)。 - - | 客戶 | | 服務(wù)器| - - | | - - | 占位程序 | | 骨干網(wǎng) | - - | | - | 遠 程 引 用 層 | - | | - | 傳 輸 層 | - 方法調(diào)用從客戶對象經(jīng)占位程序(Stub)、遠程引用層(Remote Reference Layer)和傳輸層(Transport Layer)向下,傳遞給主機,然后再次經(jīng)傳 輸層,向上穿過遠程調(diào)用層和骨干網(wǎng)(Skeleton),到達服務(wù)器對象。 占位程序扮
3、演著遠程服務(wù)器對象的代理的角色,使該對象可被客戶激活。 遠程引用層處理語義、管理單一或多重對象的通信,決定調(diào)用是應(yīng)發(fā)往一個服務(wù)器還是多個。傳輸層管理實際的連接,并且追追蹤可以接受方法調(diào)用的遠程對象。服務(wù)器端的骨干網(wǎng)完成對服務(wù)器對象實際的方法調(diào)用,并獲取返回值。返回值向下經(jīng)遠程引用層、服務(wù)器端的傳輸層傳遞回客戶端,再向上經(jīng)傳輸層和遠程調(diào)用層返回。最后,占位程序獲得返回值。 要完成以上步驟需要有以下幾個步驟: 1、生成一個遠程接口 2、實現(xiàn)遠程對象(服務(wù)器端程序) 3、編寫服務(wù)器程序 、注冊遠程對象、啟動遠程對象 4、編寫客戶程序 在JDK1.5之后,用java提供的API將會更加的
4、簡單,可以參照下面的例子; 三、例子 1、遠程接口 /* * 該接口定義了一個方法,用于提供遠程服務(wù); */ package com.liuxiang.rmi.download; import java.rmi.Remote; import java.rmi.RemoteException; /* * 遠程對象接口 */ public interface IRMI extends Remote public Object invoke(ITask task) throws RemoteException; 2、實現(xiàn)遠程對象(服務(wù)器端程序) /* * 實現(xiàn)了
5、遠程接口定義的方法;該實現(xiàn)遠程對象中,調(diào)用了傳入?yún)?shù)的task.doWork()方 * 法,同時執(zhí)行一個本地調(diào)用,調(diào)用一個播放Mp3的代碼段ProcessCaller.callMp3(); */ package com.liuxiang.rmi.download; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; import com.liuxiang.callwindow.ProcessCaller; /* * 遠程對象的實現(xiàn) */ public class IRMIImpl extend
6、s UnicastRemoteObject implements IRMI protected IRMIImpl() throws RemoteException super(); private static final long serialVersionUID = 6131922116577454476L; public Object invoke(ITask task) throws Re
7、moteException System.out.println("注意:這是一個遠程調(diào)用"); Object obj = task.doWork(); System.out.println("調(diào)用ITask.doWork()方法的返回值:"+obj.toString(); &
8、#160; /客戶端調(diào)用,可以在服務(wù)器端播放需要的音樂 ProcessCaller.callMp3(); return obj; 3、播放Mp3代碼段的源代碼如下: package com.liuxiang.callwindow; /* * 在java中調(diào)用windows程序 */ public class ProcessCaller
9、160; /* * 調(diào)用Windows程序 * 利用Windows Media Player播放mp3音樂 */ public static void callMp3() Runtime ru = Runtime.getRuntime();
10、 try / 調(diào)用播放器文件播放指定MP3 Process p1 = ru.exec("C:Program FilesWindows Media Playerwmplayer F:/music/lx/劉若英-后來.mp3");
11、 catch (Exception e) public static void main(String args) callMp3(); 4、任務(wù)接口 /* * 該接口定義了遠程方法需要傳遞的參數(shù) */ package com.liuxiang.rmi.download; import j
12、ava.io.Serializable; /* * 任務(wù)接口 * */ public interface ITask extends Serializable public Object doWork(); 5、任務(wù)接口實現(xiàn) package com.liuxiang.rmi.download; /* * 任務(wù)實現(xiàn)類 * 該實現(xiàn)定義了遠程方法需要傳遞的參數(shù) * */ public class TaskImpl implements ITask public Object doWork()
13、0; System.out.println("當(dāng)前程序處于遠程調(diào)用中"); return "動態(tài)上載對象的返回值" 6、編寫服務(wù)器程序 、注冊遠程對象、啟動遠程對象 /* *遠程對象的注冊類.該類應(yīng)該在服務(wù)器端執(zhí)行 *執(zhí)行之后,該機器將變?yōu)镽MI服務(wù)器,客戶端可以通過正確的url來訪問; *服務(wù)器上的遠程對象;執(zhí)行對外報露的方法 */ packag
14、e com.liuxiang.rmi.download; import java.rmi.Naming; import java.rmi.registry.LocateRegistry; import java.rmi.registry.Registry; public class RMIServer /* * 如果沒有創(chuàng)建一個Registry,Naming是不會幫助你創(chuàng)建的。 還是自己手工創(chuàng)建的比較的好 *
15、 * 盡量用下面的自己封裝的bind方法來注冊遠程對象 * * throws Exception */ public static void registRemoteObject() throws Exception IRMIImpl impl = new IRMIImpl();
16、0; Naming.rebind("rmi:/7:1111/mytask", impl); System.out.println("bound success!"); /* * 創(chuàng)建一個Registry對象 *
17、160; * return 返回一個Registry對象 */ private static Registry createRegistry() Registry registry = null; int port = 1111; try &
18、#160; registry = LocateRegistry.getRegistry(port); registry.list(); System.out.println("Register the
19、exist server!"); catch (final Exception e) try registry = LocateRegistry.createRegistry(port);
20、 System.out.println("Register the exist server!port=" + port); catch (final Exception ee)
21、 ee.printStackTrace(); return registry; /*
22、 * 將對象注冊到rmi服務(wù)器上 */ public static void bind() Registry registry = null; registry = createRegistry(); try
23、0; IRMIImpl impl = new IRMIImpl(); registry.rebind("mytask", impl); System.out.println("mytask server s
24、tart!"); catch (Exception e) e.printStackTrace(); /* * param args &
25、#160; */ public static void main(String args) try bind(); catch (Exception e)
26、160; e.printStackTrace(); /運行該服務(wù)端代碼后,將會注冊一個遠程服務(wù)對象,通過恰當(dāng)?shù)腢RL可以訪問遠程對象 /中的方法;運行后的結(jié)果如下: /Register the exist server!port=1111 /mytask server start! 7、編寫客戶程序 /* * 代碼首先獲取一個遠程對象,然后如同本地調(diào)用一樣,調(diào)用遠程對象中的方法。 */ package com.liuxiang.rmi.
27、download; import java.rmi.Naming; public class RMIClient /* * 調(diào)用遠程對象中的方法 * throws Exception */ public static void getRemoteObject() throws Exception IRMI obj = (IRMI)Naming.lookup("rmi:/localhost:1111/mytask"); /得到遠程發(fā)布的服務(wù) TaskImpl task = new TaskImpl();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 河南物流職業(yè)學(xué)院《數(shù)據(jù)分析綜合》2023-2024學(xué)年第二學(xué)期期末試卷
- 電梯應(yīng)急救援演練總結(jié)
- 中山大學(xué)《生物質(zhì)能源工程》2023-2024學(xué)年第二學(xué)期期末試卷
- 幼兒園遠期規(guī)劃(范文五)
- 呼吸功能鍛煉法
- 口腔科常用器械及使用
- 新生兒甲狀腺功能低下診療與管理
- 鄭州工業(yè)應(yīng)用技術(shù)學(xué)院《古代女性文學(xué)研究》2023-2024學(xué)年第二學(xué)期期末試卷
- 浙江外國語學(xué)院《文旅策劃與規(guī)劃》2023-2024學(xué)年第二學(xué)期期末試卷
- 幼兒園五年發(fā)展規(guī)劃總結(jié) 幼兒園規(guī)劃
- 牡丹的藥用價值課件
- kW殼管式干式蒸發(fā)器設(shè)計
- 新進員工三級教育卡(參考)范本
- 最新藥店員工手冊
- 系列螺桿冷水機組操作培訓(xùn)
- 五金用樣品承認書
- 催化劑對異氰酸酯反應(yīng)活性的影響
- 國家開放大學(xué)《C語言程序設(shè)計》綜合測試題參考答案
- 老年人生活自理能力評估表
- 火電機組能耗指標(biāo)分析指導(dǎo)性意見
- 四年級下冊英語外研一起點知識要點匯總
評論
0/150
提交評論