Java入門-簡単なRMI例
3037 ワード
RMIは、ある仮想マシン上のアプリケーションに、ネットワーク上の別のJVM上にあるオブジェクトメソッドの呼び出しを要求させるためにRMIを使用する分散技術です.これは、アプリケーションを分散的に導入することが可能になりました.RMIの2つのコアはSkeletonとStubです.
Skeletonはサーバ側にあるプログラムのみで,クライアントからの要求データを受け取り,サーバ側の業務処理プログラムに渡し,最後に処理結果をクライアントに返す.
Stubはクライアントからサーバ側に関連データを送信する責任を負う.
RMIアプリケーションの開発には、次のステップが必要です.
リモートインタフェースの定義:javaから継承する.rmi.Remote定義アプリケーションインタフェース:IAppInterface サービス側オブジェクトの実装:javaから継承する必要がある.rmi.UnicastRemoteObjectは、定義されたインタフェースIAppINterfaceのメソッドを実装する.
RMI登録サービスを開始
start rmiregistryを実行してRMI登録サービスを起動する
サービス側プログラムを起動し、RMIレジストリに登録するクライアントプログラムの開発と実行
プログラムでjavaを実行する.rmi.registry.LocateRegistryのcreateRegistry(int port)メソッドはRMI登録サービスの起動を完了する.
java.rmi.registry.Registryインタフェースは、RMIレジストリへのアクセスを実現するためのいくつかの方法を提供します(JNDIネーミングスペースを操作するjavax.naming.Contextインタフェースと同様です).
void bind(String name,java.rmi.Remote obj):objオブジェクトをRMIレジストリにバインドし、キー値はname です.
void rebind(String name,java.rmi.Remote obj):キー値がnameのRMIレジストリバインド関係を書き換え、objをRMIレジストリにバインドし、キー値がname である
java.rmi.Remote lookup(String name):RMIレジストリでキー値nameに基づいてオブジェクトを検索し、を返します.
void unbind(String name):キー値がnameのオブジェクトのRMIバインド関係を解除する例:1、リモートインタフェースの定義
2、リモートサービスの実現
3、クライアントプログラムの開発と実行
Skeletonはサーバ側にあるプログラムのみで,クライアントからの要求データを受け取り,サーバ側の業務処理プログラムに渡し,最後に処理結果をクライアントに返す.
Stubはクライアントからサーバ側に関連データを送信する責任を負う.
RMIアプリケーションの開発には、次のステップが必要です.
リモートインタフェースの定義:javaから継承する.rmi.Remote定義アプリケーションインタフェース:IAppInterface サービス側オブジェクトの実装:javaから継承する必要がある.rmi.UnicastRemoteObjectは、定義されたインタフェースIAppINterfaceのメソッドを実装する.
RMI登録サービスを開始
start rmiregistryを実行してRMI登録サービスを起動する
サービス側プログラムを起動し、RMIレジストリに登録するクライアントプログラムの開発と実行
プログラムでjavaを実行する.rmi.registry.LocateRegistryのcreateRegistry(int port)メソッドはRMI登録サービスの起動を完了する.
java.rmi.registry.Registryインタフェースは、RMIレジストリへのアクセスを実現するためのいくつかの方法を提供します(JNDIネーミングスペースを操作するjavax.naming.Contextインタフェースと同様です).
void bind(String name,java.rmi.Remote obj):objオブジェクトをRMIレジストリにバインドし、キー値はname です.
void rebind(String name,java.rmi.Remote obj):キー値がnameのRMIレジストリバインド関係を書き換え、objをRMIレジストリにバインドし、キー値がname である
java.rmi.Remote lookup(String name):RMIレジストリでキー値nameに基づいてオブジェクトを検索し、を返します.
void unbind(String name):キー値がnameのオブジェクトのRMIバインド関係を解除する例:1、リモートインタフェースの定義
package org.eone.test.rmi;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface IWeather extends Remote{
public String getWeather(String city) throws RemoteException;
}
2、リモートサービスの実現
package org.eone.test.rmi;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
public class WeatherImpl extends UnicastRemoteObject implements IWeather{
public WeatherImpl() throws RemoteException{
}
public String getWeather(String city){
return city + " : is Sunny...";
}
public static void main(String[] args){
try{
Registry registry = LocateRegistry.createRegistry(1099);
registry.bind("/weather", new WeatherImpl());
System.out.println(" ...");
}catch(Exception e){
System.out.println(" ...");
}
}
}
3、クライアントプログラムの開発と実行
package org.eone.test.rmi;
import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry;
public class WeatherClient{
public static void main(String[] args){
try{
Registry registry = LocateRegistry.getRegistry("127.0.0.1", 1099);
IWeather stub = (IWeather)registry.lookup("/weather");
String result = stub.getWeather("SHANGHAI");
System.out.println(result);
}catch(Exception e){
e.printStackTrace();
}
}
}