RMI調用模版
1. 定義遠程接口
// 遠程接口繼承自Remote
// 遠程方法的傳入參數和返回值必須是自然類型(int,float,boolean等)
// 或者實現了Serializable或Remote接口的對象。
public interface Time extends java.rmi.Remote {
// 遠程方法必須拋出RemoteException:
public String getTime() throws RemoteException;
}
2. 定義實現類
// 注意:實現類繼承自UnicastRemoteObject和自定義的遠程接口Time:
public class TimeImpl extends java.rmi.server.UnicastRemoteObject implements Time {
// 注意:由于RemoteObject構造函數要拋出RemoteException,
// 因此務必定義構造函數并拋出RemoteException:
public TimeImpl() throws RemoteException { super(); }
// 這里是遠程方法:
public String getTime() throws RemoteException {
return "
}
// 啟動服務:
public static void main(String[] args) throws Exception {
// 可以手動啟動RMI Registry,也可以在程序中啟動:
java.rmi.registry.LocateRegistry.createRegistry(1099);
// 綁定名字服務,地址是本地計算機名或本機IP,默認端口是1099:
java.rmi.Naming.bind("http://localhost:1099/servicename", new TimeImpl());
// 如果沒有異常拋出,則綁定成功。
// 如果名字已經被綁定,可以用Naming.rebind()替換掉已綁定的服務。
}
}
3. 編譯生成樁和框架
運行rmic TimeImpl,生成TimeImpl_Skel.class和TimeImpl_Stub.class。
4. 客戶端
// 客戶端文件包含客戶端代碼Client.class,遠程接口Time.class,
// 由rmic生成的支持類TimeImpl_Skel.class和TimeImpl_Stub.class:
public static void main(String[] args) throws Exception {
// 客戶端通過IP引用服務器端的遠程對象,因此可以動態選擇服務器。
// 如果不指定端口,默認端口號是1099:
Time time = (Time)java.rmi.Naming.lookup("http://localhost:1099/servicename");
System.out.println(time.getTime());
}
posted on 2005-12-02 10:34 Xuefeng's Weblog 閱讀(218) 評論(0) 編輯 收藏 所屬分類: Java Basic