使用 JavaRMI 步驟及Stub not found 等問題解決方案

來源:互聯網
上載者:User

轉載請表明出處: http://blog.csdn.net/jiangsq12345

 

對JavaRMI的介紹我就省略了,本文主要是協助大家解決一個常見的在運行RMI過程中出現的煩人Exception(特別是Stub not found)。

 

開始前先提醒幾點:

1對於.編寫代碼,我想大家差不多都用的是Eclipse這個IDE,但是對於運行RMI用IDE反而麻煩,所以先做好用命令編譯運行java程式的準備 (一般要3個命令視窗,分別是伺服器
+用戶端
+RMI註冊程式rmiregistry

2.網上有很多教程是寫一部分代碼編譯最後再運行,而我覺得編寫代碼需要連貫性,因此我提倡先寫代碼,然後運行RMI; j建議大家先從最簡單的例子開始:

  4個類(3個在伺服器端,1個在用戶端); 將這3個類放在同一個包下面,或者如果你不太懂包的含義乾脆就預設不用包

 

先瞭解一下RMI的大致步驟:

1. 建立遠程介面及聲明遠程方法(HelloInterface.java)
2. 實現遠程介面及遠程方法(繼承UnicastRemoteObject)(Hello.java)

3. 用戶端尋找遠程對象,並調用遠程方法(HelloClient)
4. 啟動RMI註冊服務,並註冊遠程對象(HelloServer.java)
5. 執行程式:啟動服務HelloServer;運行用戶端HelloClient進行調用

 

代碼參考 http://topic.csdn.net/u/20090306/22/060e1a70-8d4a-47e9-987c-11637d6d7e7f.html
,我省略

 

我們重點來說一下編譯和運行中的步驟及注意點:

假設我們代碼的結構是這樣的

 +projet

    +src

      +test(包)

         - HelloInterface.java

                                    - Hello.java

                                    - HelloServer.java

         -HelloClient.java

 

1. 編譯代碼

  進入到 ....../workspace/projet/src


檔案夾下 (省略符號表示你的系統的絕對路徑),先給環境變數加一條預設的classpath,

   Linux下: export CLASSPATH='....../workspace/projet/src


';

             Windows 下可以考慮用手動右擊我的電腦手動設定

  然後 用命令(前提是你的電腦已經設定好java虛擬機器的路徑,否則先把這個設定好):

   $Javac *.java


 2. 用RMIC產生一個stub類

  命令(注意到包與類名用.


串連,而且不用.class):

           $rmic test.Hello


 3. 運行rmiregistry,

     用另一個視窗運行命令:

          $rmiregistry


 

 4. 運行伺服器(我記得早些版本不用再設定路徑就可以直接找到stub的,但是現在好像不行了,不管怎麼樣加個路徑中沒有錯的)

  要在....../workspace/projet/src目錄下


   
$java  -Djava.rmi.server.codebase=file:/....../workspace/projet/src/  test.HelloServer


 5. 運行用戶端

  要在....../workspace/projet/src目錄下


   



$java test.HelloClient


 

 如果沒有其他意外的話,應該可以看到helloworld了。如還有問題可以給在我留言

  

 

註:

1. 用RMI傳遞對象時,必須將對象序列化

 2.
rmiregistry 

預設連接埠是1099,因此注意伺服器端發布服務是連接埠必須要於此連接埠一致,否則無法完成註冊;會有Connection refuse的exception





 3. 如果項目比較大,代碼大時,可以用Ant
, 例子

   <project name="projet" default="compile"></p><p><property name="src" value="${basedir}/src" /><br /><property name="bin" value="${basedir}/bin" /></p><p> <path id="classpath"><br /><fileset dir="${bin}" includes="*.class" /><br /></path> </p><p><!-- =========== --><br /><!-- Compilation --><br /><!-- =========== --></p><p><target name="compile" description="Compile le projet"><br /><mkdir dir="${bin}" /><br /><javac destdir="${bin}" srcdir="${src}" classpathref="classpath" /><br /></target></p><p><!-- ========================= --><br /><!-- Nettoyage des répertoires --><br /><!-- ========================= --></p><p><target name="clean" description="Nettoyage des répertoires"><br /><delete dir="${bin}" /><br /></target></p><p></project> 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.