DataSpider と RMI

Avatar
dstn

DataSpider と RMI


今日は、意外と間違えがちな、DataSpiderServer と Studio をファイアウォール越しや異なるネットワーク間で使用するための RMI の設定方法を、RMIの仕組みをふまえてご紹介します。

まずは DataSpider Servista のヘルプを確認しましょう。以下の説明があります。

・server/conf/system.properties
 java.rmi.server.hostname  サーバ側マシンのホスト名またはIPアドレスを指定します。
 ds.rmi.port  サーバ/クライアントがそれぞれ使用するTCPのポート番号を指定します。
 
・client/conf/system.properties
 java.rmi.server.hostname  クライアント側マシンのホスト名を指定します。
 ds.rmi.port  サーバ/クライアントがそれぞれ使用するTCPのポート番号を指定します。

ここで注目するのが、サーバに置く設定ファイルには、サーバのホスト名またはIPアドレスを、
同様に、クライアントに置く設定ファイルには、クライアントのホスト名またはIPアドレスを、
それぞれ指定する点です。

普通はクライアントがサーバに接続しに行くので、クライアントの設定ファイルにサーバのホスト名を指定したくなりますが、逆ですね!!

RMIの仕組み


RMIの仕組みの答えは、Java の FAQ にあります。
C.1 Java RMI クライアントは、どのようにしてリモート Java RMI サーバーにコンタクトするのですか。
http://docs.oracle.com/javase/jp/7/technotes/guides/rmi/faq.html#netcontact

要点は以下の通りです。
case00
つまり、RMI サーバのホストとポートは、クライアントが指定するのではなく、サーバが自身を指定するものだったのです。

くも子 case01kumo
サーバがこの封筒をくれたクモ   サーバのアドレスはもう書いてあるし、便利そうクモ

プロパティ変更が必要ケース


では実際にこの java.rmi.server.hostname や ds.rmi.port のプロパティ設定が必要になるシチュエーションか考えてみましょう。

【ケース1】DataSpiderServer と Studio が異なるネットワークにある場合には、ルーティングがうまくいかない場合があるかもしれません。
case10
※クライアント側ルータは 10.0.0.0/8 宛先を理解できない!

くも子 case11kumo
宛先不明で戻ってきたクモ!


【ケース1解決策】このような場合には、クライアントが理解できるサーバ名を java.rmi.server.hostname に指定することで回避できます。
case12fix
※クライアント側でサーバホスト名をグローバルIPアドレスに解決できる!


【ケース2】さらに、サーバとクライアントの間にファイアウォールが設定されている場合には、通過できないかもしれません。
case20
※動的なポートppppはファイアウォールで拒否されるケースが多い!

くも子 case21kumo
宛先は合ってるのに受取拒否されたクモ!


【ケース2解決策】このような場合には、ファイアウォールを通過させる固定ポートを策定して ds.rmi.port に指定することで回避できます。
case22fix
※固定したポートはファイアウォールで許可設定しやすい!

Studio も RMIサーバ


上記ケースでは、DataSpiderServer が RMI サーバとなる状況で説明しました。
この場合には、server/conf/system.properties で設定を行います。
では、Studio 側の client/conf/system.properties にも同じ設定があるのはなぜでしょうか?
実は、DataSpider では Studio が RMI サーバとなる通信も行われているのです。
具体的には、Studioからデバッグ実行した際のログ表示や、マイプロジェクトを開く際など、いくつかの処理が該当します。
Studioにログインはできるが一部だけレスポンスが無い、遅い、という場合には、上記ケースを逆向きに考えて、Studio側のRMI サーバ設定を確認してみましょう。


くも子 case31kumo
デザイナで実行したログはすぐにほしいから、先に封筒を DataSpiderServer に渡しておくクモ

まとめ


・サーバに置く設定ファイルには、サーバのホスト名またはIPアドレス記載する。
・サーバとクライアントが異なるネットワークにある場合には java.rmi.server.hostname を変更する。
・ファイアウォールを通過させる必要がある場合には ds.rmi.port も指定してポートを固定する。
・クライアント側でも設定の変更が必要なケースもある。

コメント

ログインしてコメントを残してください。

Powered by Zendesk