queue タイプのサービスを使用する Tuxedo コントロールの作成
サービス タイプが queue の場合、Tuxedo コントロールは、tpenqueue および tpdequeue によって Tuxedo キュー サービスを使用します。他の対話スタイルと同様に、メソッド シグネチャとバッファ タイプに基づいて、アプリケーションから Tuxedo キューにデータがマップされます。メソッドがエンキュー、デキュー、またはその両方のいずれであるかは、メソッド シグネチャによって決まります。
メソッドに入力パラメータが含まれている場合は、エンキューが実行されます。
メソッドの戻り値の型が void 以外である場合は、デキューが実行されます。
メソッドに入力パラメータが含まれ、戻り値の型が void 以外である場合は、エンキューが実行された後にデキューが実行されます。
警告 : トランザクション属性が Supports に設定されている同じキューでエンキューとデキューが実行された場合、トランザクションがコミットされるまでエンキュー メッセージは表示されません。デキューでは、メッセージがキューにある場合は別のメッセージがキューから取り出されます。または、メッセージがキューに入るまでデキューは停止します。デキューが停止した場合は、トランザクション サポートを無効にし、デキューを続行できるようにしてください。
エンキューの動作
メッセージをキューに配置するために使用するキュー スペースの名前は、@TuxedoControl.tuxedo アノテーションの sendQueueSpace 属性によって決定されます。sendQueueName 属性により、キュー名が決定します。reply-queue-name により、メッセージに関連付ける応答キューの名前が決定します。failureQueueName は、メッセージに関連付けるエラー キューの名前を指定します。
注意 : tmqforward の使用方法については、「tmqforward を使用するサービス」を参照してください。
デキューの動作
メッセージをキューから取り出す場合、receive-queue-space が設定されていれば、この属性によってキュー スペースが決まります。それ以外の場合は、sendQueueSpace が使用されます。この場合、指定できるキュー スペースは 1 つだけであり、このキュー スペースがエンキューとデキューの両方に使用されます。receive-queue-name 属性により、キュー名が決定します。
queue サービス タイプに対応する Tuxedo コントロールの作成
queue サービス タイプを使用することを指定するには、Tuxedo コントロール ファイルを作成し、コントロール ファイルにメソッドを追加します。
Tuxedo サービスの追加先となる Web サービスを選択します。
Web サービスのデザイン ビューまたはソース ビューで右クリックし、[挿入|コントロール] を選択します。[コントロールの選択] メニューから、[新しいシステム コントロール|Tuxedo コントロール] を選択し、[OK] をクリックします。[新しいコントロール] ダイアログが表示されます。
- コントロールの場所と名前を選択し、[次へ] をクリックします。
注意 : 作成した Tuxedo コントロールは、プロジェクト内のフォルダに格納されている必要があります。
![image](images/tuxinsert.gif)
以下の Tuxedo サービス属性を指定します。
|
|
[サービスの種類]
|
tpenqueue と tpdequeue をサポートする queue を指定します。
|
[バッファ タイプ]
|
メニューからバッファのタイプを選択します。このフィールドでは、Tuxedo サービスで Tuxedo コントロールがサポートするバッファのタイプを指定します。
指定可能な値を次に示します。
Carray : データが NULL 文字を含むことのできる未指定の文字配列 (バイト配列) である場合に使用します。Tuxedo の CARRAY と等価です。
FML : データに単純型の名前付きフィールド (各フィールドの最大長は 65 KB) が含まれている場合に使用します。
FML32 : データにネストされた FML32 フィールド (各フィールドの最大長は 4 GB) を含む名前付きフィールドが含まれている場合に使用します。
String : データに単純文字列だけが含まれている場合に使用します。
View : Tuxedo アプリケーションでは、C 構造体または COBOL 構造体の定義に使用し、WebLogic アプリケーションでは、等価である Java TypedView バッファの定義に使用します。データ構造体のフィールドと型が定義された view 記述ファイルは、VIEW 型バッファに記述されたデータ構造体を使用するクライアント プロセスとサーバ プロセスで使用できる必要があります。さまざまな種類のマシン間でバッファが渡される場合、エンコードとデコードが自動的に実行されます。
View32 : View と同じですが、長さフィールドとカウント フィールドに 32 ビットが使用されます。そのため、View よりも長いフィールドを使用でき、より多くのフィールドを使用できます。
XML : データが XML ドキュメントの場合に使用します。Tuxedo の XML (Tuxedo リリース 7.1 以降) と等価です。
注意 : データ依存型ルーティングを使用する入力 XML では、Workshop テスト ブラウザによって生成された XML バッファ内のすべてのコメントを削除してください。バッファ内のコメントの場所によっては、Tuxedo でバッファの解析に関する問題が発生することがあります。
XCOMMON : View バッファ タイプのシノニムです。XCOMMON バッファは、TypedXCommon クラスを拡張する Java クラスによって表されます。このバッファは、セマンティクスにおいて View バッファと同じです。
|
[バッファ タイプ (続き)]
|
XCTYPE : View バッファ タイプのシノニムです。XCTYPE バッファは、TypedXCType クラスを拡張する Java クラスによって表されます。このバッファは、セマンティクスにおいて View バッファと同じです。
XOCTET : 単なるバイト配列であり、Tuxedo の CARRAY バッファ タイプのシノニムです。
none : Tuxedo サービスへの要求で入力バッファを使用しない場合に使用します。メソッド シグネチャに入力パラメータが含まれている場合は、エラーが生成されます。
デフォルトは none です。
|
[送信キュー スペース]
|
[サービスの種類] フィールドで queue を選択した場合、[送信キュー スペース] フィールドがアクティブになります。送信キュー名が配置されるキュー スペースの名前を入力します。この名前は、WTC インポート サービス名です。この名前は、「WebLogic Tuxedo Connector (WTC) サービスの作成」でマップされたサービス名と一致する必要があります。
キュー スペースの名前が正確にわからない場合は、[参照] をクリックすると、インポートされた WTC サービス名のリストが表示されます。サービスが [WTC インポート済みサービス] ダイアログのリストに表示されている場合は、サービスを選択し、[OK] をクリックします。必要なサービスがリストに表示されていない場合、そのサービスは WebLogic Server にインポートされていません。
[WTC インポート済みサービス] ダイアログからサービスをインポートするには、[インポート] をクリックします。[Services Exported by Tuxedo Application] ダイアログが表示されます。
WTC サービスをインポートする方法については、「新しい Tuxedo サービスのインポート」を参照してください。
|
[送信キュー名]
|
[サービスの種類] フィールドで queue を選択した場合、[送信キュー名] フィールドがアクティブになります。メッセージの送信先のキューの名前を入力します。
|
[受信キュー スペース]
|
[サービスの種類] フィールドで queue を選択した場合、[受信キュー スペース] フィールドがアクティブになります。受信キュー名が配置されるキュー スペースの名前を入力します。
キュー スペースの名前が正確にわからない場合は、[参照] をクリックすると、インポートされた WTC サービス名のリストが表示されます。サービスが [WTC インポート済みサービス] ダイアログのリストに表示されている場合は、サービスを選択し、[OK] をクリックします。必要なサービスがリストに表示されていない場合、そのサービスは WebLogic Server にインポートされていません。
[WTC インポート済みサービス] ダイアログからサービスをインポートするには、[インポート] をクリックします。[ワークステーション アドレス] ダイアログが表示されます。
WTC サービスをインポートする方法については、「新しい Tuxedo サービスのインポート」を参照してください。
|
[受信キュー名]
|
[サービスの種類] フィールドで queue を選択した場合、[受信キュー名] フィールドがアクティブになります。キューに入れるメッセージを受信するキューの名前を入力します。
|
[フィールド テーブル]
|
FML バッファまたは FML32 バッファを使用するときに、Tuxedo サービスのフィールド テーブルの名前を入力します。FML バッファまたは FML32 バッファは、呼び出されたサービスから送信されたり、応答バッファとして機能したりします。これらのバッファを使用するときには、フィールド テーブルを指定する必要があります。フィールド テーブルの名前は、mkfldclass ユーティリティまたは mkfldclass32 ユーティリティで生成されたクラスと一致する必要があります。
バッファ タイプが FML および FML32 の場合、WTC はバッファに格納できるフィールドの名前とタイプを必要とします。これらは、mkfldclass ユーティリティおよび mkfldclass32 ユーティリティで作成されたフィールド テーブル クラスに記述されています。
mkfldclass ユーティリティおよび mkfldclass32 ユーティリティの詳細については、「WebLogic Server Javadoc」を参照してください。
|
[戻りビュー クラス]
|
Tuxedo サービスから受信できる View バッファ タイプに対応する view クラスの名前を入力します。このフィールドが必要となるのは、Tuxedo サービスが View バッファまたは View32 バッファを返す場合だけです。これらのクラスは、送信ビュー クラス 属性には影響されません。この属性は、Tuxedo サービスが入力として必要とする View バッファを表す view クラスまたは view32 クラスを指定する際に使用します。
注意 : 1 つの Tuxedo サービスがさまざまな VIEW バッファで応答できるように、この属性の値をクラスのリストにできます。
viewj ユーティリティおよび viewj32 ユーティリティについては、「WebLogic Server Javadoc」を参照してください。
|
[送信ビュー クラス]
|
[バッファ タイプ] フィールドで View または View32 を選択した場合、[送信ビュー クラス] フィールドがアクティブになります。この属性は、サービスが入力バッファとして必要としている View/View32 バッファを表すクラスの名前を示します。この view クラスは、TypedView バッファを作成する際に使用されます。
|
[終了] をクリックします。新しいコントロールが作成され、Web サービスのデザイン ビューに新しいアイコンが表示されます。
デザイン ビューで、新しく作成された Tuxedo コントロールのイメージをダブルクリックします。
デザイン ビューに新しい Tuxedo コントロール ファイルが表示されます。
[ソース ビュー] タブをクリックします。呼び出される Tuxedo サービスに必要なバッファの内容に合わせて、ファイル内のこのメソッドのシグネチャを編集します。
[挿入] ウィザードを使用して新しいコントロールを作成すると、ウィザードで指定したサービスの種類とサービス名に対応する 1 つのメソッドが定義されます。呼び出される Tuxedo サービスに必要な名前とバッファの内容に合わせて、コントロール ファイル内のこのメソッドのシグネチャと、場合によってはメソッド名を編集する必要があります。また、このコントロールが呼び出すその他のサービスでも、このインタフェースにメソッドが定義されている必要があります。
キューを使用するサービスの場合、ウィザードで作成されるメソッド名は、enqueue、dequeue、または enqueueDequeue です。ウィザードで作成された名前は変更できます。
送信キュー情報が提供され、受信キュー情報は提供されない場合、挿入されるメソッドは enqueue です。
受信キュー情報が提供され、送信キュー情報は提供されない場合、挿入メソッドは dequeue です。
送信キューと受信キューの両方の情報が提供される場合、挿入メソッドは enqueueDequeue です。
メニューから [ファイル|保存] を選択します。
〔Ctrl〕+〔W〕を押して、Tuxedo コントロール ファイルを閉じます。
tmqforward を使用するサービス
tmqforward によってキューが提供され、tmqforward が呼び出すサービスが応答を生成する場合、@TuxedoControl.tuxedo アノテーションのプロパティ ビューから、tmqforward に対して reply-queue-name を指定する必要があります。この状況で reply-queue-name が指定されていないと、応答は破棄されます。
関連トピック