BEA Logo BEA Tuxedo Release 8.0

  BEA ホーム  |  イベント  |  ソリューション  |  パートナ  |  製品  |  サービス  |  ダウンロード  |  ディベロッパ・センタ  |  WebSUPPORT

 

   Tuxedo ホーム   |   BEA Tuxedo /Q コンポーネント   |   先頭へ   |   前へ   |   次へ   |   目次

 


メッセージのキューへの登録

次は、TPENQUEUE() の構文です。

01 TPQUEDEF-REC.
COPY TPQUEDEF.
01 TPTYPE-REC.
COPY TPTYPE.
01 DATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPENQUEUE" USING TPQUEDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

TPENQUEUE() が呼び出されると、TPQUEDEF-REC 内の QSPACE-NAME で識別されるキュー・スペース内の TPQUEDEF-RECQNAME キューにメッセージを格納するようにシステムに指示します。メッセージは DATA-REC にあり、TPTYPE-REC 内の LEN にはメッセージの長さが入ります。TPQUEDEF-REC の設定によって、システムに TPENQUEUE() 呼び出しの処理方法が通知されます。キューに登録されるメッセージ、および応答の処理方法についてのさらに詳しい情報は、TPQUEDEF-REC 構造体で定義されます。

TPENQUEUE() の引数

TPENQUEUE(3cbl) の処理を制御するいくつかの重要な引数があります。その一部について、以下に説明します。

TPENQUEUE():TPQUEDEF-REC 引数内の QSPACE-NAME

QSPACE-NAME は、管理者によって既に作成されたキュー・スペースを識別します。サーバがコンフィギュレーション・ファイルの SERVERS セクションで定義されている場合、そのサーバが提供するサービス名は、実際のキュー・スペース名 (GROUPS セクションの OPENINFO パラメータの一部として指定されます) のエイリアスになります。たとえば、アプリケーションがサーバ TMQUEUE を使用する場合、QSPACE-NAME 引数が指す値は、TMQUEUE が宣言するサービス名になります。サービスのエイリアスが何も定義されていない場合、デフォルトのサービス名はサーバ名 TMQUEUE と同じになります。その場合、コンフィギュレーション・ファイルには次の記述されています。

TMQUEUE 
SRVGRP = QUE1 SRVID = 1 
GRACE = 0 RESTART = Y CONV = N 
CLOPT = "-A"
または
CLOPT = "-s TMQUEUE" 

サーバ・グループ QUE1 のエントリには、OPENINFO パラメータを使用して、リソース・マネージャ、デバイスのパス名、およびキュー・スペース名を指定します。クライアント・プログラムにおける QSPACE-NAME 引数は、次のように記述されます。

 01 TPQUEDEF-REC.
COPY TPQUEDEF.
01 TPTYPE-REC.
COPY TPTYPE.
01 TPSTATUS-REC.
COPY TPSTATUS.
01 USER-DATA-REC PIC X(100).
*
*
*
MOVE LOW-VALUES TO TPQUEDEF-REC.
MOVE "TMQUEUE" TO QSPACE-NAME IN TPQUEDEF-REC.
MOVE "STRING" TO QNAME IN TPQUEDEF-REC.
SET TPTRAN IN TPQUEDEF-REC TO TRUE.
SET TPBLOCK IN TPQUEDEF-REC TO TRUE.
SET TPTIME IN TPQUEDEF-REC TO TRUE.
SET TPSIGRSTRT IN TPQUEDEF-REC TO TRUE.
MOVE LOW-VALUES TO TPTYPE-REC.
MOVE "STRING" TO REC-TYPE IN TPTYPE-REC.
MOVE LENGTH OF USER-DATA-REC TO LEN IN TPTYPE-REC.
CALL "TPENQUEUE" USING
TPQUEDEF-REC
TPTYPE-REC
USER-DATA-REC
TPSTATUS-REC.

TMQUEUE(5) リファレンス・ページの例では、サーバを作成してコンフィギュレーション・ファイルで指定する際に、サービスのエイリアスを指定する方法が示されています。「サンプル・アプリケーション」 のサンプル・プログラムでも、サービスのエイリアスが指定されています。

TPENQUEUE():TPQUEDEF-REC 引数内の QNAME

