熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

JAVA RMI遠程方法調用簡單實例

2013-11-23 19:24:03  來源: Java核心技術 

  RMI的概念

  RMI(Remote Method Invocation)遠程方法調用是一種計算機之間利用遠程對象互相調用實現雙方通訊的一種通訊機制使用這種機制某一台計算機上的對象可以調用另外一台計算機上的對象來獲取遠程數據RMI是Enterprise JavaBeans的支柱是建立分布式Java應用程序的方便途徑在過去TCP/IP套接字通訊是遠程通訊的主要手段但此開發方式沒有使用面向對象的方式實現開發在開發一個如此的通訊機制時往往令程序員感覺到乏味對此RPC(Remote Procedure Call)應運而生它使程序員更容易地調用遠程程序但在面對復雜的信息傳訊時RPC依然未能很好的支持而且RPC未能做到面向對象調用的開發模式針對RPC服務遺留的問題RMI出現在世人面前它被設計成一種面向對象的通訊方式允許程序員使用遠程對象來實現通信並且支持多線程的服務這是一次遠程通訊的革命為遠程通信開辟新的裡程碑

  RMI的開發步驟

  先創建遠程接口及聲明遠程方法注意這是實現雙方通訊的接口需要繼承Remote

  開發一個類來實現遠程接口及遠程方法值得注意的是實現類需要繼承UnicastRemoteObject

  通過javac命令編譯文件通過java server 命令注冊服務啟動遠程對象

  最後客戶端查找遠程對象並調用遠程方法

  簡單實例

  首先為服務建立一個Model層注意因為此對象需要現實進行遠程傳輸所以必須繼承Serializable

   

  創建遠程接口PersonService注意遠程接口需要繼承Remote

   

  建立PersonServiceImpl實現遠程接口注意此為遠程對象實現類需要繼承UnicastRemoteObject

   

  建立服務器端在服務器端注冊RMI通訊端口與通訊路徑然後通訊javac命令編譯文件通過java server 命令注冊服務以下面代碼為例如果閣下將項目建立於D:\\RMI\RemotingService文件夾上時則先輸入D:\\RMI\RemotingService\src>javac rmi/remotingservice/Programjava獲取Programclass(如何閣下使用的MyEclipse等開發工具可跳過此步直接在*/bin文件夾中直接調用已經生成的Programclass)然後輸入D:\\RMI\RemotingService\src>java rmi/remotingservice/Program啟動服務

   

  最後建立客戶端進行測試注意客戶調用的RMI路徑必須服務器配置一致

   

  常見錯誤

  在命令提示符調用java命令時顯示並無此命令這是因為未在環境變量中綁定JAVA的JDK命令造成的你首先單擊計算機右鍵>屬性>高級>環境變量在系統變量Path設置中加載為JDK的路徑  ;D:\Program Files\Genuitec\Common\binary\comsunjavajdkwinx_\bin然後在ClassPath加載服務器端的Programclass地址 ;D:\\RMI\RemotingService\bin

  在調用javac命令時出現javac 找不到文件 …… 此錯誤可能是因為閣下輸入的文件路徑出現錯誤造成注意不要把D:\\RMI\RemotingService\src>javac rmi/remotingservice/Programjava寫錯為D:\\RMI\RemotingService\src>javac rmiremotingserviceProgramjava

  在調用D:\\RMI\RemotingService\bin>java rmi/remotingservice/Program命令時出現Exception in thread main javalangNoClassEdfoundError錯誤第一這可能是閣下把Program錯寫為Programclass注意java命令不需要加後綴名第二可能是閣下把java rmi/remotingservice/Program錯寫為java rmi\remotingservice\Program


From:http://tw.wingwit.com/Article/program/Java/hx/201311/26803.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.