Cosminexus V9 アプリケーションサーバ 機能解説 互換編

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

7.3.2 テストモードで動作しているJ2EEアプリケーションに対する処理

ここでは,テストモードで実行しているJ2EEアプリケーションに対するクライアントからの処理について説明します。

<この項の構成>
(1) 処理の流れ
(2) テストモードで動作しているWebアプリケーションの呼び出し
(3) テストモードで動作しているEJBの呼び出し
(4) J2EEアプリケーション外からテストモードで実行されているEnterprise Beanのルックアップをする場合の名称の指定方法
(5) EJBクライアントアプリケーションからルックアップを使用してUserTransactionを取得する場合の検索文字列
(6) ユーザ指定名前空間機能でテストモードを使用する場合の注意
(7) CTMを使用する場合の注意事項
(8) テストモードで起動されたJ2EEアプリケーションに対するそのほかの注意事項

(1) 処理の流れ

テストモードおよび通常モードで実行しているJ2EEアプリケーションがあるときのアプリケーションサーバの動作について,CTMを使用する場合と使用しない場合に分けて,図に示します。

図7-3 処理の流れ(CTMを使用する場合)

[図データ]

図7-4 処理の流れ

[図データ]

図について説明します。

クライアント
クライアントは,本番用とテスト用とで別に用意します。

J2EEアプリケーション
通常モードで動作中のJ2EEアプリケーションのほかに,テストモードでJ2EEアプリケーションをデプロイします。

名前空間
CTMを使用する場合,グローバルネーミングサービス,およびローカルネーミングサービスの名前空間は,本番用とテスト用で別に用意します。CTMを使用しない場合のネーミングサービスも同様に,本番用とテスト用を別に用意します。
クライアントから検索する名前空間を本番用とテスト用とで切り分けることで,EJBの呼び出しの切り替えをします。

CTMのスケジュールキュー(CTMを使用する場合だけ)
CTMのスケジュールキューは,本番用のJ2EEアプリケーションとテスト用のJ2EEアプリケーションで別に生成します。

DB Connectorおよびデータベース
J2EEアプリケーションがデータベースを使用する場合は,本番用に定義したDB Connectorを使用します。テスト用のクライアントやJ2EEアプリケーションから,テスト用のデータを生成することで,データベースでの確認をします。
参考
なお,テストモードのJ2EEアプリケーションに含まれるWebアプリケーションからWebサーバ上の静的コンテンツを利用する場合には,次のどちらかの方法で静的コンテンツにアクセスしてください。
  1. WebアプリケーションからWebサーバ上の静的コンテンツに相対パスでアクセスする場合,あらかじめWebサーバ上のディレクトリ構成をテストモードのコンテキストルート名を含むディレクトリ構成として静的コンテンツを配置し,アクセスするようにしてください。
  2. WebアプリケーションからWebサーバ上の静的コンテンツに絶対パスでアクセスする場合,あらかじめWebサーバ上で本番用のディレクトリ構成下に配置された静的コンテンツにアクセスするようにしてください。

(2) テストモードで動作しているWebアプリケーションの呼び出し

テストモードで動作している場合,テスト用のクライアントからは,テスト用のURLでWebアプリケーションに接続します。

J2EEアプリケーションをテストモードで開始すると,コンテキストルートに「_test_」のプリフィックスが付いた,テスト用のコンテキストルートが生成されます。このコンテキストルートを含むURLが,テスト用のURLになります。例えば,コンテキストルートが「example」で,本番用のURLが「http://www.xxx.co.jp/example/index.jsp」である場合,テスト用のURLは「http://www.xxx.co.jp/_test_/example/index.jsp」となります。

注意
通常モードで,コンテキストルート名が「/_test_」で始まるWebアプリケーションを使用している場合,コンテキストルート名が「/_test_」で始まらないWebアプリケーションをテストモードで実行すると,コンテキストルート名が重複したり,またはコンテキストルート名のパスの構成要素が包含関係となったりする場合があります。
例えば,通常モードでコンテキストルート名が「/_test_/example」のWebアプリケーション1を使用している場合に,コンテキストルート名が「/example」のWebアプリケーション2は,テストモードではコンテキストルート名に「/_test_」が付加されるためコンテキストルート名がWebアプリケーション1と重複することになり実行できません。
また,コンテキストルート名が「/example/app」のWebアプリケーション3を,テストモードで実行すると,コンテキストルート名は「/_test_/example/app」となり,Webアプリケーション1とはコンテキストルート名のパスの構成要素が包含関係となります。この場合,テストモードで実行することはできますが,包含されるコンテキストルート名を持つWebアプリケーション1にアクセスできない場合があります。

