bea ホーム | 製品 | dev2dev | support | askBEA
BEA Logo Tuxedo
 ドキュメントのダウンロード   サイトマップ   用語集 
検索
0

Tuxedo COBOL リファレンス

 Previous Next Contents View as PDF  

TPRECV(3cbl)

名前

TPRECV()−会話接続でメッセージを受信する

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPRECV" USING
TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

機能説明

TPRECV() は、別のプログラムからオープン接続を介してデータを受け取るときに使用します。COMM-HANDLE は、データを受け取るオープン接続を指定します。COMM-HANDLE は、TPCONNECT() または TPSVCSTART() から返される通信ハンドルです。DATA-REC は、メッセージが読み込まれる場所を指定し、入力時には LENDATA-REC に移動される最大バイト数を示します。

正常終了の場合、およびいくつかのイベント・タイプの場合、LEN には DATA-REC に移動された実際のバイト数が入ります。REC-TYPE および SUB-TYPE には、それぞれデータのタイプおよびサブタイプが入っています。メッセージが DATA-REC より大きい場合は、DATA-REC にはこのレコードに入るバイト数分のみが入ります。応答の残りは破棄され、TPRECV()TPTRUNCATE を設定します。

正常終了時に LEN0 である場合は、応答にはデータ部がなく、DATA-REC は変更されていません。入力時に LEN0 にすると、エラーになります。

TPRECV() は、接続の制御を持たないプログラムしか出せません。

次に、TPSVCDEF-REC の有効な設定の一覧を示します。

TPNOCHANGE

この設定を使用すると、DATA-REC のタイプは変更できません。すなわち、受信したメッセージのタイプとサブタイプは、それぞれ REC-TYPE および SUB-TYPE と一致しなければなりません。TPNOCHANGE または TPCHANGE のいずれかが設定されていなければなりません。

TPCHANGE

受信したメッセージのタイプとサブタイプの両方または片方は、受け取り側が着信レコードのタイプを識別するかぎりは、それぞれ REC-TYPE および SUB-TYPE で指定されているものと異なっていることが可能です。TPNOCHANGE または TPCHANGE のいずれかが設定されていなければなりません。

TPNOBLOCK

TPRECV() はデータが到着するまで待機します。すでにデータが受信できる状態であると、TPRECV() はデータを取り込んで終了します。TPNOBLOCK または TPBLOCK のいずれかが設定されていなければなりません。

TPBLOCK

TPBLOCK が設定されていて、データが受信できる状態である場合は、呼び出し元は、データが到着するまでブロックします。TPNOBLOCK または TPBLOCK のいずれかが設定されていなければなりません。

TPNOTIME

この設定は、呼び出し元が無制限にブロックでき、ブロッキング・タイムアウトの影響を受けないようにすることを指定します。ただし、トランザクション・タイムアウトは引き続きプログラムに対して有効です。TPNOTIME または TPTIME のいずれかが設定されていなければなりません。

TPTIME

このフラグは、ブロッキング条件が存在し、ブロッキング時間に達すると、呼び出し元がブロッキング・タイムアウトを受け取ることを示します。TPNOTIME または TPTIME のいずれかが設定されていなければなりません。

TPSIGRSTRT

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

TPNOSIGRSTRT

ルーチン内部のシステム・コールがシグナルによって中断された場合、中断されたシステム・コールは再開されず、この呼び出しは異常終了します。TPNOSIGRSTRT または TPSIGRSTRT のいずれかが設定されていなければなりません。

通信ハンドル COMM-HANDLE に対してイベントが存在する場合、TPRECV() は終了し、TP-STATUSTPEEVENT() を設定します。イベントのタイプは、TPEVENT() に返されます。TPEV-SVCSUCCTPEV-SVCFAIL および TPEV-SENDONLY イベントとともに、データを受け取ることができます。TPRECV() の有効なイベントを次に示します。

TPEV-DISCONIMM

会話の従属側が受け取るこのイベントは、その会話の起動元が TPDISCON() により即時切断要求を出したこと、または、会話の起動元がまだオープンしている接続について TPRETURN() または TPCOMMIT() を出したときにエラーが発生したことを示します。このイベントは、通信エラー (サーバ、マシン、ネットワークの障害など) により接続が切断されたときにも起動元またはその従属側に返されます。これは即時切断通知 (つまり、正常ではなく中途の終了) であるため、処理途中のデータは失われます。2 つのプログラムが同じトランザクションに参加していた場合、そのトランザクションは中途終了マークが付けられます。COMM-HANDLE は無効になります。

TPEV-SENDONLY

接続の他方の側にあるプログラムは、接続の制御を放棄しました。このイベントの受信側はデータを送信することはできますが、制御権を放棄するまではデータを受信することはできません。

TPEV-SVCERR

