Cosminexus 機能解説
アプリケーションの動作モードには,本番稼働できる通常モードと,テスト専用のテストモードの二つがあります。
テストモードは,アプリケーションの新規開発や,アプリケーションの入れ替えなど,アプリケーションをテストするときに利用します。なお,テストの対象となるのは,WebアプリケーションとEnterprise Beanです。
アプリケーションの作りによっては,テストモードでのWebアプリケーション呼び出し機能が利用できないことがあります。注意事項を次に説明します。
テストモードで起動するJ2EEアプリケーションに複数のWebアプリケーションが含まれている場合,そのWebアプリケーションから,同じくテストモードで起動されたWebアプリケーションへのリンク(URLまたはURI)を作成する処理が含まれることがあります。この場合,サーブレットAPIでほかのWebアプリケーションのコンテキストルートは取得できないため,Webアプリケーションで固定またはユーザプログラム内の定義で指定していると考えられます。
この場合,テストモードのWebアプリケーションにアクセスし,作成されたページのリンクにアクセスすると,テストモードのWebアプリケーションではなく,通常モードのWebアプリケーションにアクセスするので注意してください。
静的コンテンツ内で記述しているリンクが,相対パスではなくコンテキストルートからのパスで記述してある場合,通常モードのWebアプリケーションにアクセスしてしまいます。
サーブレットAPIで使用するメソッドによっては,次に示す注意が必要になる場合があります。
注意事項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) | ○ |
(凡例)○:注意事項に該当することを示します。
Enterprise Beanの場合,一般にEJBホームオブジェクトおよびEJBローカルホームオブジェクトの取得にJNDIを利用します。したがって,通常モード用とは別にテストモード用の名前空間を設け,JNDIで通常/テストのモード切り替えを実施することで,テストモードでのEnterprise Beanの呼び出しを実現します。テストモードでのEnterprise Beanの呼び出しについての注意事項を次に示します。
Enterprise Beanを含むJ2EEアプリケーションをテストモードで開始するとき,テストモードで開始されたEnterprise BeanのEJBホームオブジェクト,およびEJBローカルホームオブジェクトなどをテストモード用の名前空間に登録します。テストモード用名前空間への登録/検索については,JNDIで自動変換して実行するため,J2EEアプリケーションに本番/テストのモード変更が発生しても,lookupメソッド呼び出し元のソースや,WAR,Enterprise BeanなどのDD定義の変更は不要です。
クライアントでは,テストモード用の名前空間を検索してEJBホームオブジェクト,およびEJBローカルホームオブジェクトなどを取得します。
J2EEアプリケーション形態のEnterprise Beanのクライアント(例:JSP/サーブレットやEnterprise Bean)では,JNDIがlookupメソッド呼び出し元(クライアント)のJ2EEアプリケーションのモードを判別して自動的に検索名を変換するため,クライアント側ではテストモードの検索名を意識しなくて済みます。
一方,J2EEアプリケーション形態以外のEnterprise Beanのクライアント(例:EJBクライアントアプリケーション)では,JNDIでは自動的に検索名を変換しません。そのため,クライアント側では,テストモードの検索名を意識し,テスト用のクライアントを作成してください(J2EEアプリケーション形態以外のEnterprise Beanのクライアントには,通常モード/テストモードの区別がありません。このため,JNDIでは,検索名の自動変換は実行されません)。
ダイナミッククラスローディング機能を使用する場合,一つのJ2EEサーバ上で通常モードとテストモードのJ2EEアプリケーションを,同じ名称で同時に開始できません。例えば,すでに通常モードでJ2EEアプリケーションが動作しているときにテストモードのJ2EEアプリケーションを開始しようとすると,開始に失敗します。
テストモードでJ2EEアプリケーションを動作させる場合は,ダイナミッククラスローディング機能を使用しないことをお勧めします。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.