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

Java遠程方法調用RMI

2013-11-23 19:13:54  來源: Java核心技術 

  前段時間公司做web service的時候看了一下資料當時看見一個叫rmi的東西(遠程方法調用)最近閒著所以看了一下 感覺挺簡單的!所以寫了一個例子提供給大家把!

  rmi的服務端必須要使用接口同時還有接口的實現類!所以下面的兩個文件是接口類和接口的實現類!

  UserDao 接口

  /** * 遠程接口     必須繼承與Remote對象* @author spring sky * date * Email * QQ */ public interface UserDao extends Remote{ /** * 簡單的測試方法* @param name */ public void sayName(String name) throws RemoteException} UserDaoImpl實現類

  /** * *  接口的實現類    必須繼承UnicastRemoteObject(單一遠程對象)   實現UserDao自己的接口* @author spring sky * date * Email * QQ */ public class UserDaoImpl extends UnicastRemoteObject implements UserDao { public UserDaoImpl() throws RemoteException { } @Override public void sayName(String name) { if(name!=null&&!nameequals())

  { Systemoutprintln(我的名字是+name)}else{ Systemerrprintln(名字不為空……}對外的提供一個服務服務中已經共享了url給外界訪問

  /** * 使用main方法啟動一個服務用於外界環境訪問* @author spring sky * date * Email * QQ */ public class StartService { private static final String IP = private static final int PORT = private static final String REMOTE_NAME = userDaoprivate static final String REMOTE_URL = rmi://+IP++PORT+/+REMOTE_NAMEpublic static void main(String[] args) { try { UserDao userDao = new UserDaoImpl()    //實例化對象LocateRegistrycreateRegistry(PORT)    //注冊端口Namingbind(REMOTE_URL userDao)       //綁定遠程服務對象Systemoutprintln(遠程+REMOTE_NAME+啟動成功……} catch (RemoteException e) { Systemerrprintln(遠程對象出錯eprintStackTrace()} catch (MalformedURLException e) { Systemerrprintln(URL出錯了eprintStackTrace()} catch (AlreadyBoundException e) { Systemerrprintln(綁定的對象已經存在了eprintStackTrace()}

  上面是服務端的代碼如果啟動沒有任何問題就可以做客戶端訪問了其實客戶端的訪問更加的簡單只需要遠程的接口類和查詢rmi中的url就可以了!

  代碼如下

  /** * 遠程方法調用測試* @author spring sky * date * Email * QQ * name石明政*/ public class TestRemote { public static void main(String[] args) { try { //在rmi服務中查詢userdao的對象UserDao userDao = (UserDao) Naminglookup(rmi:///userDao//調用遠程服務的方法userDaosayName(spring sky} catch (MalformedURLException e) { Systemerrprintln(URL出錯eprintStackTrace()} catch (RemoteException e) { Systemerrprintln(遠程對象出錯eprintStackTrace()} catch (NotBoundException e) { Systemerrprintln(沒有找到綁定的對象eprintStackTrace()}


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