java_rmi初試驗
最近不知道咋的,學習精神很佳,學習了一下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 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;
}
* @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
{
public static void main(String []args) throws RemoteException,Exception
{
//下面這個是 注冊1099,不然還要生成stub,等2個文件,要用的jdk自帶的 rmic命令生成,但是我試驗沒成功
stub,就像兩個proxy文件,客戶端從是和stub文件通信,再調服務端
stub,就像兩個proxy文件,客戶端從是和stub文件通信,再調服務端
LocateRegistry.createRegistry(1099);
ServiceRmi service=new ServiceRmiImpl();
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());
}
}
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 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!