Java遠端方法呼叫,RMI入門教程
、什麼是RMI
Java遠端方法呼叫,即Java RMI(Java Remote Method Invocation)是Java程式語言裡,一種用於實現遠端過程呼叫的應用程式程式設計介面。它使客戶機上執行的程式可以呼叫遠端伺服器上的物件。遠端方法呼叫特性使Java程式設計人員能夠在網路環境中分佈操作。RMI全部的宗旨就是儘可能簡化遠端介面物件的使用。
Java RMI極大地依賴於介面。在需要建立一個遠端物件的時候,程式設計師通過傳遞一個介面來隱藏底層的實現細節。客戶端得到的遠端物件控制代碼正好與本地的根程式碼連線,由後者負責透過網路通訊。這樣一來,程式設計師只需關心如何通過自己的介面控制代碼傳送訊息。
介面的兩種常見實現方式是:最初使用JRMP(Java Remote Message Protocol,Java遠端訊息交換協議)實現;此外還可以用與CORBA相容的方法實現。RMI一般指的是程式設計介面,也有時候同時包括JRMP和API(應用程式程式設計介面),而RMI-IIOP則一般指RMI介面接管絕大部分的功能,以支援CORBA的實現。
最初的RMI API設計為通用地支援不同形式的介面實現。後來,CORBA增加了傳值(pass by value)功能,以實現RMI介面。然而RMI-IIOP和JRMP實現的介面並不完全一致。
二、基本原理
要實現網路機器間的通訊,首先得來看看計算機系統網路通訊的基本原理,在底層層面上來看,網路通訊需要做的就是將流從一臺計算機傳輸到另一臺計算機,基於傳輸協議和網路IO來實現,其中傳輸協議比較出名的有HTTP、TCP、UDP等等,HTTP、TCP、UDP都是基於sokect概念上為某種應用場景而擴展出的傳輸協議,網路IO,主要有bio、nio、aio三種方式,所有的分散式應用通訊都是基於這個原理而實現的,只是為了應用的易用,各種語言通常都會提供一些更為貼切應用易用的應用層協議。
三、開發步驟
1、建立遠端介面(須繼承 java.rmi.Remote介面);
2、實現遠端介面(須繼承 java.rmi.server.UnicastRemoteObject類);
3、生成Stub和Skeleton;
4、啟動RMI註冊服務;
5、啟動遠端服務;
6、客戶端查詢遠端物件,並呼叫遠端方法;
四、例項程式碼清單
1、建立遠端介面,繼承java.rmi.Remote介面
01.
1
package
com.cnblogs.javalouvre.service;
02.
2
03.
3
import
java.rmi.RemoteException;
04.
4
05.
5
public
interface
GreetService
extends
java.rmi.Remote
{
06.
6
07.
7
String
sayHello(String name)
throws
RemoteException;
08.
8
09.
9
}
2、實現遠端介面,繼承 java.rmi.server.UnicastRemoteObject類
01.
1
package
com.cnblogs.javalouvre.service;
02.
2
03.
3
import
java.rmi.RemoteException;
04.
4
05.
5
public
class
GreetServiceImpl
extends
java.rmi.server.UnicastRemoteObject
implements
GreetService
{
06.
6
07.
7
private
static
final
long
serialVersionUID
= 3434060152387200042L;
08.
8
09.
9
public
GreetServiceImpl()
throws
RemoteException
{
10.
10
super
();
11.
11
}
12.
12
13.
13
@Override
14.
14
public
String
sayHello(String name)
throws
RemoteException
{
15.
15
return
"Hello
"
+
name;
16.
16
}
17.
17
18.
18
}
3、生成Stub和Skeleton;
要生成Stub和Skeleton,首先需要編譯上述原始檔得到類檔案,然後執行rmic命令,具體如下
1.
[root
@oracle
~]#javac
-source
1.6
-target
1.6
-d
. *.java
2.
[root
@oracle
~]#rmic
com.cnblogs.javalouvre.service.GreetServiceImpl
4、註冊服務
註冊服務執行rmiregistry命令,如下
1.
[root
@oracle
~]#rmiregistry
5、啟動服務
01.