!!!技術的雑談-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 -- 初版 [[技術的雑談]]へ戻る !!突っ込み {{comment}} [[技術的雑談]]へ戻る {{trackback}} [[技術的雑談]]へ戻る