RMI實例參考模板_第1頁
RMI實例參考模板_第2頁
RMI實例參考模板_第3頁
RMI實例參考模板_第4頁
RMI實例參考模板_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論