このイベントは、会話の起動元が受け取るもので、会話の従属側が TPRETURN() を出したことを示します。TPRETURN() によって、サービスが正常に終了できないようなエラーが検出されました。たとえば、不正な引数が TPRETURN() に渡されていたり、TPRETURN() が、そのサービスが別の従属側にオープン接続を持っている最中に呼び出されている可能性があります。このイベントの性質上、アプリケーションが定義したデータや戻りコードは返されません。この接続は切断され、COMM-HANDLE は無効になります。このイベントが、受信側のトランザクションの一部として発生すると、そのトランザクションに中途終了マークが付けられます。

TPEV-SVCFAIL

このイベントは、会話の起動元が受け取るもので、会話の他方の側の下位サービスがアプリケーションで定義されるとおり正常に終了しなかったことを示します。つまり、TPRETURN()TPFAIL() または TPEXIT() を設定して呼び出されています。TPRETURN() が呼び出されたときに従属サービスがこの接続の制御権をもっている場合、アプリケーションで定義されている戻り値およびレコードを接続の起動元に渡すことができます。サービス・ルーチンの終了処理の一部として、サーバはこの接続を切断しています。このため、COMM-HANDLE は無効になります。このイベントが、受信側のトランザクションの一部として発生すると、そのトランザクションに中途終了マークが付けられます。

TPEV-SVCSUCC

このイベントは、会話の起動元が受け取るもので、会話の他方の側の下位サービスがアプリケーションで定義されるとおり正常に終了したことを示します。つまり、TPRETURN()TPSUCCESS() を設定して呼び出されています。サービス・ルーチンの終了処理の一部として、サーバはこの接続を切断しています。このため、COMM-HANDLE は無効になります。受信側がトランザクション・モードにいる場合、そのトランザクションをコミットする (それが起動元でもある場合) か、中途終了して、サーバが行った作業内容 (トランザクション・モードである場合) をコミットあるいは中途終了させます。

戻り値

TPRECV() は正常終了時には、TP-STATUS に [TPOK] を設定します。TP-STATUS に [TPEEVENT] が設定され、TPEVENT()TPEV-SVCSUCC または TPEV-SVCFAIL の場合、APPL-RETURN-CODE には、TPRETURN() の一部として送信されたアプリケーション定義の値が入ります。着信メッセージの大きさが入力時に LEN に指定されたより大きい場合、TPTRUNCATE() が設定され、LEN 分のデータのみが DATA-REC に移動されて残りのデータは破棄されます。

エラー

次の条件が発生すると、TPRECV() は異常終了し、TP-STATUS に次の値を設定します。特に説明がなければ、この障害は呼び出し元のトランザクションには影響しません。

[TPEINVAL]

無効な引数が指定されました (たとえば、TPSVCDEF-REC が無効である場合など)。

[TPEOTYPE]

着信メッセージのタイプとサブタイプが呼び出し元が認識しているものでありません。あるいは、TPNOCHANGE が設定されているが、REC-TYPE および SUB-TYPE が着信メッセージのタイプおよびサブタイプと一致しません。会話が呼び出し元のトランザクションの一部である場合には、着信メッセージが破棄されるので、そのトランザクションに中途終了マークが付けられます。

[TPEBADDESC]

COMM-HANDLE に無効な通信ハンドルが入っています。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらず TPRECV() が試行されたことを示します。

呼び出し元がトランザクション・モードにある場合、トランザクションはすでに「ロールバックのみ」になっているか、またはタイムアウトが発生しています (中途終了マークが付けられる)。呼び出し元がトランザクション・モードにない場合、ブロッキング・タイムアウトが発生しています。ブロッキング・タイムアウトは、TPBLOCKTPTIME の両方が指定された場合にのみ発生します。いずれの場合も、DATAREC は変更されません。

トランザクション・タイムアウトが発生すると、1 つの例外を除き、トランザクションがアボートされない限り、新しいリクエストを送信したり、未処理の応答を受信しようとしても、TPETIME で異常終了します。例外は、ブロックされず、応答を期待せず、かつ呼び出し元のトランザクションのために送信されない要求 (つまり、TPNOTRANTPNOBLOCK および TPNOREPLY が設定された状態で TPACALL() が呼び出される場合) です。

ATMI 呼び出しがトランザクション内部で失敗すると、そのトランザクションは TX_ROLLBACK_ONLY 状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降の ATMI 呼び出しは、TPETIME で異常終了します (前の段落で説明した例外を除く)。

[TPEEVENT]

イベントが発生し、そのタイプが TPEVENT() に記録されます。

[TPEBLOCK]

ブロッキング状態のため、TPNOBLOCK が指定されました。

[TPGOTSIG]

シグナルを受け取りましたが、TPSIGRSTRT が指定されていませんでした。

[TPEPROTO]

TPRECV() が不正なコンテキストで呼び出されました (たとえば、呼び出しプログラムがデータの送信のみを行えるよう接続が確立されている場合など)。

[TPESYSTEM]

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

[TPEOS]

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

使用法

TPRETURN() が呼び出されたとき、サーバは、アプリケーション定義の戻り値および型付きレコードを渡すことができます。この戻り値は APPL-RETURN-CODE にあり、レコードは、DATA-REC にあります。

関連項目

TPCONNECT(3cbl)TPDISCON(3cbl)TPSEND(3cbl)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy