RMI(Remote Method Invocation)

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/rmi/hello/hello-world.html

  • RMIについて

http://ash.or.jp/java/rmi.htm

  • RMIによるクラスのダウンロード

http://ash.or.jp/java/rmi_codebase.htm

  • スタブ不要なRMI

http://www.02.246.ne.jp/~torutk/javahow2/rmi_nostub.html

  • Java Remote Method Invocation:目次

http://java.sun.com/j2se/1.5.0/ja/docs/ja/guide/rmi/spec/rmiTOC.html

http://www.hellohiro.com/rmi.htm

ビルド手順

% javac *.java
% rmic helloObj
% cat > java.policy
grant {
  permission java.security.AllPermission;
};

実行手順

  • サーバ側
% rmiregistry &
% java -Djava.security.policy=java.policy helloServer
  • クライアント側
% java -Djava.security.policy=java.policy helloClient

サーバ側とクライアント側両方でセキュリティポリシーの指定が必要なのは納得いかないけど、こうしないと動かなかった。

環境

% java -version
java version "1.4.2_02"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_02-b03)
Java HotSpot(TM) Client VM (build 1.4.2_02-b03, mixed mode)

なので、リモートオブジェクトのコンパイルが必要(ビルド手順の2番目)。

まとめ

RPCから派生してRMIについて調べたけど、RMIの方はJava言語の実装にべったりなので、今考えている、プラットフォーム独立かつ言語独立なオブジェクトのやりとりという目的にはあまり向いてなさそう。すべてをJavaでやるなら透過的に扱えて便利なんだけど。