免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
學(xué)習(xí)筆記:JAVA RMI遠(yuǎn)程方法調(diào)用簡單實(shí)例

I的概念

RMI(Remote Method Invocation)遠(yuǎn)程方法調(diào)用是一種計(jì)算機(jī)之間利用遠(yuǎn)程對象互相調(diào)用實(shí)現(xiàn)雙方通訊的一種通訊機(jī)制。使用這種機(jī)制,某一臺計(jì)算機(jī)上的對象可以調(diào)用另外一臺計(jì)算機(jī)上的對象來獲取遠(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í)往往令程序員感覺到乏味,對此RPC(Remote Procedure Call)應(yīng)運(yùn)而生,它使程序員更容易地調(diào)用遠(yuǎn)程程序,但在面對復(fù)雜的信息傳訊時(shí),RPC依然未能很好的支持,而且RPC未能做到面向?qū)ο笳{(diào)用的開發(fā)模式。針對RPC服務(wù)遺留的問題,RMI出現(xiàn)在世人面前,它被設(shè)計(jì)成一種面向?qū)ο蟮耐ㄓ嵎绞?,允許程序員使用遠(yuǎn)程對象來實(shí)現(xiàn)通信,并且支持多線程的服務(wù),這是一次遠(yuǎn)程通訊的革命,為遠(yuǎn)程通信開辟新的里程碑。

 

RMI的開發(fā)步驟

  1. 先創(chuàng)建遠(yuǎn)程接口及聲明遠(yuǎn)程方法,注意這是實(shí)現(xiàn)雙方通訊的接口,需要繼承Remote
  2. 開發(fā)一個(gè)類來實(shí)現(xiàn)遠(yuǎn)程接口及遠(yuǎn)程方法,值得注意的是實(shí)現(xiàn)類需要繼承UnicastRemoteObject
  3. 通過javac命令編譯文件,通過java -server 命令注冊服務(wù),啟動遠(yuǎn)程對象
  4. 最后客戶端查找遠(yuǎn)程對象,并調(diào)用遠(yuǎn)程方法

簡單實(shí)例

首先為服務(wù)建立一個(gè)Model層,注意因?yàn)榇藢ο笮枰F(xiàn)實(shí)進(jìn)行遠(yuǎn)程傳輸,所以必須繼承Serializable

[c-sharp] view plaincopy
  1. package rmi.model;  
  2. import java.io.Serializable;  
  3. //注意對象必須繼承Serializable  
  4. public class PersonEntity implements Serializable {  
  5.     private int id;  
  6.     private String name;  
  7.     private int age;  
  8.     public void setId(int id) {  
  9.         this.id = id;  
  10.     }  
  11.     public int getId() {  
  12.         return id;  
  13.     }  
  14.     public void setName(String name) {  
  15.         this.name = name;  
  16.     }  
  17.     public String getName() {  
  18.         return name;  
  19.     }  
  20.     public void setAge(int age) {  
  21.         this.age = age;  
  22.     }  
  23.     public int getAge() {  
  24.         return age;  
  25.     }  
  26. }  

創(chuàng)建遠(yuǎn)程接口PersonService,注意遠(yuǎn)程接口需要繼承Remote

  1. package rmi.service;  
  2. import java.rmi.Remote;  
  3. import java.rmi.RemoteException;  
  4. import java.util.List;  
  5. import rmi.model.*;  
  6. //此為遠(yuǎn)程對象調(diào)用的接口,必須繼承Remote類  
  7. public interface PersonService extends Remote {  
  8.     public List<PersonEntity> GetList() throws RemoteException;  
  9. }  

建立PersonServiceImpl實(shí)現(xiàn)遠(yuǎn)程接口,注意此為遠(yuǎn)程對象實(shí)現(xiàn)類,需要繼承UnicastRemoteObject

  1. package rmi.serviceImpl;  
  2. import java.rmi.RemoteException;  
  3. import java.rmi.server.UnicastRemoteObject;  
  4. import java.util.LinkedList;  
  5. import java.util.List;  
  6. import rmi.model.PersonEntity;  
  7. import rmi.service.*;  
  8. //此為遠(yuǎn)程對象的實(shí)現(xiàn)類,須繼承UnicastRemoteObject  
  9. public class PersonServiceImpl extends UnicastRemoteObject implements PersonService {  
  10.     public PersonServiceImpl() throws RemoteException {  
  11.         super();  
  12.         // TODO Auto-generated constructor stub  
  13.     }  
  14.     @Override  
  15.     public List<PersonEntity> GetList() throws RemoteException {  
  16.         // TODO Auto-generated method stub  
  17.         System.out.println("Get Person Start!");  
  18.         List<PersonEntity> personList=new LinkedList<PersonEntity>();  
  19.           
  20.         PersonEntity person1=new PersonEntity();  
  21.         person1.setAge(25);  
  22.         person1.setId(0);  
  23.         person1.setName("Leslie");  
  24.         personList.add(person1);  
  25.           
  26.         PersonEntity person2=new PersonEntity();  
  27.         person2.setAge(25);  
  28.         person2.setId(1);  
  29.         person2.setName("Rose");  
  30.         personList.add(person2);  
  31.           
  32.         return personList;  
  33.     }  
  34.       
  35. }  

