RMI調用模版[轉載]

1. 定義遠程接口 

// 遠程接口繼承自Remote<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

// 遠程方法的傳入參數和返回值必須是自然類型(intfloatboolean等)

// 或者實現了SerializableRemote接口的對象。

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 "<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />12:04:27";

    }

 

    // 啓動服務:

    public static void main(String[] args) throws Exception {

        // 可以手動啓動RMI Registry,也可以在程序中啓動:

        java.rmi.registry.LocateRegistry.createRegistry(1099);

        // 綁定名字服務,地址是本地計算機名或本機IP,默認端口是1099

        java.rmi.Naming.bind("//localhost:1099/servicename", new TimeImpl());

        // 如果沒有異常拋出,則綁定成功。

        // 如果名字已經被綁定,可以用Naming.rebind()替換掉已綁定的服務。

    }

}

 

3. 編譯生成樁和框架 

運行rmic TimeImpl,生成TimeImpl_Skel.classTimeImpl_Stub.class

 

4. 客戶端

// 客戶端文件包含客戶端代碼Client.class,遠程接口Time.class

// rmic生成的支持類TimeImpl_Skel.classTimeImpl_Stub.class

public static void main(String[] args) throws Exception {

    // 客戶端通過IP引用服務器端的遠程對象,因此可以動態選擇服務器。

    // 如果不指定端口,默認端口號是1099

    Time time = (Time)java.rmi.Naming.lookup("//localhost:1099/servicename");

    System.out.println(time.getTime());

}


來源:http://blog.csdn.net/asklxf/archive/2004/07/04/33533.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章