java_rmi初試驗

chyx413332087 13年前發布 | 1K 次閱讀
   最近不知道咋的,學習精神很佳,學習了一下java_rmi,學的不是很深,自己動手寫了小程序,
實現的功能 是在本機  編寫rmi服務端 和客戶端 ,然后運行,看看運行效果
rmi:遠程調用方法,rmi本質上也是sock通信哦,這個看jdk源碼就知道
實現rmi,分下面幾步
rmi接口,要extends jdk中的 Remote 接口,extends 接口Remote的類就是遠程的服務接口,
對遠程服務接口的實現 ,就是我們調的遠程服務接口了哦,但是 要extends  UnicastRemoteObject 類,為什么呢你,看jdk源碼知道,UnicastRemoteObject   類幫我們實現了Remote需要的一些機制,
      看服務端的代碼:
繼承遠程接口:
     public interface ServiceRmi  extends Remote{
      public String getName() throws RemoteException;     
      public Object getObject() throws RemoteException;
}
   對遠程接口的實現:
public class ServiceRmiImpl extends UnicastRemoteObject implements ServiceRmi {
 
 int i=0;
 int j=0; 
 public ServiceRmiImpl()  throws RemoteException
 {  
 }
 
 /**  
  * @Function: ServiceRmiImpl.java
  * @Description: 該函數的功能描述
  *
  * @return
  * @throws RemoteException
  * @return:返回結果描述
  * @throws:異常描述
  *
  * @version: v1.0.0
  * @author: 浪子
  * @date: 2011-8-19 下午04:56:52
  *
  * Modification History:
  * Date         Author          Version            Description
  *---------------------------------------------------------*
  * 2011-8-19     浪子           v1.0.0               修改原因
  */
 public String getName() throws RemoteException {
   System.out.print("call this getName");
    i=i+1;  
  System.out.print("call this getName="+i); 
  return "testName";
 }
 /**  
  * @Function: ServiceRmiImpl.java
  * @Description: 該函數的功能描述
  *
  * @return
  * @throws RemoteException
  * @return:返回結果描述
  * @throws:異常描述
  *
  * @version: v1.0.0
  * @author: 浪子
  * @date: 2011-8-19 下午04:56:52
  *
  * Modification History:
  * Date         Author          Version            Description
  *---------------------------------------------------------*
  * 2011-8-19     浪子           v1.0.0               修改原因
  */
 public Object getObject() throws RemoteException {  
   Object o=new Object();  
  return o;
 }
 
服務端啟動:
public class Service {
 public static void main(String []args) throws RemoteException,Exception
 {
//下面這個是 注冊1099,不然還要生成stub,等2個文件,要用的jdk自帶的 rmic命令生成,但是我試驗沒成功
stub,就像兩個proxy文件,客戶端從是和stub文件通信,再調服務端
  LocateRegistry.createRegistry(1099);
    ServiceRmi service=new ServiceRmiImpl();
下面這個是用的jdk中的Naming,綁定url,和Remote對象
url: 是IP地址加上端口號加上服務名 ,默認的端口是1099
  Naming.rebind("http://127.0.0.1/service", service);  
 } 
}
客戶端調用:
public class ClientRmi  { 
 public static void main(String []args) throws Exception
 {
  String name="http://127.0.0.1:1099/service";
  //服務端注冊了name,在客戶端查出來
    ServiceRmi service=(ServiceRmi)Naming.lookup(name);
    System.out.println(service.getName());   
 }
}
 
就這樣實現了遠程調用,從代碼反應來看,客戶端調用,就像是在本地調用一樣,
但是rmi  只能和java進行通信,比如1個平臺是 C++寫的,就有力不從心了哦,那就只能用webService,或者cobar ,
 

 
 
 
 
 

 
 
 
 

 
         
 本文由用戶 chyx413332087 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!