Java-rmi-application
Java RMIアプリケーション
RMI Javaアプリケーションを作成するには、以下に示す手順に従う必要があります-
- リモートインターフェイスを定義する
- 実装クラス(リモートオブジェクト)を開発する
- サーバープログラムを開発する
- クライアントプログラムを開発する
- アプリケーションをコンパイルする
- アプリケーションを実行する
リモートインターフェイスの定義
リモートインターフェイスは、特定のリモートオブジェクトのすべてのメソッドの説明を提供します。 クライアントはこのリモートインターフェイスと通信します。
リモートインターフェイスを作成するには-
- パッケージに属する事前定義されたインターフェース Remote を拡張するインターフェースを作成します。
- このインターフェイスでクライアントが呼び出すことができるすべてのビジネスメソッドを宣言します。
- リモート呼び出し中にネットワークの問題が発生する可能性があるため、 RemoteException という名前の例外が発生する場合があります。投げて。
以下は、リモートインターフェイスの例です。 ここでは、 Hello という名前のインターフェイスを定義し、* printMsg()*というメソッドを持っています。
import java.rmi.Remote;
import java.rmi.RemoteException;
//Creating Remote interface for our application
public interface Hello extends Remote {
void printMsg() throws RemoteException;
}
実装クラスの開発(リモートオブジェクト)
前の手順で作成したリモートインターフェイスを実装する必要があります。 (実装クラスを個別に記述するか、サーバープログラムにこのインターフェイスを直接実装させることができます。)
実装クラスを開発するには-
- 前の手順で作成したインターフェイスを実装します。
- リモートインターフェイスのすべての抽象メソッドに実装を提供します。
以下は実装クラスです。 ここでは、 ImplExample という名前のクラスを作成し、前の手順で作成したインターフェイス Hello を実装し、メッセージを出力するこのメソッドに body を提供しました。
//Implementing the remote interface
public class ImplExample implements Hello {
//Implementing the interface method
public void printMsg() {
System.out.println("This is an example RMI program");
}
}
サーバープログラムの開発
RMIサーバープログラムは、リモートインターフェイスを実装するか、実装クラスを拡張する必要があります。 ここで、リモートオブジェクトを作成し、それを RMIregistry にバインドする必要があります。
サーバープログラムを開発するには-
- リモートオブジェクトを呼び出すクライアントクラスを作成します。
- 以下に示すように実装クラスをインスタンス化することにより、リモートオブジェクトを作成します。
- パッケージ java.rmi.server に属する UnicastRemoteObject という名前のクラスのメソッド* exportObject()*を使用して、リモートオブジェクトをエクスポートします。
- パッケージ java.rmi.registry に属する LocateRegistry クラスの* getRegistry()*メソッドを使用して、RMIレジストリを取得します。
- Registry という名前のクラスの* bind()*メソッドを使用して、作成されたリモートオブジェクトをレジストリにバインドします。 このメソッドには、バインド名とエクスポートされたオブジェクトを表す文字列をパラメーターとして渡します。
以下は、RMIサーバープログラムの例です。
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class Server extends ImplExample {
public Server() {}
public static void main(String args[]) {
try {
//Instantiating the implementation class
ImplExample obj = new ImplExample();
//Exporting the object of implementation class
//(here we are exporting the remote object to the stub)
Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);
//Binding the remote object (stub) in the registry
Registry registry = LocateRegistry.getRegistry();
registry.bind("Hello", stub);
System.err.println("Server ready");
} catch (Exception e) {
System.err.println("Server exception: " + e.toString());
e.printStackTrace();
}
}
}
クライアントプログラムの開発
その中にクライアントプログラムを記述し、リモートオブジェクトをフェッチし、このオブジェクトを使用して必要なメソッドを呼び出します。
クライアントプログラムを開発するには-
- リモートオブジェクトを呼び出すつもりのクライアントクラスを作成します。
- パッケージ java.rmi.registry に属する LocateRegistry クラスの* getRegistry()*メソッドを使用して、RMIレジストリを取得します。
- パッケージ java.rmi.registry に属するクラス Registry のメソッド* lookup()*を使用して、レジストリからオブジェクトを取得します。 +このメソッドには、バインド名を表す文字列値をパラメーターとして渡す必要があります。 これにより、リモートオブジェクトが返されます。
- lookup()は、リモートタイプのオブジェクトを返し、それをHelloタイプにダウンキャストします。
- 最後に、取得したリモートオブジェクトを使用して必要なメソッドを呼び出します。
次に、RMIクライアントプログラムの例を示します。
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
public class Client {
private Client() {}
public static void main(String[] args) {
try {
//Getting the registry
Registry registry = LocateRegistry.getRegistry(null);
//Looking up the registry for the remote object
Hello stub = (Hello) registry.lookup("Hello");
//Calling the remote method using the obtained object
stub.printMsg();
//System.out.println("Remote method invoked");
} catch (Exception e) {
System.err.println("Client exception: " + e.toString());
e.printStackTrace();
}
}
}
アプリケーションのコンパイル
アプリケーションをコンパイルするには-
- リモートインターフェイスをコンパイルします。
- 実装クラスをコンパイルします。
- サーバープログラムをコンパイルします。 *クライアントプログラムをコンパイルします。
Or,
すべてのプログラムを保存したフォルダーを開き、以下に示すようにすべてのJavaファイルをコンパイルします。
Javac* .java
アプリケーションの実行
ステップ1 *-次のコマンドを使用して *rmi レジストリを起動します。
start rmiregistry
これにより、以下に示すように、別のウィンドウで rmi レジストリが開始されます。
- ステップ2 *-以下に示すようにサーバークラスファイルを実行します。
Java Server
- ステップ3 *-以下に示すようにクライアントクラスファイルを実行します。
java Client
検証-クライアントを起動するとすぐに、サーバーに次の出力が表示されます。