トラブルシューティング。Web系。
Webアプリケーションにて、入力されたセキュア項目(例えばクレジットカード番号とか)は
乱数を元に暗号化してログ出力するようにしている。
ServletのFilterを使って、Refererの情報や、
ポストされたFormの情報をログ出力するような仕掛けにしていて。
HTMLのnameに XX_ って感じで接頭辞をつけてやると、
セキュア項目だと認識されて(ただのif文の分岐ですが、、)暗号化してログ出力するようになっている。
が、カットオーバーして、100名近い人がアクセスするようになってから、
暗号化して出力する部分でArrayIndexOutOfBoundsエラー。
そしたら、、JCEのCipherのインスタンスはスレッドセーフではない、と。
http://www.jnsa.org/seminar/API/Inada.pdf
よくもまぁ、今まで出なかったなぁと。
バッチアプリでも、この部分のフレームワークのライブラリを使っていて。
そこでの性能対策のために入れた対応が原因。
(それまでは毎回インスタンスを生成するようにしていた)
バッチアプリはシングルスレッドなので問題なかった。。
ServletのFilterのログ出力部分を直列化するのが、
一番実装の変更が少なかったので、暫定的に対処。
今日1日動かしたところ、直列化しても、待ちが発生して、
レスポンスに影響は発生していない。
にしても、SimpleDateFormatがスレッドセーフじゃない
なんていうのは有名だけど、
まさかこんなところでお目にかかるとは。。。
勉強になりました。
トラブルのない平和な日々はいつになったらやってくるのやら。。