Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


TPACALL

〈このページの構成〉

名称

リクエスト/レスポンス型サービスの呼び出し

形式

01 TPSVCDEF-REC.
   COPY TPSVCDEF.
01 TPTYPE-REC.
   COPY TPTYPE.
01 DATA-REC.
   COPY Data record definition.
01 TPSTATUS-REC.
   COPY TPSTATUS.
 
CALL "TPACALL" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

機能

TPACALLは,SERVICE-NAMEで示すサービスにサービス要求のメッセージを送信します。DATA-RECは,送信するレコードです。LENには,送信するデータであるDATA-RECの長さを設定します。

Note:DATA-RECが長さを指定する必要がないレコード型の場合は,LENは無視されます(0にしてください)。DATA-RECが長さを指定する必要があるレコード型の場合は,LENには0を設定しないでください。REC-TYPEにsubtypeがないレコード型の場合は,SUB-TYPEは無視されます(SPACES(空白)にしてください)。REC-TYPEがSPACES(空白)の場合は,DATA-RECとLENは無視されて,サービス要求はデータ部がないデータで送信されます。REC-TYPEとSUB-TYPEは,SERVICE-NAMEで示すサービスで認識しているtypeとsubtypeのうちのどれか一つに必ず一致させてください。

Note:トランザクションモードから送信した,それぞれのサービス要求に対する応答は,最終的には必ず受信するようにしてください。

『データ領域』

『●TPSVCDEF-REC

TPACALLの動作を示す値を設定します。ここに設定した値によって,リターンする値が決まります。設定する値と意味は,以降説明します。』

『●TPTYPE-REC

送信データのレコード型と,subtypeのレコード名を示します。』

『●DATA-REC

送信データを示します。』

『●TPSTATUS-REC

TPACALLの実行結果を示すリターン値が設定されます。』

TPSVCDEF-RECには,次に示す値を設定します。

TPNOTRAN

呼び出し側がトランザクションモードで,かつ この値を設定している場合,起動されたSERVICE-NAMEは,呼び出し側のトランザクションの一部にはなりません。呼び出し側がトランザクションモードで,かつSERVICE-NAMEがトランザクション処理ができないサーバに属している場合は,この値を必ず設定してください。呼び出し側がトランザクションモードであれば,この値が設定されていても,トランザクションタイムアウトは起こります(トランザクションモードでなければ起こりません)。この値で起動されたサービスが失敗しても,呼び出し側のトランザクションには影響しません。TPNOTRANまたはTPTRANのどちらかを,必ず設定してください。

TPTRAN

呼び出し側がトランザクションモードで,かつ,この値を設定している場合,起動されたSERVICE-NAMEは,呼び出し側のトランザクションの一部になります。呼び出し側がトランザクションモードでない場合は,この値を設定しても無視されます。TPNOTRANまたはTPTRANのどちらかを,必ず設定してください。

TPNOREPLY

サービス要求に対する応答が不要であることを,TPACALLに設定します。TPNOREPLYを設定すると,TPACALLの成功時にはTPOKをリターンしてCOMM-HANDLEに0を設定します。この0は,通信ハンドルとしては意味を持ちません。呼び出し側がトランザクションモードの場合は,TPTRANと一緒に設定してもこの値は使えません。TPNOREPLYまたはTPREPLYのどちらかを,必ず設定してください。

TPREPLY

サービス要求に対する応答が必要であることを,TPACALLに設定します。TPREPLYを設定すると,TPACALLの成功時にはTPOKをリターンしてCOMM-HANDLEに通信ハンドルとして有効な値を設定します。呼び出し側がトランザクションモードの場合は,TPTRANと一緒に設定してください。TPNOREPLYまたはTPREPLYのどちらかを,必ず設定してください。

TPNOBLOCK

ブロッキング状態の場合(例えば,送信しようとするメッセージで内部バッファが満杯),サービス要求は送信されません。TPNOBLOCKまたはTPBLOCKのどちらかを,必ず設定してください。

TPBLOCK

TPBLOCKを設定していて,ブロッキング状態のときは,呼び出し側は状況が収まるか,タイムアウト(トランザクション,またはブロッキングタイムアウト)が起こるまで,ブロッキングしています。TPNOBLOCKまたはTPBLOCKのどちらかを,必ず設定してください。

TPNOTIME

呼び出し側を無期限にブロックして,ブロッキングタイムアウトが起こらないことを意味します。トランザクションタイムアウトは起こります。TPNOTIMEまたはTPTIMEのどちらかを,必ず設定してください。

TPTIME

ブロッキング状態になった場合,ブロッキングタイムアウトの時間に達したときにブロッキングタイムアウトの通知を受け取ることを意味します。TPNOTIMEまたはTPTIMEのどちらかを,必ず設定してください。