建立服務(wù)器端,在服務(wù)器端注冊RMI通訊端口與通訊路徑,然后通訊javac命令編譯文件,通過java -server 命令注冊服務(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啟動服務(wù)。

  1. package rmi.remotingservice;  
  2. import java.rmi.Naming;  
  3. import java.rmi.registry.LocateRegistry;  
  4.    
  5. import rmi.service.*;  
  6. import rmi.serviceImpl.*;  
  7. public class Program{  
  8.     public static void main(String[] args) {  
  9.         // TODO Auto-generated method stub  
  10.         try {  
  11.             PersonService personService=new PersonServiceImpl();  
  12.             //注冊通訊端口  
  13.             LocateRegistry.createRegistry(6600);  
  14.             //注冊通訊路徑  
  15.             Naming.rebind("rmi://127.0.0.1:6600/PersonService", personService);  
  16.             System.out.println("Service Start!");  
  17.         } catch (Exception e) {  
  18.             // TODO Auto-generated catch block  
  19.             e.printStackTrace();  
  20.         }  
  21.     }  
  22. }  

最后建立客戶端進(jìn)行測試,注意客戶調(diào)用的RMI路徑必須服務(wù)器配置一致

  1. package rmi.remotingclient;  
  2. import java.rmi.Naming;  
  3. import java.util.List;  
  4. import rmi.model.PersonEntity;  
  5. import rmi.service.*;  
  6. public class Program {  
  7.     public static void main(String[] args){  
  8.         try{  
  9.             //調(diào)用遠(yuǎn)程對象,注意RMI路徑與接口必須與服務(wù)器配置一致  
  10.             PersonService personService=(PersonService)Naming.lookup("rmi://127.0.0.1:6600/PersonService");  
  11.             List<PersonEntity> personList=personService.GetList();  
  12.             for(PersonEntity person:personList){  
  13.                 System.out.println("ID:"+person.getId()+" Age:"+person.getAge()+" Name:"+person.getName());  
  14.             }  
  15.         }catch(Exception ex){  
  16.             ex.printStackTrace();  
  17.         }  
  18.     }  
  19. }  

 

常見錯誤

  1. 在命令提示符調(diào)用java命令時(shí),顯示并無此命令。這是因?yàn)槲丛凇碍h(huán)境變量”中綁定JAVA的JDK命令造成的,你首先單擊“計(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
  2. 在調(diào)用javac命令時(shí)出現(xiàn)“javac 找不到文件 ..... ”此錯誤,可能是因?yàn)殚w下輸入的文件路徑出現(xiàn)錯誤造成,注意不要把D://RMI/RemotingService/src>javac rmi/remotingservice/Program.java寫錯為D://RMI/RemotingService/src>javac rmi.remotingservice.Program.java
  3. 在調(diào)用D://RMI/RemotingService/bin>java rmi/remotingservice/Program命令時(shí)出現(xiàn)“Exception in thread 'main' java.lang.NoClassEdfoundError”錯誤,第一這可能是閣下把Program錯寫為Program.class,注意java命令不需要加后綴名。第二可能是閣下把“java rmi/remotingservice/Program”錯寫為“java rmi/remotingservice/Program"。

原代碼下載

 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
javac不是內(nèi)部命令和外部命令
如何徹底卸載JDK和配置jdk環(huán)境變量
JDK PATH 和 CLASSPATH環(huán)境變量的作用及其配置
Java開發(fā)學(xué)習(xí)之RMI體系結(jié)構(gòu)有哪幾層?
Java遠(yuǎn)程通訊可選技術(shù)及原理
rmi入門教程,簡單明了(轉(zhuǎn))
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服