queue タイプのサービスを使用する Tuxedo コントロールの作成

サービス タイプが queue の場合、Tuxedo コントロールは、tpenqueue および tpdequeue によって Tuxedo キュー サービスを使用します。他の対話スタイルと同様に、メソッド シグネチャとバッファ タイプに基づいて、アプリケーションから Tuxedo キューにデータがマップされます。メソッドがエンキュー、デキュー、またはその両方のいずれであるかは、メソッド シグネチャによって決まります。

警告 : トランザクション属性が Supports に設定されている同じキューでエンキューとデキューが実行された場合、トランザクションがコミットされるまでエンキュー メッセージは表示されません。デキューでは、メッセージがキューにある場合は別のメッセージがキューから取り出されます。または、メッセージがキューに入るまでデキューは停止します。デキューが停止した場合は、トランザクション サポートを無効にし、デキューを続行できるようにしてください。

エンキューの動作

メッセージをキューに配置するために使用するキュー スペースの名前は、@TuxedoControl.tuxedo アノテーションの sendQueueSpace 属性によって決定されます。sendQueueName 属性により、キュー名が決定します。reply-queue-name により、メッセージに関連付ける応答キューの名前が決定します。failureQueueName は、メッセージに関連付けるエラー キューの名前を指定します。

注意 : tmqforward の使用方法については、「tmqforward を使用するサービス」を参照してください。

デキューの動作

メッセージをキューから取り出す場合、receive-queue-space が設定されていれば、この属性によってキュー スペースが決まります。それ以外の場合は、sendQueueSpace が使用されます。この場合、指定できるキュー スペースは 1 つだけであり、このキュー スペースがエンキューとデキューの両方に使用されます。receive-queue-name 属性により、キュー名が決定します。

queue サービス タイプに対応する Tuxedo コントロールの作成

queue サービス タイプを使用することを指定するには、Tuxedo コントロール ファイルを作成し、コントロール ファイルにメソッドを追加します。

  1. Tuxedo サービスの追加先となる Web サービスを選択します。
  2. Web サービスのデザイン ビューまたはソース ビューで右クリックし、[挿入|コントロール] を選択します。[コントロールの選択] メニューから、[新しいシステム コントロール|Tuxedo コントロール] を選択し、[OK] をクリックします。[新しいコントロール] ダイアログが表示されます。
  3. コントロールの場所と名前を選択し、[次へ] をクリックします。 注意 : 作成した Tuxedo コントロールは、プロジェクト内のフォルダに格納されている必要があります。
  4. image

  5. 以下の Tuxedo サービス属性を指定します。
  6. 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 バッファを作成する際に使用されます。

  7. [終了] をクリックします。新しいコントロールが作成され、Web サービスのデザイン ビューに新しいアイコンが表示されます。
  8. デザイン ビューで、新しく作成された Tuxedo コントロールのイメージをダブルクリックします。
  9. デザイン ビューに新しい Tuxedo コントロール ファイルが表示されます。
  10. [ソース ビュー] タブをクリックします。呼び出される Tuxedo サービスに必要なバッファの内容に合わせて、ファイル内のこのメソッドのシグネチャを編集します。
  11. [挿入] ウィザードを使用して新しいコントロールを作成すると、ウィザードで指定したサービスの種類サービス名に対応する 1 つのメソッドが定義されます。呼び出される Tuxedo サービスに必要な名前とバッファの内容に合わせて、コントロール ファイル内のこのメソッドのシグネチャと、場合によってはメソッド名を編集する必要があります。また、このコントロールが呼び出すその他のサービスでも、このインタフェースにメソッドが定義されている必要があります。

    キューを使用するサービスの場合、ウィザードで作成されるメソッド名は、enqueuedequeue、または enqueueDequeue です。ウィザードで作成された名前は変更できます。

  12. メニューから [ファイル|保存] を選択します。
  13. 〔Ctrl〕+〔W〕を押して、Tuxedo コントロール ファイルを閉じます。

tmqforward を使用するサービス

tmqforward によってキューが提供され、tmqforward が呼び出すサービスが応答を生成する場合、@TuxedoControl.tuxedo アノテーションのプロパティ ビューから、tmqforward に対して reply-queue-name を指定する必要があります。この状況で reply-queue-name が指定されていないと、応答は破棄されます。

関連トピック