1章.分散オブジェクトシステムdRuby
本編「1章.分散オブジェクトシステムdRuby」に入ります。ふむふむ、dRubyは“分散オブジェクトシステム”というものであると。
- 今までになかったのか
- dRubyはどうすごいのか
- 対象をRubyに限定している
- 100%Rubyで書かれている
- IDL不要
- どこかにRMIレジストリサーバーを立てる(rmiregistry)
- ポリシーファイルを作る(java.policy)
- リモートオブジェクトを提供するプロセスやリモートオブジェクトを使うプロセスを動かす
- 共有するオブジェクト(のクラス)は、java.rmi.Remoteインタフェースを継承したインタフェースをインプリしていること
- 共有するオブジェクト(のクラス)のメソッドにjava.rmi.RemoteExceptionというチェック例外を定義しておくこと
- 共有するオブジェクト(のクラス)のスタブ(など)を予め作成しておくこと(rmic)※この手順はJava5以上だと動的プロキシを使うため要らないっぽい
- リモートオブジェクトを提供するプロセスやリモートオブジェクトを使うプロセスを動かす
では分散オブジェクトシステムって何だ、今までになかったのか、と言う疑問がわきますが、それは「1.2 RPCとRMI」付近に書かれています。図があってわかりやすいです。なるほど、RPCは外部へ呼び出しを委譲するだけで状態を持たないということかしら。それがRMIとかだと、ライフサイクルの長いオブジェクトが扱えるということですね。で、分散オブジェクトシステムとはRMIのようなものだということか。ということで「1.4」「1.5」あたりへ読み進める。
1.5 dRubyの特徴
プロセス間のやり取りに、OSに依存する仕組みを使わずRubyで実装しているのでRubyが動く環境であればどこでも動くと言うことがすごいのかな。で、IDL不要と。
Rubyの変数には型がなく、継承関係を利用した代入原則がありません1.5.2 Rubyの特徴そのままに
対偶ぽくすると、“JavaやC++の変数には型があり、継承関係を利用した代入原則があります”とも言いかえられそう。「継承関係を利用した代入原則」とは、変なもの{を|に}入れるとClassCast例外が出るアレのことですねおそらく。変数に型があると、任意のものを何でも入れられるわけではないし、型を知らないものは使えない。と言うことだと思いました。対して、変数に型がない場合は何でも使えるようになるのでIDLも要らなくなるということですね。で、dRubyはそっち系だということか。
そういえば、Java RMIで、とりあえずやってみる手順としては
となりますが、それほど面倒ではないと思います。私はこの手順くらいなら許容できます。しかし、RMIでは共有しようとするオブジェクト(のクラス)に対して以下のような制限があります
これは面倒な気がします。転じて、dRubyの場合、
という手順のみでいけるということか。えらく楽ですね。リモートオブジェクトの場を提供するプロセスが、扱うオブジェクトの型を知らなくてもいいと言う点が楽にしているのかな、と言う理解で1章は終了。
「1.5.3 参照渡し/値渡し」は、もうちょっと後のページで解説されるみたいなので、ここではさらっと読むだけにします。
次は2章、いよいよコーディング。