キュー・スペースで、メッセージ・キューを使用してサービスが呼び出されている場合、メッセージ・キューは、要求の処理に利用できるアプリケーション・サービスに従って名前が付けられます。QNAME には、そのような値が含まれます。QNAME がアプリケーション・サービスではない場合の例外については、「TMQFORWARD を通して呼び出されたサービスからの応答をキューから取り出す手順」 で説明します。

TPENQUEUE():DATA-REC および TPTYPE-REC 引数内の LEN

DATA-REC には、処理対象のメッセージが入ります。TPTYPE-REC 内の LEN は、メッセージの長さを指定します。BEA Tuxedo のレコード・タイプには、LEN を指定する必要がないもの (VIEW など) もあります。その場合、引数は無視されます。TPTYPE-REC 内の RECTYPESPACES の場合、DATA-REC および LEN は無視され、メッセージはデータ部なしでキューに登録されます。

TPENQUEUE():TPQUEDEF-REC の設定値

TPQUEDEF-REC の設定値は、TPENQUEUE() 呼び出しの処理方法を BEA Tuxedoシステムに通知するために使用されます。次は、有効な設定です。

TPNOTRAN

呼び出し元がトランザクション・モードにあり、この設定が使用されていると、メッセージは呼び出し元と同じトランザクション内ではキューに登録されません。この値が設定されたトランザクション・モードの呼び出し元には、トランザクション・タイムアウトが適用されます。それ以外は適用されません。この設定で呼び出されたキューへのメッセージの登録が失敗した場合でも、呼び出し元のトランザクションは影響されません。TPNOTRAN または TPTRAN のいずれかを設定しなければなりません。

TPTRAN

呼び出し元がトランザクション・モードにある場合、この設定はキューへのメッセージの登録が同じトランザクション内で行われることを指定します。TPNOTRAN または TPTRAN のいずれかを設定しなければなりません。

TPNOBLOCK

ブロッキング状態が存在する場合、メッセージはキューに登録されません。TPNOBLOCK が設定されている場合に、メッセージの転送先である内部バッファがいっぱいであるなどのブロッキング状態が存在すると、呼び出しは失敗し、tperrno(5)TPEBLOCK が設定されます。TPNOBLOCK が設定されている場合に、ターゲットのキューが別のアプリケーションによって排他的にオープンされているというブロッキング状態が存在すると、呼び出しは失敗し、tperrno()TPEDIAGNOSTIC が設定され、TPQCTL 構造体の診断フィールドに QMESHARE が設定されます。後者の場合、BEA Tuxedo システム以外の BEA 製品に基づくほかのアプリケーションが、キューイング・サービス API (QSAPI) を使用して読み取りと書き込み、またはそのいずれかを排他的に行うためにキューをオープンしています。TPNOBLOCK または TPBLOCK のいずれかを設定しなければなりません。

TPBLOCK

TPBLOCK が設定されている場合に、ブロッキング状態が存在すると、その状態が解消されるかタイムアウト (トランザクション・タイムアウトまたはブロッキング・タイムアウト) が発生するまで、呼び出し元はブロックされます。TPNOBLOCK または TPBLOCK のいずれかを設定しなければなりません。

TPNOTIME

この設定は、呼び出しにブロッキング・タイムアウトが適用されないことを示します。ただし、トランザクション・タイムアウトは発生する可能性があります。TPNOTIME または TPTIME のいずれかを設定しなければなりません。

TPTIME

この設定は、呼び出しにブロッキング・タイムアウトが適用されることを示します。TPNOTIME または TPTIME のいずれかを設定しなければなりません。

TPSIGRSTRT

この設定は、基となるシステム・コールがシグナルによって中断された場合、中断されたシステム・コールが再度呼び出されることを指定します。TPSIGRSTRT または TPNOSIGRSTRT のいずれかを設定しなければなりません。

TPNOSIGRSTRT

この設定は、基となるシステム・コールがシグナルによって中断された場合、中断されたシステム・コールが再度呼び出されないことを指定します。呼び出しは失敗し、TP-STATUSTPEGOTSIG が設定されます。TPSIGRSTRT または TPNOSIGRSTRT のいずれかを設定しなければなりません。

TPQUEDEF-REC 構造体

