技術的雑談-RMIのURL
環境
JDK1.4.2_08とJDK1.5.0._03
現象
RMI RegistryでDefaultではないポート(1099)に対してrmiregistryを置いた場合にうまく通信できない。
で、よく見るとjava.rmi.Naming#lookup(String url)に「rmi://localhost:9999/hogehoge」とか指定している。
対処
java.rmi.Namingのjavadocを見るとわかるのだが、RMIで指定するURL形式では先頭に「rmi:」なんてつけない!!!
(いくつかのSiteでそんなSampleを見かけるが、デマです。)
正式な形式は
[// ホスト [: ポート]/] オブジェクト名]
です。
つまり、
//localhost:9999/hogehoge
と書くのが正しい。
ホストやポートが省略されるとそれぞれ「localhost」「デフォルト(1099)」が指定されたとみなされるらしい。
先程の「rmi://localhost:9999/hogehoge」は、
「localhostのデフォルトポート(1099)のrmi://localhost:9999/hogehogeという名前で公開されているObject」
を指している事になる。
で、rmiregistryは9999に口をあけていたりすると「接続できねぇよ!」とNaming#lookup()で怒られる事になる。
教訓:Javadocは「ちゃんと」読みましょう。
履歴
2005/7/14 -- 初版
技術的雑談へ戻る