Cosminexus 機能解説

[目次][用語][索引][前へ][次へ]

19.7.4 テストモードでのJ2EEアプリケーション呼び出し時の注意事項

アプリケーションの動作モードには,本番稼働できる通常モードと,テスト専用のテストモードの二つがあります。

テストモードは,アプリケーションの新規開発や,アプリケーションの入れ替えなど,アプリケーションをテストするときに利用します。なお,テストの対象となるのは,WebアプリケーションとEnterprise Beanです。

<この項の構成>
(1) テストモードでのWebアプリケーション呼び出しについての注意事項
(2) テストモードでのEnterprise Bean呼び出しについての注意事項

(1) テストモードでのWebアプリケーション呼び出しについての注意事項

アプリケーションの作りによっては,テストモードでのWebアプリケーション呼び出し機能が利用できないことがあります。注意事項を次に説明します。

(a) ほかのWebアプリケーションとのリンクを作成する場合

テストモードで起動するJ2EEアプリケーションに複数のWebアプリケーションが含まれている場合,そのWebアプリケーションから,同じくテストモードで起動されたWebアプリケーションへのリンク(URLまたはURI)を作成する処理が含まれることがあります。この場合,サーブレットAPIでほかのWebアプリケーションのコンテキストルートは取得できないため,Webアプリケーションで固定またはユーザプログラム内の定義で指定していると考えられます。

この場合,テストモードのWebアプリケーションにアクセスし,作成されたページのリンクにアクセスすると,テストモードのWebアプリケーションではなく,通常モードのWebアプリケーションにアクセスするので注意してください。

(b) 静的コンテンツ内のリンクがコンテキストルートからのパスで記述されている場合

静的コンテンツ内で記述しているリンクが,相対パスではなくコンテキストルートからのパスで記述してある場合,通常モードのWebアプリケーションにアクセスしてしまいます。

(c) サーブレットAPIを利用する場合

サーブレットAPIで使用するメソッドによっては,次に示す注意が必要になる場合があります。

注意事項A:
引数にコンテキストルート名をハードコーディングしたり,戻り値として特定のコンテキストルート名が返されることを期待したりしないでください。

注意事項B:
戻り値としてファイルシステム上の実際のパスが返されます。特定のファイルパスが返されることを期待しないでください。

注意事項Aおよび注意事項Bに該当するメソッドを,次の表に示します。

表19-11 注意が必要なサーブレットAPI

パッケージ クラス メソッド 注意事項
A B
javax.servlet ServletContext getContext(java.lang.String uripath)  
getResource(java.lang.String path)  
getRealPath(java.lang.String path)  
javax.servlet.http HttpServletRequest getContextPath()  
getPathTranslated()  
getRequestURI()  
getRequestURL()  
getPathTranslated()  
HttpServletResponse encodeRedirectUrl(java.lang.String url)  
encodeRedirectURL(java.lang.String url)  
encodeUrl(java.lang.String url)  
encodeURL(java.lang.String url)  
sendRedirect(java.lang.String location)  
Cookie getPath()  
setPath(java.lang.String uri)  
HttpServletRequestWrapper getContextPath()  
getPathTranslated()  
getRequestURI()  
getRequestURL()  
getPathTranslated()  
HttpServletResponseWrapper encodeRedirectUrl(java.lang.String url)  
encodeRedirectURL(java.lang.String url)  
encodeUrl(java.lang.String url)  
encodeURL(java.lang.String url)  
sendRedirect(java.lang.String location)  
HttpUtils getRequestURL(HttpServletRequest req)  

(凡例)○:注意事項に該当することを示します。


(2) テストモードでのEnterprise Bean呼び出しについての注意事項

Enterprise Beanの場合,一般にEJBホームオブジェクトおよびEJBローカルホームオブジェクトの取得にJNDIを利用します。したがって,通常モード用とは別にテストモード用の名前空間を設け,JNDIで通常/テストのモード切り替えを実施することで,テストモードでのEnterprise Beanの呼び出しを実現します。テストモードでのEnterprise Beanの呼び出しについての注意事項を次に示します。

(a) Enterprise Beanを開始する場合

Enterprise Beanを含むJ2EEアプリケーションをテストモードで開始するとき,テストモードで開始されたEnterprise BeanのEJBホームオブジェクト,およびEJBローカルホームオブジェクトなどをテストモード用の名前空間に登録します。テストモード用名前空間への登録/検索については,JNDIで自動変換して実行するため,J2EEアプリケーションに本番/テストのモード変更が発生しても,lookupメソッド呼び出し元のソースや,WAR,Enterprise BeanなどのDD定義の変更は不要です。

(b) クライアントから接続する場合

クライアントでは,テストモード用の名前空間を検索してEJBホームオブジェクト,およびEJBローカルホームオブジェクトなどを取得します。

J2EEアプリケーション形態のEnterprise Beanのクライアント(例:JSP/サーブレットやEnterprise Bean)では,JNDIがlookupメソッド呼び出し元(クライアント)のJ2EEアプリケーションのモードを判別して自動的に検索名を変換するため,クライアント側ではテストモードの検索名を意識しなくて済みます。

一方,J2EEアプリケーション形態以外のEnterprise Beanのクライアント(例:EJBクライアントアプリケーション)では,JNDIでは自動的に検索名を変換しません。そのため,クライアント側では,テストモードの検索名を意識し,テスト用のクライアントを作成してください(J2EEアプリケーション形態以外のEnterprise Beanのクライアントには,通常モード/テストモードの区別がありません。このため,JNDIでは,検索名の自動変換は実行されません)。

(c) ダイナミッククラスローディング機能を使用する場合

ダイナミッククラスローディング機能を使用する場合,一つのJ2EEサーバ上で通常モードとテストモードのJ2EEアプリケーションを,同じ名称で同時に開始できません。例えば,すでに通常モードでJ2EEアプリケーションが動作しているときにテストモードのJ2EEアプリケーションを開始しようとすると,開始に失敗します。

テストモードでJ2EEアプリケーションを動作させる場合は,ダイナミッククラスローディング機能を使用しないことをお勧めします。