JBOSSとSeasarとTeeda その4
だいぶ時間が空いてしまいましたが、JBOSS移行シリーズ最終回。
もはや少し忘れかけてます。。。
サーブレットコンテナによる細かい仕様の違いなんだけど、
まずはFilterです。
WebLogicではサーブレットフィルターの中で
フォワード(RequestDispatcher#Forward)をすると
フォワード先にかかっているフィルターも呼ばれます。
しかしJBOSSではフォワード先のFilterは呼ばれない。
Tomcat7もJBOSSと同様でした。JBOSSもCatalinaのAPI使ってるしね。
Servlet2.4からWeb.xmlのfilter-mappingに
dispatcher属性が追加されて
フィルターの適用をリクエスト・フォワード・インクルード・エラーの
それぞれのイベントで選択できるようになったけど
WebLogicのバージョンが古いから全部適用になってたっぽい。
2.4移行はデフォルトでリクエストのみの様子。
これのせいでJBOSS環境ではフォワード後に
SeasarのHotdeployFilterが適用されなくて
RequestオブジェクトがDIできずハマった。。。
お次はInputStreamの2度読み。
WebLogicではInputStreamをBufferedInputStreamで
包んであげればmarkメソッドとresetメソッドで
一度お尻まで読み込み終わっても
ストリームの位置を元に戻せるけどJBOSSではできない。
resetが動作しないのでBufferedReader#readLineがnullになる。
その影響だと思うけど、
フォームなどのPOSTリクエストに対して、
SeasarのRequestDumpFilterで
ログを出力した後にInputStreamを使うと読み込めない。。
これはRequestDumpFilterの中で利用している
Request#getParameterNamesのせい。
これをコメントアウトすれば大丈夫!
POSTの場合はパラメータ情報を取得する時に
InputStreamを使ってるんだと思う。
getParameterNamesやgetParameterValue自体は
内部でキャッシュするからか、何度も呼べるけど
InputStreamはダメ。どうしてもやりたい場合は
HttpServletRequestWrapperを使って、
InputStreamをキャッシュしましょう。
あとはWindowsからLinuxへの移行ということで、
SJIS⇒UTF8になり、Byte長が変わって入力チェックや
各種制御を総見直しになったり、
MSゴシックのフォントが使えなくなったり。
まぁ、それはそれは大変でした。
AS7.2~はまだ情報も少ないのがキツかった。
JBoss Enterprise Application Platform6 構築・運用パーフェクトガイド
- 作者: NTTオープンソースソフトウェアセンタ,レッドハット株式会社
- 出版社/メーカー: 技術評論社
- 発売日: 2013/06/22
- メディア: 大型本
- この商品を含むブログ (10件) を見る