JavaでRMIする際の手順と注意点をいくつか。
作成時の手順と注意
1. RMIインタフェースの作成
java.rmi.Remote のインタフェースを継承した独自インタフェースを作成する。呼び出す対象のメソッドは、java.rmi.RemoteException 例外のスローを宣言しなければならない。
2. サーバの作成
サーバ側では、java.rmi.server.UnicastRemoteObject クラスを継承したクラスを用意して、以下の2つのことを行う。適宜例外はキャッチすること。
2-1. セキュリティマネージャのセット
if (System.getSecurityManager() == null) { System.setSecurityManager(new java.rmi.RMISecurityManager()); }
2-2. ネーミングサービスへの登録
Naming.rebind("//アドレス/オブジェクト名", UnicastRemoteObjectの子クラスのインスタンス);
3. クライアントの作成
サーバ同様、以下の2つの手順を行う。
3-1. セキュリティマネージャのセット
if (System.getSecurityManager() == null) { System.setSecurityManager(new java.rmi.RMISecurityManager()); }
3-2. ネーミングサービスからの(スタブ)オブジェクトの取得
MyRMIInterface obj = (MyRMIInterface) Naming.lookup(Naming.rebind("//アドレス/オブジェクト名"); メソッドの呼び出しは、インタフェースに対して普通に行う。
4. コンパイルとスタブファイルの生成
javacでコンパイル後に、rmic でスタブファイルを生成する。ビルド先の設定はない場合にはなしで良い。
- javac -d [ビルド先] [Javaソースファイル]
- rmic -d [ビルド先] -cp [ビルド先] [パッケージ名を含めたクラス名]
実行時の手順と注意
1. セキュリティポリシーの設定
/Library/Java/Home/lib/security/java.policy を修正して、適切なポリシーを設定する。ローカルネットで簡単にテストしたいだけであれば、
grant { permission java.security.AllPermission; };
を最後に追加しておくだけで良い。なお、Windows 2000 では、C:\Documents and Settings[アカウント名].java.policy に(なければコマンドプロンプトから作成)同様の記述を行う。
2. rmiregistry の実行
rmiregistry 実行時にはクラスパスを指定してやる必要がある。
rmiregistry -J-cp -J[対象のパス]
として起動する。
3. サーバの起動
これはまあ普通に起動するだけ。
4. クライアントの起動
これもまあ普通に起動するだけ。
コメントを書く