久しぶりにハマったので、書き留めておきます。
プロジェクトでSQL Server2008にJDBCで接続する必要があったのだが、リリース環境で全く応答しなくなるという症状がでた。
ローカル環境での接続やテストは全てうまくいっており、単純にFWの設定かと思いながら対策を始めたのが、事の始まり。
FWをあけても症状が変わらず。tcpdumpやiptablesを使いながらいろいろ試すが解決しない。試しにと思い、PHP+dblibによるテストを行うと正常に接続できる。
うーん。これはドライバまたは接続プロパティだなと思い、あらゆる組み合わせで試してみるがいっこうに解決できない。海外のコミュニティ等もあさるが情報がみつからない。
時間だけがすぎ、途方に暮れていたころ、ようやく以下の記事を発見。
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=7105007
Java1.6.0_29のSSLの実装にバグがあり、JDBCドライバーにうまく接続できずにハングするとのこと。
解決策として使用するJVMを一つ前のバージョン、1.6.0_27にダウングレードする。
あっさり「解決」
「JVMのバグかよ!」
って、おもわず叫んでた。