TPSIGRSTRT

シグナルが実行中のシステムコールを中断したら,中断したシステムコールを再び呼びます。TPSIGRSTRTまたはTPNOSIGRSTRTのどちらかを,必ず設定してください。

TPNOSIGRSTRT

シグナルが実行中のシステムコールを中断したら,中断したシステムコールを再び呼ばないでルーチンは失敗します。TPSIGRSTRTまたはTPNOSIGRSTRTのどちらかを,必ず設定してください。

リターン値

成功した場合,TPACALLはTP-STATUSにTPOKを設定します。さらに,TPSVCDEF-RECにTPREPLYを設定している場合は,TPACALLはCOMM-HANDLEに有効な通信ハンドルをリターンします。この通信ハンドルは,サービス要求の応答を受信するために使います。

エラー

次のような場合,TPACALLはエラーリターンして,次のうちどれか一つの値をTP-STATUSに設定します。特に示さないかぎり,失敗は呼び出し側のトランザクションに影響を与えません。

TPEINVAL

間違った引数が与えられました(例えば,TPSVCDEF-RECに設定した値が間違っている)。

TPENOENT

SERVICE-NAMEで示すサービスが存在しないので,送信できません。

TPEITYPE

REC-TYPEとSUB-TYPEの組み合わせが,SERVICE-NAMEで使える形式ではありません。

TPELIMIT

完了していない非同期の送信要求が最大数に達したので,呼び出し側の要求は送信されません。

TPETRAN

SERVICE-NAMEがトランザクション処理ができないサーバに属しているのに,TPTRANを設定しています。

TPETIME

タイムアウトが起こりました。呼び出し側がトランザクションモードの場合は,これはトランザクションタイムアウトで,トランザクションはrollback_only状態となります。そうでない場合は,TPNOBLOCKもTPNOTIMEも設定されていない状態でブロッキングタイムアウトが起こったことを意味します。トランザクションタイムアウトが起こった場合は,トランザクションをロールバックするまでは,新しく送信しようとしていた送信や,完了していない応答は,TPETIMEでエラーリターンします。

TPEBLOCK

TPNOBLOCKを設定したTPACALLで送信したときに,ブロッキング状態になりました。

TPEGOTSIG

シグナルは受信されましたが,TPNOSIGRSTRTを設定しています。

TPEPROTO

TPACALLが間違った状況で呼ばれました。

TPESYSTEM

コミュニケーションリソースマネジャシステムでエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。

TPEOS

オペレーティングシステムにエラーが起こりました。厳密なエラーの性質は,product-specificな方法で定義されます。

関連項目

TPCALL,TPCANCEL,TPGETRPLY

『OpenTP1で使う場合の注意事項』

  1. 『該当バージョンのOpenTP1では,TPNOBLOCKの設定は無効となります。そのため,TPEBLOCKがTP-STATUSに返ることはありません。OpenTP1では,ブロッキング状態のため通信ができない場合は,ネットワークダウンが原因で通信ができない場合と同様に,TPESYSTEMをリターンする仕様となっています。』

  2. 『該当バージョンのOpenTP1では,TPNOTIMEの設定は無効となります。』

  3. 『TPSIGRSTRTの設定は無効となります。この設定の有無に関係なく,シグナル受信時には,中断したシステムコールを再び呼びます。TPEGOTSIGがリターンすることはありません。』

  4. 『該当バージョンのOpenTP1では,TPEITYPEはリターンされません。SERVICE-NAMEで使えない型のレコードを渡した場合,TPACALLは正常リターンしますが,TPGETRPLYを呼び出した時点でTPESYSTEMまたはTPESVCERRがリターンされて,エラーであることがわかります。もし呼び出し側がトランザクションモードであれば,rollback_only状態となります。』

  5. 『OpenTP1では,トランザクションタイムアウトが起こったときには,そのプロセスは異常終了します。そのため,TPETIMEがリターンされるのは,ブロッキングタイムアウトの場合だけとなります。』

  6. 『該当バージョンのOpenTP1では,ロールバックする必要があるレコードは,X/Openで特に指定がないかぎり,TPESYSTEMとしています。ただし,TPESYSTEMがリターンしても,rollback_only状態とならない場合もあります。』

  7. 『該当バージョンのOpenTP1では,TPELIMITはリターンされません。』

  8. 『TP1/NET/OSI-TP-Extendedを使ったOSI TP通信をする場合,送信するデータの長さはNET/Library共通定義の NETバッファグループ定義 nettbufにあるlengthオペランドに指定した値を超えないようにしてください。』