1. 程式人生 > >Java遠端方法呼叫,RMI入門教程

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.