2014/11/12

JDK 1.7.0_u72でLDAPとの通信がタイムアウトする

ADとLDAP連携しているJavaのアプリケーションをバージョンアップした際に、JDKも最新版(1.7.0_u72)に上げたのですが、LDAPサーバーとの通信(ユーザーデータの同期)がやたらタイムアウトするようになりました。

LDAPサーバーの検索の範囲を狭くすると成功するので、本当にタイムアウトしているのだろうというのはわかったのですが、wiresharkでパケットキャプチャしていると15秒後にabandonRequestでリクエストを破棄している。タイムアウトの設定を長く取っても、短くしてもエラーメッセージも同じ。どういうことなの??

その時のエラーメッセージが、抜粋でこんなの。

javax.naming.NamingException: LDAP response read timed out, timeout used:-1ms.;
-Dcom.sun.jdni.ldap.read.timeout=XXXXXX(ミリ秒) をどんな値にしても-1msと言われた上に、15秒後にタイムアウト。

色々グルグルした結果、https://bugs.openjdk.java.net/browse/JDK-8062947 発見。それそれ。OpenJDKだけど、Oracle版もコードベースは同じらしいし(曖昧)。

試しに、元使っていたバージョン(1.7.0_u51)にJava を戻したら問題解消しましたよ。16秒、17秒で同期完了。

少なくとも1.7.0_u72は、LDAPとの通信に15秒でタイムアウトとどこかにハードコーティングされていて上書きできない模様。

皆様お気をつけてください。

教訓、アプリケーションとミドルウェアは一緒にバージョンを上げてはいけない。基本です。

0 件のコメント: