隨筆-109  評論-187  文章-25  trackbacks-0

          轉(zhuǎn)自:http://m47121.blogchina.com/2555077.html

          ??????????????????????????????????????

          編程

            我們將首先編寫遠程對象,并將代碼保存為名字為AddServer.Java的文件:

          import Java.rmi.*;

          public interface AddServer extends Remote {

          public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException;

          }

            我們來看看上面的代碼。首先,為了使用其內(nèi)容,我們導(dǎo)入rmi包。然后,我們創(chuàng)建一個擴展了Java.rmi中遠程接口的接口。所有的遠程對象必須擴展該遠程接口,我們將該遠程接口稱為AddServer。在該遠程對象中,有一個名字為AddNumbers的方法,客戶端可以調(diào)用這一方法。我們必須記住的是,所有的遠程方法都需要啟動RemoteException方法,有錯誤發(fā)生時就會調(diào)用該方法。

            下面我們開始編寫遠程對象的實現(xiàn)。這是一個實現(xiàn)遠程對象并包含有所有方法代碼的類,將下面的代碼保存為名字為AddServerImpl.Java的文件:

          import Java.rmi.*;

          public class AddServerImpl extends UnicastRemoteObject implements AddServer {
          public AddServerImpl() {
          super();
          }
          public int AddNumbers(int firstnumber,int secondnumber) throws RemoteException {
          return firstnumber + secondnumber;
          }
          }

            首先,我們導(dǎo)入rmi包,然后創(chuàng)建一個擴展UnicastRemoteObject和實現(xiàn)創(chuàng)建的遠程對象的類;其次,我們可以為類創(chuàng)建一個缺省的構(gòu)建器。我們還了解了AddNumbers方法的代碼,它啟動RemoteException。這樣我們就覆蓋了創(chuàng)建的遠程對象中的方法。AddNumbers方法的代碼非常好理解,它接受2個整型參數(shù),然后相加并返回它們的和。

            至此,我們已經(jīng)有了二個Java文件:遠程對象和遠程對象的實現(xiàn)。下面我們將使用Javac命令編譯這二個文件:

            編譯遠程對象:

          C:\jdk\bin\Javac workingdir\AddServer.Java

            編譯遠程對象實現(xiàn):

          C:\jdk\bin\Javac workingdir\AddServerImpl.Java

            這樣,就會達到二個Java文件和二個類文件,下面我們將創(chuàng)建stub和skeleton。為了創(chuàng)建stub和skeleton文件,我們必須使用rmic編譯器編譯遠程對象實現(xiàn)文件。

            用Rmic編譯遠程對象實現(xiàn)文件:

          C:\jdk\bin\rmic workingdir\AddServerImpl.Java

            然后,我們就會發(fā)現(xiàn)多了2個新建的類文件,它們分別是AddServerImpl_Stub.class 和AddServerImpl_Skel.class 。

            The Coding (Contd.)

            我們已經(jīng)編譯了所有的源代碼,下面我們來創(chuàng)建客戶端和服務(wù)器端,將下面的代碼保存為名字為RmiServer.Java的文件:

          import Java.rmi.*;
          import Java.net.*;

          public class RmiServer {
          public static void main (String args[]) throws RemoteException, MalformedURLException {
          AddServerImpl add = new AddServerImpl();
          Naming.rebind("addnumbers",add);
          }
          }

            首先,我們導(dǎo)入Java.rmi包和Java.net包。另外,我們還使用throws從句捕獲任何異常。我們從對象中得出遠程對象實現(xiàn),使用rebind方法將字符串a(chǎn)ddnumbers與該對象綁定。下面的例子顯示了綁定的含義:
          從現(xiàn)在開始,無論何時客戶端要調(diào)用遠程對象,使用字符串a(chǎn)ddnumbers就可以實現(xiàn)。rebind方法有二個參數(shù):第一個參數(shù)是字符串變量,第二個參數(shù)是遠程對象實現(xiàn)類的對象。

            下面我們來創(chuàng)建客戶端,將下面的代碼保存為名字為RmiClient.Java的文件:

          import Java.rmi.*;
          import Java.net.*;

          public class RmiClient {
          public static void main(String args[]) throws RemoteException, MalformedURLException {
          String url="rmi://127.0.0.1/addnumbers";
          AddServer add;
          add = (AddServer)Naming.lookup(url);
          int result = add.AddNumbers(10,5);
          System.out.println(result);
          }
          }

            首先,我們導(dǎo)入Java.rmi包和Java.net包,并使用throws從句捕獲所有必要的異常。然后通過利用Naming類中的靜態(tài)lookup方法從遠程對象中得到一個對象。(這也是我們無需從Naming類中得到一個對象并調(diào)用它。而只使用類名字的原因。)

            lookup方法接受遠程對象的完整的URL名字,該URL由完整的機器IP地址以及與對象綁定的字符串(也誻對象的綁定名)組成。在調(diào)用遠程對象時,我們使用了RMI協(xié)議。lookup方法向我們返回一個對象,在能夠使用它前,我們必須將它的數(shù)據(jù)類型轉(zhuǎn)換為與遠程對象的數(shù)據(jù)類型一致。

          Since we have both our server and client source ready, let's compile them both:

            至此,我們已經(jīng)有了服務(wù)器端和客戶端的源代碼,下面我們來編譯這二個源文件:

            編譯遠程服務(wù)器:

          C:\jdk\bin\Javac workingdir\RmiServer.Java

            編譯遠程客戶端:

          C:\jdk\bin\Javac workingdir\RmiClient.Java

            在對我們的代碼進行測試前,還必須首先啟動RMI Registry。RMI Registry存儲有所有綁定的數(shù)據(jù),沒有它,RMI就不能正常地運行!

            啟動Rmi Registry服務(wù)器:

          C:\jdk\bin\start rmiregistry

            我們會注意到,這時會出現(xiàn)一個空白的DOS提示符窗口,這表明Rmi Registry服務(wù)器在運行,注意不要關(guān)閉該窗口。然后,我們首先在一個DOS提示符窗口中運行Rmi服務(wù)器,然后在另一個DOS提示符窗口中運行Rmi客戶端。

            啟動RMI服務(wù)器:

          C:\jdk\bin\Java workingdir\RmiServer

            啟動RMI客戶端:

          C:\jdk\bin\Java workingdir\RmiClient

            如果一切正常,我們應(yīng)該能夠得到15這個輸出。我們向AddNumbers方法輸入10和5二個數(shù)字,該方法將這二者加起來,并將其和15返回給我們。如果得到了15這個輸出,說明我們已經(jīng)成功地執(zhí)行了一個遠程方法。當然,在這里,我們并沒有執(zhí)行真正意義上的遠程方法,因為我們的計算機既是服務(wù)器,又是客戶機。如果有計算機網(wǎng)絡(luò),我們就可以方便地進行執(zhí)行遠程方法的試驗了。

          posted on 2006-04-14 09:17 小小程序程序員混口飯吃 閱讀(1814) 評論(0)  編輯  收藏 所屬分類: java
          主站蜘蛛池模板: 兰溪市| 濮阳市| 太白县| 五华县| 乌审旗| 涡阳县| 泰顺县| 焉耆| 宜黄县| 金平| 嵊州市| 南皮县| 丰镇市| 兴安盟| 阿鲁科尔沁旗| 光泽县| 来安县| 民权县| 无锡市| 娄烦县| 马关县| 安新县| 保亭| 溆浦县| 巴彦淖尔市| 白城市| 临武县| 高邑县| 宝清县| 玉树县| 宁南县| 旅游| 宁安市| 南城县| 南涧| 丹阳市| 阜南县| 南丹县| 辽宁省| 乐亭县| 美姑县|