« アプリケーションのインストールができない場合 | トップページ | 不要なインデックスは消しましょう »

2014.06.20

java.net.UnknownHostException!

RESTを使ってアプリ間でるんるんウェブサービス連携をやろうとしていた隣の部署からの相談。
「IPアドレス指定では実行できるんだが、ホスト名指定での検証をするとエラーになるんだ」
とのことだった。
はい、ここでピンときますね。

REST呼び出し側のAPのログを見せてもらうと
java.net.UnknownHostException が発生している。
このExceptionは早い話がホスト名の名前解決に失敗している、ということだ。

「え、でもちゃんと私のPCのhostsにはホスト名とIP書いてありますよ!」
……えーっと。
今回の仕掛けは、アプリケーション間のRESTなわけですよね?
「はい」
となると、今回名前解決に失敗している場所は呼び出し側APサーバになるわけであって、あなたのパソコンではありませんよ。
「ええ??」

今回の仕掛けはアプリAが画面上からあるアクションを行なうと、アプリBのウェブサービスを呼び出して、情報を取得する、という仕様であった。
このため、登場人物はアプリAを起動しているクライアントCとアプリAの起動しているサーバA、アプリBの起動しているサーバB、ということになる。

で、通信が発生しているのはどこ? というとクライアントCとサーバA間は確かに動いている。
しかしアプリBを呼び出すのはアプリAであるため、サーバAがサーバBの名前解決ができないと、アプリBを利用できませんぜ、旦那。

「わわ、じゃあhostsの設定ってどこにすればいいんですか?」
Linux系だったのでとりあえず /etc/hosts にホスト名とIPアドレスの紐付けをしませう。
ただ、本来であればアプリAが参照しているDNSからそのホスト名が取得できるように、しとかないと将来アプリBの物理サーバがリプレイスとかされてIPアドレスが変わったときに問題を起こすんで、ちゃんとDNS整備しとこうね。

「/etc/hostsに設定したけど動きません!」
……設定できてないよ。普通hostsはrootにしか書き込み権限がないので、書き込み処理失敗していると思うよ。もっかい cat /etc/hosts してごらん、設定した紐付けが残ってないはずだよ。

「ほんとだ>< どうすればいいの?」
サーバ管理者にhosts設定してもらいなさい。あと、これは暫定対応でDNSをメインで引いて、DNS側にもこの紐付け情報をつけるように依頼しなさいな。

エラーの内容はちゃんと見ようぜ。ログに全部書いてあるよ。。。。

|

« アプリケーションのインストールができない場合 | トップページ | 不要なインデックスは消しましょう »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/2022/59837115

この記事へのトラックバック一覧です: java.net.UnknownHostException!:

« アプリケーションのインストールができない場合 | トップページ | 不要なインデックスは消しましょう »