TPQUEDEF-REC 構造体には、アプリケーションで使用されるメンバと BEA Tuxedo システムで使用されるメンバがあり、アプリケーション・プログラムとキュー機能間の両方向でパラメータがやり取りされます。この構造体は、COBOL COPY ファイル内で定義されています。TPQUEDEF-REC を呼び出すクライアントは、設定値を使用して、システム側で入力する必要のあるフィールドをマークします。この構造体は、TPDEQUEUE() でも使用されます。一部のメンバは、アプリケーションが TPDEQUEUE() を呼び出すまで使用されません。次のコード例は、この構造体全体を示しています。

TPQUEDEF-REC 構造体

        05 TPBLOCK-FLAG         PIC S9(9) COMP-5. 
88 TPBLOCK VALUE 0. 
88 TPNOBLOCK VALUE 1. 
05 TPTRAN-FLAG PIC S9(9) COMP-5. 
88 TPTRAN VALUE 0. 
88 TPNOTRAN VALUE 1. 
05 TPTIME-FLAG PIC S9(9) COMP-5. 
88 TPTIME VALUE 0. 
88 TPNOTIME VALUE 1. 
05 TPSIGRSTRT-FLAG PIC S9(9) COMP-5. 
88 TPNOSIGRSTRT VALUE 0. 
88 TPSIGRSTRT VALUE 1. 
05 TPNOCHANGE-FLAG PIC S9(9) COMP-5. 
88 TPCHANGE VALUE 0. 
88 TPNOCHANGE VALUE 1. 
05 TPQUE-ORDER-FLAG PIC S9(9) COMP-5. 
88 TPQDEFAULT VALUE 0. 
88 TPQTOP VALUE 1. 
88 TPQBEFOREMSGID VALUE 2. 
05 TPQUE-TIME-FLAG PIC S9(9) COMP-5. 
88 TPQNOTIME VALUE 0. 
88 TPQTIME-ABS VALUE 1. 
88 TPQTIME-REL VALUE 2. 
05 TPQUE-PRIORITY-FLAG PIC S9(9) COMP-5. 
88 TPQNOPRIORITY VALUE 0. 
88 TPQPRIORITY VALUE 1. 
05 TPQUE-CORRID-FLAG PIC S9(9) COMP-5. 
88 TPQNOCORRID VALUE 0. 
88 TPQCORRID VALUE 1. 
05 TPQUE-REPLYQ-FLAG PIC S9(9) COMP-5. 
88 TPQNOREPLYQ VALUE 0. 
88 TPQREPLYQ VALUE 1. 
05 TPQUE-FAILQ-FLAG PIC S9(9) COMP-5. 
88 TPQNOFAILUREQ VALUE 0. 
88 TPQFAILUREQ VALUE 1. 
05 TPQUE-MSGID-FLAG PIC S9(9) COMP-5. 
88 TPQNOMSGID VALUE 0. 
88 TPQMSGID VALUE 1. 
05 TPQUE-GETBY-FLAG PIC S9(9) COMP-5. 
88 TPQGETNEXT VALUE 0. 
88 TPQGETBYMSGIDOLD VALUE 1. 
88 TPQGETBYCORRIDOLD VALUE 2. 
88 TPQGETBYMSGID VALUE 3. 
88 TPQGETBYCORRID VALUE 4. 
05 TPQUE-WAIT-FLAG PIC S9(9) COMP-5. 
88 TPQNOWAIT VALUE 0. 
88 TPQWAIT VALUE 1. 
05 TPQUE-DELIVERY-FLAG PIC S9(9) COMP-5. 
88 TPQNODELIVERYQOS VALUE 0. 
88 TPQDELIVERYQOS VALUE 1. 
05 TPQUEQOS-DELIVERY-FLAG PIC S9(9) COMP-5. 
88 TPQQOSDELIVERYDEFAULTPERSIST VALUE 0. 
88 TPQQOSDELIVERYPERSISTENT VALUE 1. 
88 TPQQOSDELIVERYNONPERSISTENT VALUE 2. 
05 TPQUE-REPLY-FLAG PIC S9(9) COMP-5. 
88 TPQNOREPLYQOS VALUE 0. 
88 TPQREPLYQOS VALUE 1. 
05 TPQUEQOS-REPLY-FLAG PIC S9(9) COMP-5. 
88 TPQQOSREPLYDEFAULTPERSIST VALUE 0. 
88 TPQQOSREPLYPERSISTENT VALUE 1. 
88 TPQQOSREPLYNONPERSISTENT VALUE 2. 
05 TPQUE-EXPTIME-FLAG PIC S9(9) COMP-5. 
88 TPQNOEXPTIME VALUE 0. 
88 TPQEXPTIME-ABS VALUE 1. 
88 TPQEXPTIME-REL VALUE 2. 
88 TPQEXPTIME-NONE VALUE 3. 
05 TPQUE-PEEK-FLAG PIC S9(9) COMP-5. 
88 TPQNOPEEK VALUE 0. 
88 TPQPEEK VALUE 1. 
05 DIAGNOSTIC PIC S9(9) COMP-5. 
88 QMEINVAL VALUE -1. 
88 QMEBADRMID VALUE -2. 
88 QMENOTOPEN VALUE -3. 
88 QMETRAN VALUE -4. 
88 QMEBADMSGID VALUE -5. 
88 QMESYSTEM VALUE -6. 
88 QMEOS VALUE -7. 
88 QMEABORTED VALUE -8. 
88 QMEPROTO VALUE -9. 
88 QMEBADQUEUE VALUE -10. 
88 QMENOMSG VALUE -11. 
88 QMEINUSE VALUE -12. 
88 QMENOSPACE VALUE -13. 
88 QMERELEASE VALUE -14. 
88 QMEINVHANDLE VALUE -15. 
88 QMESHARE VALUE -16. 
05 DEQ-TIME PIC 9(9) COMP-5. 
05 EXP-TIME PIC 9(9) COMP-5. 
05 PRIORITY PIC S9(9) COMP-5. 
05 MSGID PIC X(32). 
05 CORRID PIC X(32). 
05 QNAME PIC X(15). 
05 QSPACE-NAME PIC X(15). 
05 REPLYQUEUE PIC X(15). 
05 FAILUREQUEUE PIC X(15). 
05 CLIENTID OCCURS 4 TIMES PIC S9(9) COMP-5. 
05 APPL-RETURN-CODE PIC S9(9) COMP-5. 
05 APPKEY PIC S9(9) COMP-5. 

