??????? 眾所周之的EJB機制是建立在Java的RMI的基礎之上的,要想對EJB有深入的了解,必須掌握RMI的運行機制,在此,我說說我對RMI的一些理解,希望大家同意的和不同意的都站出來講幾句。
?????? Rmi是Java平臺上的RPC,但是由于其只支持Java,所以也就免去了程序員編寫IDL(接口定義語言)之苦。對于Java與非Java程序之間的通信,可以使用RMI-IIOP.
??????? 創建RMI遠程對象后,程序員就可以象調用本地對象那樣去調用遠程對象,其底層通信機制則完全由RMI實現,無須我們操心了。
??????? 通常,實現一個RMI系統有4個步驟:
1:定義一個remote interface.
2:?? 定義一個remote object implementation.
3:? ?定義客戶端程序。
4:編譯執行遠程對象和客戶端。
以下為代碼示例
1:Remote接口? (注意:必須extends Remote,方法必須throws RemoteException)
public?interface?RMI_Add?extends?java.rmi.Remote?{
public?long?add(long?a,?long?b,long?c)
throws?java.rmi.RemoteException;
}
2:?? remote object implementation.(注意:1:extends UnicastRemoteObject 2:構造函數內必須調用UnicastRemoteObject的構造函數,也就是執行super())
3: 定義遠程實現類,在此我把服務器的綁定一起在此類中實現,也可另外再寫一個類,實現RMI綁定。(注意:一般都用Naming.rebind(),因為rebind()可以覆蓋原有的服務名,省去不必要的麻煩。1099端口為默認,也可以不寫)
inport java.rmi.Naming;
public?class?RMI_AddImpl?extends java.rmi.server.UnicastRemoteObject implements?RMI_Add {
?public?RMI_AddImpl() throws?java.rmi.RemoteException?{
super();
}
public?long?add(long?a,?long?b,long?c?) throws?java.rmi.RemoteException?{
return?a?+?b+?c;
}
public static void main(String[] args) {
? try?{
RMI_Add?d?=?new?RMI_AddImpl();
Naming.rebind("rmi://10.7.3.168:1099/RMI_AddService",?d);
}?catch?(Exception?e)?{?}
}
}
4:編譯以上class文件(Javac)
5:?? rmic編譯服務器實現類,在此是RMI_AddImpl?。
6:rmigistry:運行RMI注冊程序.
7:? 運行客戶端代碼。