- PR -

RMIクライアントを特定する方法

1
投稿者投稿内容
ジャンボカレー
会議室デビュー日: 2003/05/26
投稿数: 17
投稿日時: 2003-05-26 10:29
複数のクライアントから利用されるRMIサーバオブジェクトがあったとします。
そして、公開してるメソッドとしてaMethod()を持っているとします。
クライアントAがaMethod()を呼んだ場合、サーバ側で「クライアントAから
メソッド呼び出しがあった」と知る方法はあるのでしょうか?
しかも、IPアドレス単位ではなくスタブ単位で特定できるのは可能でしょうか?

ご存知の方いましたら、教えてください。
へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-05-26 16:11
「IPアドレス単位ではなくスタブ単位で特定」とは、どういう意味でしょう?
java.rmi.server.RemoteServer.getClientHost()
が返す文字列では特定できないとか?
ジャンボカレー
会議室デビュー日: 2003/05/26
投稿数: 17
投稿日時: 2003-05-27 09:11
へげもんさんありがとうございます。
確かにIPアドレスでホストを特定することはできると思いますが、
もし、同一ホスト内で複数のスレッドがRMIサーバオブジェクトを
利用するとしたら、各スレッドはNaming.lookup()でスタブを取得する
事になります。
その時に「メソッド呼び出しはどのスタブ(スレッド)からなのか?」
といったことを特定できないかなあ?と悩んでいます。
IPアドレス単位ではなく、スタブ単位とはそういった意味で書きました。

へげもん
ベテラン
会議室デビュー日: 2002/04/14
投稿数: 87
お住まい・勤務地: 埼玉県
投稿日時: 2003-05-27 11:53
なるほど、スタブ単位とは呼び出し元のスレッド単位ということですね。
そのあたりはSoketレベルの情報が必要になると思いますが、残念ながらRMI上では隠蔽されてしまってます。
がんばれば、RMISocketFactoryなどを使ってそのあたりの情報を引き出せるようにすることも出来ると思いますが、そこまで使ったことが無いので。
もっと簡単な手段として、メソッドの引数で識別子を渡してしまうなどの手抜きなやり方はどうでしょうか?
ジャンボカレー
会議室デビュー日: 2003/05/26
投稿数: 17
投稿日時: 2003-05-29 09:03
そうですね。やっぱりその方法が適当なのかもしれません。
アドバイスありがとうございます。

RMIでクライアントを識別しようと思ったら、最初からそういった仕組み
で作ったほうがよいと痛感しました。
もしくは、クライアントを識別する必要の無い設計にするとか、
そういった工夫が必要なのかもしれませんね。
1

スキルアップ/キャリアアップ(JOB@IT)