次は、TPENQUEUE の入力情報を制御するパラメータの有効な設定です。

TPQTOP

この値を設定すると、キューの順序付けは無効になり、メッセージはキューの先頭に登録されます。この要求は、順序付けを無効にするようにキューが設定されているかどうかによって、使用できない場合があります。デフォルトのキューの順序を使用する場合は、TPQDEFAULT を設定します。TPQTOPTPQBEFOREMSGIDTPQDEFAULT のいずれかを設定しなければなりません。

TPQBEFOREMSGID

この値を設定すると、キューの順序付けが無効になり、メッセージは MSGID によって識別されるメッセージの前に登録されます。この要求は、順序付けを無効にするようにキューが設定されているかどうかによって、使用できない場合があります。デフォルトのキューの順序を使用する場合は、TPQDEFAULT を設定します。TPQTOPTPQBEFOREMSGIDTPQDEFAULT のいずれかを設定しなければなりません。

メッセージ識別子の値は 32 バイト全体が意味を持つので、MSGID で識別される値は、たとえば空白を埋め込むなどして、完全に初期化する必要があります。

TPQTIME-ABS

この値が設定されていると、DEQ-TIME で指定された時間の経過後、メッセージが処理されます。DEQ-TIME は、time(2) または mktime(3C) によって生成された絶対時間値、つまり世界協定時 (UTC) 1970 年 1 月 1 日 00:00:00 から経過した秒数を示します。絶対時間値も相対時間値も設定されていない場合は、TPQNOTIME を設定します。TPQTIME-ABSTPQTIME-RELTPQNOTIME のいずれかを設定しなければなりません。絶対時間は、キュー・マネージャ・プロセスが存在するマシン・クロックによって決定されます。

TPQTIME-REL

この値が設定されていると、キューへの登録が完了してからの相対時間の経過後にメッセージが処理されます。DEQ-TIME は、キューへの登録が完了した後、送信されたメッセージが処理されるまでの遅延秒数を指定します。絶対時間値も相対時間値も設定されていない場合は、TPQNOTIME を設定します。TPQTIME-ABSTPQTIME-RELTPQNOTIME のいずれかを設定しなければなりません。

TPQPRIORITY