(3) テストモードで動作しているEJBの呼び出し

EJBでは,EJBホームオブジェクトおよびEJBローカルホームオブジェクトの取得には,JNDIを利用します。テストモードの場合,通常モード用とは別に名前空間を設けることでJNDIでモードの切り替えをして,EJBを呼び出します。

J2EEアプリケーションをテストモードで開始すると,EJB ホームオブジェクトおよびEJBローカルホームオブジェクトなどは,JNDIで自動変換してから,テストモード用の名前空間に登録および検索されます。クライアント側では,テスト用の名前空間を検索して,EJBホームオブジェクトやEJBローカルホームオブジェクトなどを取得します。JNDIがlookup呼び出し元クライアントのJ2EEアプリケーションのモードを判別して,検索名の変換を自動で実施するので,クライアント側では,テスト用の検索名を意識する必要はありません。

また,テストモードを通常モードに変更しても,lookupの呼び出し元のソースや,WAR,EARなどのDDの変更は必要ありません。

注意
EJBクライアントアプリケーションの場合は,通常モードとテストモードの区別がありません。このため,JNDIでは検索名の自動変換はされませんので,クライアント側ではテストモードの検索名を意識してJ2EEアプリケーションを作成する必要があります。
また,J2EEアプリケーションにEntity Bean(CMP2.0)を含む場合,J2EEアプリケーションのテスト機能を利用できません。

(4) J2EEアプリケーション外からテストモードで実行されているEnterprise Beanのルックアップをする場合の名称の指定方法

J2EEアプリケーション外からテストモードで実行されているEnterprise Beanをルックアップする場合,テストモード用の名前空間を意識してルックアップする必要があります。通常モードで実行されるEnterprise Beanを「HITACHI_EJB/」で始まる文字列でルックアップする場合,同じEnterprise Beanがテストモードで実行されるときには「$HITACHI_TEST/HITACHI_EJB/」で始まる文字列でルックアップします。また,通常モードで実行されるEnterprise Beanを「MyCart」でルックアップする場合,同じEnterprise Beanがテストモードで実行されるときには,「$HITACHI_TEST/MyCart」でルックアップする必要があります。

(5) EJBクライアントアプリケーションからルックアップを使用してUserTransactionを取得する場合の検索文字列

EJBクライアントアプリケーションからUserTransactionをルックアップする場合に,テストモードのJ2EEアプリケーションを呼び出すときには,次の検索文字列を指定します。

 
$HITACHI_TEST/HITACHI_EJB/SERVERS/<サーバ名称>/SERVICES/UserTransaction
 

(6) ユーザ指定名前空間機能でテストモードを使用する場合の注意

テストモードを使用している場合,1.と2.で示すオブジェクトの別名に,同じ名前を付けることができます。

  1. テストモードで動作しているJ2EEアプリケーションに含まれる,リモートインタフェースを持つEnterprise Bean
  2. 通常モードで動作しているJ2EEアプリケーションに含まれる,リモートインタフェースを持つEnterprise Bean,またはJ2EEリソース

ただし,これらのオブジェクトに重複した別名を付けている場合に,どちらかのJ2EEアプリケーションの動作モードを変更して開始しようとすると,エラーが発生します。

エラーが発生する例を次の図に示します。

図7-5 J2EEアプリケーションの動作モードを変更した場合にエラーが発生する例

[図データ]

動作モードを変更した場合にJ2EEアプリケーションを起動できなかったときは,重複しない別名に変更してください。

(7) CTMを使用する場合の注意事項

CTMを使用する場合は,次の内容に注意してください。

(a) スケジュールキューの名称

スケジュールキューの名称は,通常モードの場合,デフォルトでは,J2EEアプリケーションの名称になります。通常モードのキュー名称との衝突を回避するため,テストモードでは,スケジュールキューの名称を,通常モードのキュー名称の先頭に,プリフィックス「_test_」が付けられます。CTMで提供するコマンドを使用してテスト用のキューを操作する場合は,キュー名称を意識する必要があります。

なお,通常モードとテストモードのJ2EEアプリケーションの間では,CTMのスケジュールキューを共有することはできません。

(b) EJBホームオブジェクトのJNDI登録名

J2EEアプリケーションをテストモードで開始するとき,ローカルネーミングサービスと同様にCTMが利用するグローバルネーミングサービスにもテスト用の名前空間を形成し,EJBホームオブジェクトを登録します。

(8) テストモードで起動されたJ2EEアプリケーションに対するそのほかの注意事項