如何在Java中使用RMI
遠(yuǎn)程方法調(diào)用(RMI)是java中最早的關(guān)于處理對(duì)象分布的機(jī)制,了解其工作原理為今后學(xué)習(xí)RMI-IIOP,XML-RPC以及SOAP等都有較大的幫助。
簡(jiǎn)單歸納如下:
1.RMI允許一個(gè)JVM實(shí)例中的所有對(duì)象調(diào)用另一個(gè)JVM實(shí)例中所有對(duì)象的方法;
這兩個(gè)JVM可以運(yùn)行在同一臺(tái)機(jī)器的不同進(jìn)程上,也可以運(yùn)行在不同的機(jī)器上。
2.可以被遠(yuǎn)程訪問的對(duì)象必須創(chuàng)建一個(gè)接口,并extends java.rmi.Remote接口;
接口中定義的所有方法必須拋出java.rmi.RemoteException。
3.可以被遠(yuǎn)程訪問的對(duì)象除了要實(shí)現(xiàn)該接口外,還要extends java.rmi.server.UnicastRemoteObject;
4.使用rmic工具生成_Stub類和_Skel類;
在cmd窗口中,輸入:rmic 編譯好的實(shí)現(xiàn)類名
若出現(xiàn)Class Not Found錯(cuò),則檢查class路徑設(shè)置是否正確。
這樣,客戶端實(shí)際是在對(duì)_Stub對(duì)象進(jìn)行操作,而不是對(duì)實(shí)際的遠(yuǎn)程對(duì)象操作。服務(wù)器端則用_Skel對(duì)象和實(shí)際的遠(yuǎn)程對(duì)象進(jìn)行通信。
5.編寫服務(wù)器端應(yīng)用程序;
需要用Naming.rebind()方法將注冊(cè)名與對(duì)象綁定在一起。
6.編寫客戶端程序;
首先要用Naming.lookup()方法搜索注冊(cè)名,之后cast成遠(yuǎn)程接口。
這里,如果是在不同的機(jī)器上分別開發(fā)客戶端和服務(wù)器端的話,則需要將接口復(fù)制到兩邊。
最后,就是象調(diào)用本地方法一樣,調(diào)用該遠(yuǎn)程接口的方法,實(shí)現(xiàn)分布計(jì)算的功能了。
7.要運(yùn)行RMI的話,需要啟動(dòng)三個(gè)程序:
7.1.在第一個(gè)cmd中,啟動(dòng)rmiregistry,注意要在遠(yuǎn)程實(shí)現(xiàn)類所在的目錄下運(yùn)行;
7.2.在第二個(gè)cmd中,啟動(dòng)服務(wù)器端程序;
注意點(diǎn):a).java參數(shù)(-Djava.security.policy)中要指定策略文件名(包含路徑)
b).路徑中若目錄名里含有空格,須將整個(gè)路徑用""包起來,否則會(huì)報(bào)Class Not Found錯(cuò)
c).如果機(jī)器上安裝有防火墻軟件,可能會(huì)導(dǎo)致connect超時(shí),異常中斷,須關(guān)閉防火墻
7.3.在第三個(gè)cmd中,啟動(dòng)客戶端程序;
8.下面介紹如何在eclipse中運(yùn)行一個(gè)簡(jiǎn)單的RMI程序:
8.1.先在eclipse里新建一個(gè)java項(xiàng)目,然后,創(chuàng)建RMI接口,實(shí)現(xiàn)類,服務(wù)器端程序,客戶端程序;
8.2.打開cmd窗口,啟動(dòng)rmiregistry;
8.3.在eclipse里,右鍵點(diǎn)擊服務(wù)器端程序,打開“運(yùn)行...”配置窗口,切換到“Arguments”,在“VM arguments”里輸入:-Djava.security.policy=xxxxxxx
8.4.點(diǎn)擊“運(yùn)行”,在控制臺(tái)里可以看到服務(wù)器程序正確運(yùn)行;
8.5.最后,右鍵點(diǎn)擊客戶端程序,運(yùn)行;
posted on 2010-06-09 23:46 koradji 閱讀(995) 評(píng)論(0) 編輯 收藏 所屬分類: Web Development