この値が設定されていると、メッセージがキューに登録されるときの優先順位が PRIORITY に格納されます。優先順位は、1 以上 100 以下の範囲でなければなりません。数値が高いほど優先順位も高くなり、高い数値のメッセージが低い数値のメッセージより先にキューから取り出されます。優先順位によって順序付けられていないキューでは、この値は参考として使用されます。TPQNOPRIORITY が設定されている場合、デフォルトでメッセージの優先順位が 50 になります。

TPQCORRID

この値が設定されていると、メッセージが TPDEQUEUE() によってキューから取り出されるときに、CORRID に指定された相関識別子の値が使用されます。この識別子は、キューに登録されたすべての応答メッセージまたは異常終了メッセージに付加されるので、アプリケーションは応答を特定の要求に結び付けることができます。相関識別子を使用できない場合は、TPQNOCORRID を設定します。

相関識別子の値は 32 バイト全体が意味を持つので、CORRID に指定される値は、たとえば空白を埋め込むなどして、完全に初期化する必要があります。

TPQREPLYQ

この値が設定されていると、REPLYQUEUE に指定された応答キューが、キューに入れられたメッセージに対応付けられます。メッセージへの応答は、要求メッセージと同じキュー・スペース内の指定されたキューに登録されます。応答キューの名前を使用できない場合は、TPQNOREPLYQ を設定します。

TPQFAILUREQ

この値が設定されていると、FAILUREQUEUE に指定された異常終了キューが、キューに入れられたメッセージに対応付けられます。(1) キューに登録されたメッセージが TMQFORWARD() によって処理され、(2) TMQFORWARD-d オプションで開始され、さらに (3) サービスが異常終了して NULL 以外の応答を返す場合、応答とそれに対応付けられた tpurcode で構成される異常終了メッセージが、元の要求メッセージと同じキュー・スペース内で指定されたキューに登録されます。異常終了キューの名前を使用できない場合は、TPQNOFAILUREQ を設定します。

TPQDELIVERYQOS
TPQREPLYQOS

TPQDELIVERYQOS が設定されていると、TPQUEQOS-DELIVERY-FLAG で指定されたフラグが、メッセージの配信に対するサービスの品質を制御します。相互に排他的なフラグである TPQQOSDELIVERYDEFAULTPERSISTTPQQOSDELIVERYPERSISTENTTPQQOSDELIVERYNONPERSISTENT のいずれかを設定する必要があります。TPQDELIVERYQOS が設定されていない場合は、TPQNODELIVERYQOS を設定する必要があります。TPQNODELIVERYQOS が設定されている場合、ターゲットのキューのデフォルトの配信方針がメッセージに対するサービスの配信品質を指定します。

TPQREPLYQOS が設定されていると、TPQUEQOS-REPLY-FLAG で指定されるフラグが、応答メッセージの配信に対するサービスの品質を制御します。相互に排他的なフラグである TPQQOSREPLYDEFAULTPERSISTTPQQOSREPLYPERSISTENTTPQQOSREPLYNONPERSISTENT のいずれかを設定する必要があります。TPQREPLYQOS フラグは、TMQFORWARD によって処理されるメッセージから応答が返されるときに使用されます。サービスを呼び出すときに TMQFORWARD を使用しないアプリケーションでは、自身の応答メカニズムのヒントとして TPQREPLYQOS フラグを使用できます。

TPQREPLYQOS が設定されていない場合は、TPQNOREPLYQOS を設定する必要があります。TPQNOREPLYQOS が設定されている場合、REPLYQUEUE キューのデフォルトの配信方針が応答に対するサービスの配信品質を指定します。デフォルトの配信方針は、メッセージに対する応答がキューに登録されるときに決定される点に注意してください。つまり、元のメッセージがキューに登録されてから応答が登録されるまでの間に、応答キューのデフォルトの配信方針が変更された場合、応答が最後に登録される時点で有効な方針が使用されます。

次は、有効な TPQUEQOS-DELIVERY-FLAG および TPQUEQOS-REPLY-FLAG のフラグです。

TPQQOSDELIVERYDEFAULTPERSIST
TPQQOSREPLYDEFAULTPERSIST

このフラグは、ターゲットまたは応答のキューで指定されているデフォルトの配信方針を使用して、メッセージが配信されるように指定します。

TPQQOSDELIVERYPERSISTENT
TPQQOSREPLYPERSISTENT

このフラグは、メッセージがディスク・ベースの配信方法を使用して、永続的な記憶域に配信されることを指定します。このフラグが設定されていると、ターゲットまたは応答のキューに指定されたデフォルトの配信方針がこのフラグで上書きされます。

