telecaster howling
howli****@gmail*****
2011年 11月 9日 (水) 01:35:14 JST
今村と申します。 いつも楽しく学習させていただいています。 Wicket 1.4.18を利用していてどうにも解決できない問題があります。 お知恵を貸してください。 現在、複数種類のServletコンテナ(JavaEEコンテナ)で動作する 汎用パッケージソフトの開発を実施しているのですが、 Tomcat 7.0で問題なく動作するアプリケーションが WebSphere 8.0においては全ての画面遷移に失敗し、404エラーとなってしまいます。 具体的には、画面AからBへ遷移(リダイレクト)する際、 コンテキストルートの直下にサブコンテキストを挟んで遷移させると Tomcatはサブコンテキストを含んだURL、WebSphereはサブコンテキストを含まないURLになるのです。 ・Tomcatのリダイレクト先URL http://tomcatserver:8080/context/UISubContext/?wicket:bookmarkablePage=hogera.HogeHoge ・WebSphereのりダイレクト先URL http://websphereserver:9080/context/?wicket:bookmarkablePage=hogera.HogeHoge このため、 コンテキストルート直下に「?wicket:bookmarkablePage=hogera.HogeHoge」のクエリ文字列で 特定できるリソース(?)をWebSphereが見つけられない⇒404エラー!という状態です。 この際、URL直打ちでhttp://websphereserver:9080/context/UISubContext/?wicket:bookmarkablePage=hogera.HogeHogeを指定すると、 遷移したい画面が正しく表示されます。 実装はどうなっているかと申しますと、 WebPageを継承した各画面にて this.setResponsePage(HogeHoge.class); // HogeHogeはWebPageを継承したクラス で画面遷移(固定URLへのリダイレクト)を実施しています。 web.xmlは <filter-mapping> <filter-name>(WicketFilterの名前)</filter-name> <url-pattern>/UISubContext/*</url-pattern> </filter-mapping> とし、/UISubContext/〜 にのみWicketFilterが効くように設定しています。 Wicketの画面と同一war内にWebサービスを含める(/context/WSSubContext/〜をWebサービスのURL空間とする)必要があるため、 コンテキストルート直下全てにWicketFilterを効かすのは難しそうです。 ここでお伺いしたいのですが、 ・上記問題を外部仕様(URL空間設計)に影響を与えず回避する手段は無いか? ・サブコンテキスト以下にWicketFilterを指定して問題ないか? ・その他、Wicketと非Wicketのアプリケーションを同一warに含める際の考慮事項 ・Tomcatベースで開発したWicketアプリをその他Servlet/JavaEEコンテナで動作させる際の考慮事項 あたりの情報をお持ちでしたらご教示ください。 ささいな情報で結構です。よろしくお願いします。 ※WicketをWebSphereで動作させるにあたり、 https://cwiki.apache.org/WICKET/websphere.html#Websphere-WicketonWebsphere6.1 を参考に com.ibm.ws.webcontainer.invokefilterscompatibility値は設定済みです。 画面A→Bへの遷移時、画面AのWebPage継承クラス内での処理は正しく実行されているので、 WicketFilter自体は正しく動作しています ※WebSphere設定において、クラスローダの読み込み順序はwar側を先読みするよう設定済みです (こちらは全く無関係だとは思いますが・・・) ※動作環境(要件)は下記の通りです ・Wicket 1.4.18 ・Tomcat 7.0 ・WebSphere Application Server 8.0(Tomcat 7.0で利用したwarのみ内包したearをデプロイしています)