學(xué)習(xí)筆記:JAVA RMI遠(yuǎn)程方法調(diào)用簡單實(shí)例
RMI的概念
RMI(Remote Method Invocation)遠(yuǎn)程方法調(diào)用是一種計(jì)算機(jī)之間利用遠(yuǎn)程對(duì)象互相調(diào)用實(shí)現(xiàn)雙方通訊的一種通訊機(jī)制。使用這種機(jī)制,某一臺(tái)計(jì)算機(jī)上的對(duì)象可以調(diào)用另外一臺(tái)計(jì)算機(jī)上的對(duì)象來獲取遠(yuǎn)程數(shù)據(jù)。RMI是Enterprise JavaBeans的支柱,是建立分布式Java應(yīng)用程序的方便途徑。在過去,TCP/IP套接字通訊是遠(yuǎn)程通訊的主要手段,但此開發(fā)方式?jīng)]有使用面向?qū)ο蟮姆绞綄?shí)現(xiàn)開發(fā),在開發(fā)一個(gè)如此的通訊機(jī)制時(shí)往往令程序員感覺到乏味,對(duì)此RPC(Remote Procedure Call)應(yīng)運(yùn)而生,它使程序員更容易地調(diào)用遠(yuǎn)程程序,但在面對(duì)復(fù)雜的信息傳訊時(shí),RPC依然未能很好的支持,而且RPC未能做到面向?qū)ο笳{(diào)用的開發(fā)模式。針對(duì)RPC服務(wù)遺留的問題,RMI出現(xiàn)在世人面前,它被設(shè)計(jì)成一種面向?qū)ο蟮耐ㄓ嵎绞剑试S程序員使用遠(yuǎn)程對(duì)象來實(shí)現(xiàn)通信,并且支持多線程的服務(wù),這是一次遠(yuǎn)程通訊的革命,為遠(yuǎn)程通信開辟新的里程碑。
RMI的開發(fā)步驟
先創(chuàng)建遠(yuǎn)程接口及聲明遠(yuǎn)程方法,注意這是實(shí)現(xiàn)雙方通訊的接口,需要繼承Remote
開發(fā)一個(gè)類來實(shí)現(xiàn)遠(yuǎn)程接口及遠(yuǎn)程方法,值得注意的是實(shí)現(xiàn)類需要繼承UnicastRemoteObject
通過javac命令編譯文件,通過java -server 命令注冊(cè)服務(wù),啟動(dòng)遠(yuǎn)程對(duì)象
最后客戶端查找遠(yuǎn)程對(duì)象,并調(diào)用遠(yuǎn)程方法
簡單實(shí)例
首先為服務(wù)建立一個(gè)Model層,注意因?yàn)榇藢?duì)象需要現(xiàn)實(shí)進(jìn)行遠(yuǎn)程傳輸,所以必須繼承Serializable
package rmi.model; import java.io.Serializable; //注意對(duì)象必須繼承Serializable publicvoid setId(int id) { publicint getId() { publicvoid setName(String name) { public String getName() { publicvoid setAge(int age) { publicint getAge() { |
創(chuàng)建遠(yuǎn)程接口PersonService,注意遠(yuǎn)程接口需要繼承Remote
package rmi.service; |
建立PersonServiceImpl實(shí)現(xiàn)遠(yuǎn)程接口,注意此為遠(yuǎn)程對(duì)象實(shí)現(xiàn)類,需要繼承UnicastRemoteObject
package rmi.serviceImpl; |
建立服務(wù)器端,在服務(wù)器端注冊(cè)RMI通訊端口與通訊路徑,然后通訊javac命令編譯文件,通過java -server 命令注冊(cè)服務(wù)。以下面代碼為例,如果閣下將項(xiàng)目建立于D:\\RMI\RemotingService文件夾上時(shí),則先輸入D:\\RMI\RemotingService\src>javac rmi/remotingservice/Program.java獲取Program.class(如何閣下使用的MyEclipse等開發(fā)工具,可跳過此步,直接在*/bin文件夾中直接調(diào)用已經(jīng)生成的Program.class),然后輸入D:\\RMI\RemotingService\src>java rmi/remotingservice/Program啟動(dòng)服務(wù)。
package rmi.remotingservice; |
最后建立客戶端進(jìn)行測(cè)試,注意客戶調(diào)用的RMI路徑必須服務(wù)器配置一致
package rmi.remotingclient; |
常見錯(cuò)誤
在命令提示符調(diào)用java命令時(shí),顯示并無此命令。這是因?yàn)槲丛?#8220;環(huán)境變量”中綁定JAVA的JDK命令造成的,你首先單擊“計(jì)算機(jī)右鍵”->“屬性”->“高級(jí)”->“環(huán)境變量”。在系統(tǒng)變量Path設(shè)置中加載為JDK的路徑 .;D:\Program Files\Genuitec\Common\binary\com.sun.java.jdk.win32.x86_1.6.0.013\bin。然后在ClassPath加載服務(wù)器端的Program.class地址 .;D:\\RMI\RemotingService\bin
在調(diào)用javac命令時(shí)出現(xiàn)“javac 找不到文件 ..... ”此錯(cuò)誤,可能是因?yàn)殚w下輸入的文件路徑出現(xiàn)錯(cuò)誤造成,注意不要把D:\\RMI\RemotingService\src>javac rmi/remotingservice/Program.java寫錯(cuò)為D:\\RMI\RemotingService\src>javac rmi.remotingservice.Program.java
在調(diào)用D:\\RMI\RemotingService\bin>java rmi/remotingservice/Program命令時(shí)出現(xiàn)“Exception in thread 'main' java.lang.NoClassEdfoundError”錯(cuò)誤,第一這可能是閣下把Program錯(cuò)寫為Program.class,注意java命令不需要加后綴名。第二可能是閣下把“java rmi/remotingservice/Program”錯(cuò)寫為“java rmi\remotingservice\Program"。
posted on 2013-09-24 10:22 順其自然EVO 閱讀(212) 評(píng)論(0) 編輯 收藏