Java RMI 簡明教程
阿新 • • 發佈:2019-01-12
1、寫介面:
package rmi.server;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface MyRemote extends Remote {
String doSomeThingA() throws RemoteException;
String doSomeThingB() throws RemoteException;
}
2、寫實現類:
package rmi.server; import java.rmi.Naming; import java.rmi.RemoteException; import java.rmi.server.UnicastRemoteObject; public class MyRemoteImpl extends UnicastRemoteObject implements MyRemote { private static final long serialVersionUID = 1L; private String string; public MyRemoteImpl() throws RemoteException { string = "" + System.currentTimeMillis(); } @Override public String doSomeThingA() { return "A:" + string; } @Override public String doSomeThingB() { return "B:" + string; } public static void main(String[] args) throws Exception { MyRemote myRemote = new MyRemoteImpl(); Naming.bind("myRemote", myRemote); } }
3、生成stub
在命令列進入class檔案所在的根目錄,比如我機器上的對應目錄是:
D:\workspace\youbang\rmi_server\build\classes
注意,要進入根包所在目錄,而不是進入MyRemoteImpl.class所在的目錄。
在這個目錄下執行命令:
rmic rmi.server.MyRemoteImpl
進入目錄D:\workspace\youbang\rmi_server\build\classes\rmi\server,會發現多出一個.class檔案:MyRemoteImpl_Stub.class
4、執行註冊命令(目錄不變)
rmiregistry
5、執行rmi.server.MyRemoteImpl:
java rmi.server.MyRemoteImpl
這樣,RMI的服務端就執行起來了。
6、寫一個客戶端程式呼叫一下試試:
package rmi.server; import java.rmi.Naming; public class Test { public static void main(String[] args) throws Exception { MyRemote myRemote = (MyRemote) Naming.lookup("rmi://127.0.0.1/myRemote"); System.out.println(myRemote.doSomeThingA()); System.out.println(myRemote.doSomeThingB()); } }
執行結果:
A:1547025085428
B:1547025085428
寫在末尾:
值得一提的是,MyRemote.java類中所有方法的引數和返回值要麼是原始型別,要麼是可序列化型別。另外,在執行MyRemoteImpl之前,要先執行rmiregistry命令。