RMIはhttps://en.wikipedia.org/wiki/Java

remote

method__invocation[Remote Method Invocation]の略で、RPC(Remote Procedure Calls)と同等のオブジェクト指向です。 RMIは、オブジェクト指向モデルを使用してアプリケーション間のやりとりを行い、異なるマシン上で動作するように設計されています。スタンドアロンプ​​ログラムのように見えます。

以下のコードは、Server-Client通信モデルの非常に簡単な例を使ってJava RMIの基礎を提供します。

1.リモートインタフェース

最初に設計する必要があるのは、サーバーとクライアントの両方が実装する「リモート」インターフェースです。

Interface`は常にpublicで、

Remote`を拡張する必要があります。

Remote`インターフェースに記述されているすべてのメソッドは、それらのthrows節に

RemoteException`をリストしなければなりません。

私たちの `RMIInterface`には1つのメソッドしかありません。 Stringパラメータを受け取り、Stringを返します。

RMIInterface.java

package com.techfou.rmiinterface;

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface RMIInterface extends Remote {

    public String helloTo(String name) throws RemoteException;

}

2.サーバー

私たちのサーバは

UnicastRemoteObject`を拡張し、以前に作った

Interface`を実装しています。 mainメソッドでは、ローカルホスト上のサーバーを “MyServer”という名前でバインドします。

ServerOperation.java

package com.techfou.rmiserver;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

import com.mkyong.rmiinterface.RMIInterface;

public class ServerOperation extends UnicastRemoteObject implements RMIInterface{

    private static final long serialVersionUID = 1L;

    protected ServerOperation() throws RemoteException {

        super();

    }

    @Override
    public String helloTo(String name) throws RemoteException{

        System.err.println(name + " is trying to contact!");
        return "Server says hello to " + name;

    }

    public static void main(String[]args){

        try {

            Naming.rebind("//localhost/MyServer", new ServerOperation());
            System.err.println("Server ready");

        } catch (Exception e) {

            System.err.println("Server exception: " + e.toString());
            e.printStackTrace();

        }

    }

}

3.クライアント

最後に、クライアントを作成します。サーバを「見つける」ために、クライアントはパラメータとして渡す名前に関連付けられたリモートオブジェクトの参照を「調べる」RMIInterfaceオブジェクトを使用します。その `RMIInterface`オブジェクトを使用して、サーバーと通信して応答を受け取ることができます。

ファイル:ClientOperation.java

package com.mkyong.rmiclient;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

import javax.swing.JOptionPane;

import com.mkyong.rmiinterface.RMIInterface;

public class ClientOperation {

    private static RMIInterface look__up;

    public static void main(String[]args)
        throws MalformedURLException, RemoteException, NotBoundException {

        look__up = (RMIInterface) Naming.lookup("//localhost/MyServer");
        String txt = JOptionPane.showInputDialog("What is your name?");

        String response = look__up.helloTo(txt);
        JOptionPane.showMessageDialog(null, response);

    }

}

4.それを実行する方法

4.1お気に入りのIDEで3つのJavaファイルを作成するか、以下のコードをダウンロードしてください。以下のようにソースフォルダに移動します。


java-rmi-hello-9a

4.2最初にやるべきことは、ソースをコンパイルすることです。以下のコードをダウンロードした場合や、ディレクトリにコマンドウィンドウを開いて実行した場合は、 `compileEverything.bat`を実行してください:

ターミナル

javac src/com/mkyong/rmiinterface/RMIInterface.java src/com/mkyong/rmiserver/ServerOperation.java src/com/mkyong/rmiclient/ClientOperation.java

4.3ソースがそれぞれのディレクトリにアクセスしてコンパイルされていることを確認します。


java-rmi-hello-9b

4.4次にrmiregistryを開始する必要があります。もう一度 `startServer.bat`を実行するか、コマンドウィンドウを開いて次のコマンドを実行してください:

ターミナル

cd src
start rmiregistry
java com.mkyong.rmiserver.ServerOperation


java-rmi-hello-9c

4.5 RmiRegistryが正常に起動した場合は、次のような別のウィンドウが表示されます。


java-rmi-hello-9d

4.6クライアントを実行する準備ができました:

新しいコマンドプロンプトウィンドウを開くか(ダウンロードしたファイルから `runClient.bat`を実行してください)、これを実行してください:

ターミナル

cd src
java com.mkyong.rmiclient.ClientOperation

`ClientOperation`が実行され、入力を求められます:


java-rmi-hello-9e

入力欄に名前を入力し(例: “Marilena”)、 “OK”をクリックします。

4.7サーバー側では、これを見ることができます:


java-rmi-hello-9f

4.8クライアント側では、これは:


java-rmi-hello-9g

4.9クライアントは、交換が終了した後にサーバが閉じたままで終了し、クライアントファイルを再度実行すると再び通信することができます。実際には、クライアントを再度実行し、


java-rmi-hello-9h

サーバー:


java-rmi-hello-9i

クライアント:


java-rmi-hello-9j

ソースコードをダウンロードする

ダウンロードする –

SimpleRmiExample.zip

(4 KB)

参考文献

リンク://タグ/java/[java]リンク://タグ/rmi/[rmi]リンク://タグ/rpc/[rpc]