TPQQOSDELIVERYNONPERSISTENT
TPQQOSREPLYNONPERSISTENT

このフラグは、メッセージがメモリ・ベースの配信方法を使用して、非永続的な記憶域に配信されることを指定します。メッセージは、キューから取り出されるまでメモリに登録されたままになります。このフラグが設定されていると、ターゲットまたは応答のキューに指定されたデフォルトの配信方針がこのフラグで上書きされます。

呼び出し元がトランザクション・モードの場合、非永続メッセージは呼び出し元のトランザクション内でキューに登録されます。ただし、システムがシャットダウンやクラッシュした場合、またはキュー・スペースとしての IPC 共用メモリが削除された場合、非永続メッセージは失われます。

TPQEXPTIME-ABS

この値が設定されていると、メッセージに有効期限の絶対時間が適用されます。これは、キューからメッセージが削除される絶対時間です。

有効期限の絶対時間は、キュー・マネージャ・プロセスが存在するマシン・クロックによって決定されます。

有効期限の絶対時間は、EXP-TIME に格納された値で示されます。EXP-TIME は、time(2) または mktime(3C) によって生成された絶対時間、つまり世界協定時 (UTC) 1970 年 1 月 1 日 00:00:00 から経過した秒数に設定されなければなりません。

キューへの登録操作の時間より早い絶対時間が指定されると、操作は成功しますが、メッセージはしきい値の計算の対象になりません。有効期限の時間がメッセージの使用可能時間より前の場合、使用可能時間が有効期限の切れる時間より前になるようにいずれかの時間を変更しない限り、メッセージをキューから取り出すことはできません。また、これらのメッセージがキューからの取り出しの対象になったことがなくても、有効期限が切れるとキューから削除されます。トランザクション中にメッセージの期限が切れてもトランザクションは失敗しません。トランザクション内でキューへの登録、またはキューからの取り出し中に有効期限が切れたメッセージは、トランザクションが終了した時点でキューから削除されます。メッセージの有効期限が切れたことの通知は行われません。

TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONE、または TPQNOEXPTIME のいずれかを設定する必要があります。

TPQEXPTIME-REL

この値が設定されていると、メッセージに有効期限の相対時間が適用されます。これは、メッセージがキューに到達してから、キューから削除されるまでの秒数です。有効期限の相対時間は、EXP-TIME に格納された値で示されます。

有効期限の時間がメッセージの使用可能時間より前の場合、使用可能時間が有効期限の切れる時間より前になるようにいずれかの時間を変更しない限り、メッセージをキューから取り出すことはできません。また、これらのメッセージがキューからの取り出しの対象になったことがなくても、有効期限が切れるとキューから削除されます。メッセージがトランザクション内にあるときに期限切れになった場合、それによってトランザクションが異常終了することはありません。トランザクション内でキューへの登録、またはキューからの取り出し中に有効期限が切れたメッセージは、トランザクションが終了した時点でキューから削除されます。メッセージの有効期限が切れたことの通知は行われません。

TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONETPQNOEXPTIME のいずれかを設定しなければなりません。

TPQEXPTIME-NONE

この値が設定されていると、メッセージの有効期限が無期限になります。このフラグは、ターゲットのキューに対応付けられているデフォルトの有効期限の方針を上書きします。メッセージを削除するには、管理インターフェイスを介してキューから取り出すか、または削除します。TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONETPQNOEXPTIME のいずれかを設定しなければなりません。

TPQNOEXPTIME

この値が設定されていると、ターゲットのキューに対応付けられているデフォルトの有効期限の時間がメッセージに適用されます。TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONETPQNOEXPTIME のいずれかを設定しなければなりません。

このほかに、TPQUEDEF-REC のメンバ APPL-RETURN-CODE にユーザ戻りコードを設定することができます。この値は、メッセージをキューから取り出すために TPDEQUEUE() を呼び出すアプリケーションに返されます。

TPENQUEUE() からの出力では、次のフィールドが TPQUEDEF-REC 構造体に設定されます。

05 DIAGNOSTIC           PIC S9(9) COMP-5.
05 MSGID PIC X(32).

次は、TPENQUEUE()() からの出力情報を制御する TPQUEDEF-REC の有効な設定です。TPENQUEUE() の呼び出し時にこの値が設定されている場合、BEA Tuxedo /Q サーバ TMQUEUE(5) は、レコード内の対応する要素にメッセージ識別子を挿入します。TPENQUEUE() の呼び出し時にこの値が設定されていない場合、TMQUEUE() は、レコード内の対応する要素にメッセージ識別子を挿入しません。

TPQMSGID

この値が設定されている場合に、TPENQUEUE() の呼び出しが成功すると、メッセージ識別子が MSGID に格納されます。メッセージ識別子の値は 32 バイト全体が意味を持つので、MSGID に格納される値は、たとえば NULL 文字を埋め込むなどして、完全に初期化する必要があります。初期化に使用される実際に埋め込まれた文字は、BEA Tuxedo /Q コンポーネントのリリースによって異なります。TPQNOMSGID が設定されている場合、メッセージ識別子は使用できません。

制御構造体の残りのメンバは、TPENQUEUE() への入力では使用されません。

TPENQUEUE() の呼び出しが失敗し、TP-STATUSTPEDIAGNOSTIC が設定された場合、失敗の原因を示す値が DIAGNOSTIC に返されます。次は、返される値です。

[QMEINVAL]

無効な設定値が指定されています。

[QMEBADRMID]

無効なリソース・マネージャ識別子が指定されています。

[QMENOTOPEN]

リソース・マネージャが現在オープンされていません。

[QMETRAN]

呼び出しがトランザクション・モードではないか、または TPNOTRAN を指定して呼び出しが行われたため、キューにメッセージを登録するトランザクションを開始したときに、エラーが発生しました。この診断は、BEA Tuxedo リリース 7.1 以降のキュー・マネージャでは返されません。

[QMEBADMSGID]

無効なメッセージ識別子が指定されています。

[QMESYSTEM]

システム・エラーが発生しました。エラーの正確な内容がログ・ファイルに書き込まれます。

[QMEOS]

オペレーティング・システムのエラーが発生しました。

[QMEABORTED]

操作がアボートされました。アボートされた操作がグローバル・トランザクション内で実行されていた場合、グローバル・トランザクションは「ロールバックのみ」とマークされます。それ以外の場合、キュー・マネージャは操作をアボートします。

[QMEPROTO]

トランザクションの状態がアクティブではないときに、キューへの登録が行われました。

[QMEBADQUEUE]

無効または削除されたキューの名前が指定されています。

[QMENOSPACE]

キュー上に領域がないなどリソース不足が原因で、サービスの品質 (永続的な記憶域または非永続的な記憶域) が指定されたメッセージがキューに登録されませんでした。次のいずれかのリソース設定を超えると、QMENOSPACE が返されます。(1) キュー・スペースに割り当てられたディスク容量 (永続的)、(2) キュー・スペースに割り当てられたメモリ容量 (非永続的)、(3) 同時にアクティブ状態になるトランザクションの最大数 (キュー・スペースで許容される数であることが必要です)、(4) キュー・スペースに一度に入れることができる最大メッセージ数、(5) キューイング・サービス・コンポーネントが処理できる並列アクションの最大数、または (6) キューイング・サービス・コンポーネントを同時に使用できる認証されたユーザの最大数。

[QMERELEASE]

新機能がサポートされていないバージョンの BEA Tuxedo システムのキュー・マネージャに対して、メッセージのキューへの登録が試みられました。

[QMESHARE]

指定されたキューのメッセージの登録時に、そのキューが別のアプリケーションによって 排他的にオープンされています。別のアプリケーションとは、BEA Tuxedo システム以外の BEA 製品に基づくもので、キューをオープンして、キューイング・サービス API (QSAPI) を使用して読み取りおよび書き込み、またはそのいずれかを排他的に行っています。

キューの順序の無効化

キューの作成時に、管理者が TPENQUEUE() 呼び出しでキュー上のメッセージの順序を無効にできるようにした場合、次の 2 つの方法でこの無効機能を利用できます。この 2 つの方法は、相互に排他的です。TPQTOP を設定すると、メッセージをキューの先頭に置くことができます。または、TPQBEFOREMSGIDMSGID に既存メッセージの ID を設定して、メッセージを特定の既存のメッセージの前に置くこともできます。この方法では、メッセージ ID を使用できるように、以前の呼び出しで取得されたメッセージ ID が保存されていることが必要です。管理者は、キューでサポートされている方法を通知する必要があります。キューは、この 2 つのいずれかまたは両方を使用できるように、あるいはどちらも使用できないように作成できます。

キューの優先順位の無効化

PRIORITY に値を設定して、メッセージの優先順位を指定することができます。この値は、1 以上 100 以下の範囲でなければなりません。数値が高いほど優先順位も高くなります。つまり、UNIX の nice コマンドで指定される値とは異なります。キューの順序付けパラメータの中に PRIORITY が含まれていない場合、ここで優先順位を設定しても取り出しの順序には影響しません。ただし、優先順位の値は保持されるので、メッセージがキューから取り出されるときに検査されます。

メッセージの使用可能時間の設定

DEQ-TIME に、絶対時間またはキューへの登録が完了してからの相対時間として、メッセージが処理されるまで時間を指定できます。 TPQTIME-ABS または TPQTIME-REL のいずれかを設定して、値の処理方法を指定できます。キューは、time を順序付けの基準として作成することができます。その場合、メッセージは使用可能時間によって順序付けされます。

次のコード例は、相対時間を使用して、メッセージをキューに登録する方法を示しています。このメッセージは、60 秒後に処理対象になります。

  01  TPQUEDEF-REC. 
COPY TPQUEDEF. 
01 TPTYPE-REC. 
COPY TPTYPE. 
01 TPSTATUS-REC. 
COPY TPSTATUS. 
01 USER-DATA-REC PIC X(100). 
* 
* 
* 
MOVE LOW-VALUES TO TPQUEDEF-REC. 
MOVE "QSPACE1" TO QSPACE-NAME IN TPQUEDEF-REC. 
MOVE "Q1" TO QNAME IN TPQUEDEF-REC. 
SET TPTRAN IN TPQUEDEF-REC TO TRUE. 
SET TPBLOCK IN TPQUEDEF-REC TO TRUE. 
SET TPTIME IN TPQUEDEF-REC TO TRUE. 
SET TPSIGRSTRT IN TPQUEDEF-REC TO TRUE. 
SET TPQDEFAULT IN TPQUEDEF-REC TO TRUE. 
SET TPQTIME-REL IN TPQUEDEF-REC TO TRUE. 
MOVE 60 TO DEQ-TIME IN TPQUEDEF-REC. 
SET TPQNOPRIORITY IN TPQUEDEF-REC TO TRUE. 
SET TPQNOCORRID IN TPQUEDEF-REC TO TRUE. 
SET TPQNOREPLYQ IN TPQUEDEF-REC TO TRUE. 
SET TPQNOFAILUREQ IN TPQUEDEF-REC TO TRUE. 
SET TPQMSGID IN TPQUEDEF-REC TO TRUE. 
MOVE LOW-VALUES TO TPTYPE-REC. 
MOVE "STRING" TO REC-TYPE IN TPTYPE-REC. 
MOVE LENGTH OF USER-DATA-REC TO LEN IN TPTYPE-REC. 
CALL "TPENQUEUE" USING 
TPQUEDEF-REC 
TPTYPE-REC 
USER-DATA-REC 
TPSTATUS-REC.

TPENQUEUE() およびトランザクション

TPENQUEUE() の呼び出し元がトランザクション・モードにある場合に、TPTRAN が設定されていると、キューへの登録は呼び出し元のトランザクション内で行われます。呼び出し元は、TPENQUEUE() が成功したか失敗したかによって、メッセージがキューに登録されたかどうかを判断できます。呼び出しが正常に行われると、メッセージがキューに登録されたことが保証されます。呼び出しが失敗すると、メッセージがキューに登録された部分も含めて、トランザクションがロールバックされます。

TPENQUEUE() の呼び出し元がトランザクション・モードにない場合、または TPNOTRAN が設定されている場合、メッセージは呼び出し元のトランザクションとは別のトランザクションでキューに登録されます。tpenqueue() への呼び出しが正常な戻り値を返した場合、メッセージがキューに登録されたことが保証されます。TPENQUEUE() の呼び出しが通信エラーまたはタイムアウトによって失敗した場合は、その障害がメッセージ登録の前に発生したのか後に発生したのか、呼び出し元には判断できません。

呼び出し元がトランザクション・モードにないときに TPNOTRAN を指定しても意味がありません。

 

先頭へ戻る 前のトピックへ 次のトピックへ