ATMI COBOL関数リファレンス

     前  次    新規ウィンドウで目次を開く    PDFとして表示 - 新規ウィンドウ  Adobe Readerを取得 - 新規ウィンドウ
コンテンツはここから始まります

セクション3(cbl) - COBOL関数

表1 Oracle Tuxedo ATMI COBOL関数
名前
説明
COBOL ATMIについて紹介する
フィールド化バッファを初期化
フィールド化バッファからCOBOL構造体にコピーする
C構造体からフィールド化バッファにコピーする
現在のOracle Tuxedo ATMIのトランザクションの中断
サービスへのメッセージの非同期送信を行うルーチン
サービス名の公開を行うルーチン
Oracle Tuxedo ATMIのトランザクションを開始するルーチン
名前によって通知をブロードキャストする
サービスへのメッセージの同期送信を行うルーチン
未処理の応答の通信ハンドルを取り消す
Oracle Tuxedo ATMIアプリケーションへの結合に認証が必要かどうかをチェックする
非請求メッセージをチェックする
Oracle Tuxedo ATMIのリソース・マネージャのクローズ
現在のOracle Tuxedo ATMIのトランザクションのコミット
会話接続の確立
キューからメッセージを取り出すルーチン
会話接続の切断
メッセージをキューに登録するルーチン
Oracle Tuxedo ATMIのサービス・リクエストを別のルーチンに転送
以前に設定された1秒あたりのブロック時間値を取得するルーチン
現在のアプリケーション関連のコンテキスト識別子を取り出す
Oracle Tuxedo ATMIのトランザクションの進行状況のチェック
非同期メッセージからの応答の獲得
非請求メッセージの獲得
サービス・リクエストの優先度を獲得
Oracle Tuxedo ATMIアプリケーションに結合する
前にオープンされたキー・ハンドルをクローズ
キー・ハンドルに関連付する情報を獲得
デジタル署名生成、メッセージの暗号化、またはメッセージの復号化のためのキー・ハンドルをオープン
キー・ハンドルに関連付けられている省略可能な属性パラメータを設定
クライアント識別子により通知を送信する
Oracle Tuxedo ATMIのリソース・マネージャのオープン
イベントを通知
会話接続でメッセージを受信する
グローバル・トランザクションを再開
Oracle Tuxedo ATMIのサービス・ルーチンからのリターン
複数のRMサーバー・グループで構成された特定のRMをクローズするルーチン
特定のRM内のトランザクション・ブランチのかわりに実行された現在の処理を終了するルーチン
複数のRMサーバー・グループで構成された特定のRMをオープンするルーチン
MRMサーバー内の特定のRMのトランザクション・ブランチのかわりに処理を開始するルーチン
潜在的なブロッキングAPIのブロック時間値を秒単位で設定するルーチン
TPCOMMITの終了時期の設定
会話接続でメッセージを送信するルーチン
現在のアプリケーション関連にコンテキスト識別子を設定
非請求メッセージの処理方法の設定
サービス・リクエストの優先度の設定
イベントにサブスクライブ
グローバル・トランザクションを一時停止
Oracle Tuxedo ATMIのサービスの開始
Oracle Tuxedo ATMIのサーバーを終了するルーチン
Oracle Tuxedo ATMIのサーバーを初期化するルーチン
アプリケーションを分離
サービス名の公開を取り消すルーチン
イベントへのサブスクライブを取り消す
グローバル・トランザクションを開始
リソース・マネージャ・セットをクローズ
トランザクションのコミット
グローバル・トランザクション情報を返す
リソース・マネージャ・セットをオープン
トランザクションのロールバック
commit_return特性を設定
transaction_control特性を設定
transaction_timeout特性を設定
Oracle Tuxedo ATMIの中央イベント・ログへのメッセージの書込み

 


COBOLアプリケーション・トランザクション・モニター・インタフェースの紹介

説明

アプリケーション・トランザクション・モニター・インタフェース(ATMI)は、COBOLアプリケーションとトランザクション処理システムとの間に介在し、 ATMIインタフェースと呼ばれています。このマニュアル・ページでは、ATMIインタフェースのCOBOL言語バインディングについて説明します。このインタフェースは、リソースのオープンとクローズ、トランザクションの管理、レコード・タイプの管理、リクエスト/レスポンスや会話サービス・コールの呼び出しなどを行う各種のルーチンで構成されています。

通信パラダイム

ATMIマニュアル・ページに記述されているルーチン群を読めば、これらがコミュニケーションのためのモデルであることが分かります。このモデルは、クライアント・プログラムとサーバー・プログラムがリクエストおよび応答の各メッセージを使用していかにコミュニケートできるかという観点から表現されています。

コミュニケーションの基本的パラダイムとして、リクエスト/レスポンス型と会話型の2つがあります。リクエスト/レスポンス型サービスは、サービス・リクエストとそれに関わるデータによって呼び出されます。リクエスト/レスポンス型サービスは、リクエストを1つだけ受け取ることができ(該当サービス・ルーチンに入った時点で)、かつレスポンスも1つだけ送信することができます(該当サービス・ルーチンから戻った時点で)。一方、会話サービスは接続リクエストによって呼び出されます。このとき、オープンされた接続を参照する手段(つまり、以後の接続ルーチンを呼び出す際に使用されるハンドル)が必要です。接続が確立され、サービス・ルーチンが呼び出されると、以降、接続プログラムあるいは会話型サービスは、その接続が解除されるまでアプリケーションで定義されたようにデータの送受信を行えるようになります。

なお、プログラムはリクエスト/レスポンスと会話によるコミュニケーションのいずれも行うことができますが、両方のサービス・リクエストを受け付けることはできません。以下の項では、これら2種類の通信パラダイムの詳細を説明します。

注意: Oracle Tuxedo ATMIのドキュメントでは、様々な場所でスレッドについて説明しています。Oracle TuxedoシステムはCOBOLでのマルチスレッド化をサポートしていないので、「スレッド」という用語は、状況に応じてプロセス全体またはコンテキストのいずれかを指しているものと考えてください。例:

クライアントおよびサーバーに対するOracle Tuxedoのリクエスト/レスポンス・パラダイム

リクエスト/レスポンスによるコミュニケーションの場合、クライアントはリクエストを送り、応答を受け取ることができる1つのプロセスと定義されています。定義によれば、クライアントはリクエストを受け取ったり、応答を送ったりすることはできません。そのかわり、クライアントはいくつでもリクエストを送ることができ、またそれと同時に応答を待ったり、あるいは適宜ある一定数の応答を受け取ったりすることができます。場合によっては、クライアントは応答を必要としないリクエストを送ることもできます。TPINITIALIZE()TPTERM()を使用すれば、クライアントはOracle Tuxedo ATMIのアプリケーションと結合および分離することができます。

一方、リクエスト/レスポンス型サーバーは一度に1つのサービス・リクエストを受け取り、そのリクエストに対して1つの応答を返すことができるプログラムと定義されています。サーバーは特定のリクエストを処理しながら、一方でリクエスト/レスポンス型リクエストあるいは会話型リクエストを出し、それらの応答を受け取ることにより、クライアントのように働くこともできます。サーバーはこうした能力の故に、リクエスタと呼ばれることもあります。ただし、クライアント・プログラムとサーバー・プログラムはどちらもリクエスタになることができます(実際、クライアントはリクエスタ以外の何物でもありません)。

リクエスト/レスポンス型サーバーは別のリクエスト/レスポンス型サーバーにリクエストを送る(転送する)ことができます。この場合、最初のサーバーは受け取ったリクエストを別のサーバーに渡すだけで、応答を受け取ることは期待しません。この連鎖の中の最後のサーバーがそのリクエストに対する応答をもとのリクエスタに送ります。この転送ルーチンの利用によって、もとのリクエスタは最終的にその応答を受け取ることができるのです。

サーバーとサービス・ルーチンの利用から、Oracle Tuxedo ATMIアプリケーションの作成に構造化手法をとることが可能になります。サーバーでは、アプリケーション作成者は、リクエストの受信や応答の送信といったコミュニケーションの詳細ではなく、サービスによって実行する事柄に関する作業に専念すればよいのです。コミュニケーション上の詳細の多くはOracle Tuxedoシステムが処理するため、サービス・ルーチンを作成するときにはある一定の規則に従う必要があります。サーバーは、そのサービス・ルーチンを終了する時点で、TPRETURN()を使用して応答を送ったり、あるいはTPFORWAR()を使用してリクエストを転送したりできます。サービスはその他の作業を行ったり、この時点以後別のプログラムとコミュニケートすることは許されません。そのため、サーバーが実行するサービスは、リクエストが受け取られたときに開始され、応答が送信あるいはリクエストが転送された時点で終了します。

リクエスト・メッセージと応答メッセージとの間には、本質的に異なる点があります。リクエストにはそれが送信される以前には関連するコンテキストはありませんが、応答にはあるという点です。たとえば、ある要求を送る際に、呼出し側はアドレッシング情報を与えなければなりませんが、応答は常にその要求を出したプログラムに返されます。つまり、応答の場合には、要求が出されるときに与えられたアドレッシング情報が維持されていて、応答の送信側はそのあて先になんら手を加えることはできません。この両者の相違点については、TPCALL()のルーチンのパラメータと説明で明らかにされています。

リクエスト・メッセージはその送信時に特定の優先度が付与されます。この優先度にしたがって、リクエストはキューから取り出されます。つまり、サーバーはキューの中で最も優先度の高いリクエストから順に取り出すのです。ただし、リクエストがいつまでもキューの中に残されてしまうのを防ぐために、優先度に関係なく、最も長くキューに入っているリクエストが一定間隔で取り出されます。デフォルト設定では、リクエストの優先度はそのリクエストが送られるサービス名に対応させて付けられます。サービス名にはシステムの構成時に優先度を与えることができます(「UBBCONFIG(5)」参照)。特に定義されていない場合には、デフォルトの優先度が使用されます。この優先度は、TPCALL()に説明のあるルーチン(TPSPRIO())を使用して実行時に設定することができます。呼出し側はこの方法により、メッセージ送信時に構成またはデフォルトの優先度を変更できます。

クライアントおよびサーバーに対するOracle Tuxedoシステムの会話パラダイム

会話型のコミュニケーションの場合、クライアントは、会話接続を行うことはできるが、接続リクエストを受け付けることはできないプログラムと定義されています。

一方、会話サーバーは、接続リクエストを受け取ることができるプログラムです。接続が確立され、サービス・ルーチンが呼び出されると、以降、接続プログラムあるいは会話型サービスは、その接続が解除されるまでアプリケーションで定義されたようにデータの送受信を行えるようになります。会話は半二重方式で行われます。つまり、接続の一方の側が制御権をもってデータを送信し、他方の側は制御権を渡されるまではデータを送信できません。接続が確立されている間、サーバーは「予約状態」になり、他のプログラムがそのサーバーとの間で接続を確立することはできません。

リクエスト/レスポンス型サーバーの場合と同様、会話型サーバーは他のリクエストを出したり、他のサーバーとの接続を行うことによりリクエスタとして機能できます。一方、リクエスト/レスポンス型サーバーと異なり、会話サーバーはリクエストを別のサーバーに転送することはできません。このため、会話サーバーによって実行される会話サービスは、リクエストを受け取った時点で開始され、TPRETURN()を介して最終的な応答が送信された時点で終了します。

接続が確立されると、通信ハンドルは参加者のためのアドレッシング情報に関して必要となる任意のコンテキストを暗示します。メッセージは、アプリケーション側の規定に従って送受信することができます。リクエスト・メッセージ応答メッセージとの間には本質的な相違はなく、またメッセージの優先度に関する規定もありません。

SYSTEM/Tのキュー式メッセージ・モデル

Oracle Tuxedo ATMIのキュー・メッセージ・モデルは、リクエスト・メッセージの完了を待たず、そのメッセージが後で処理されるようにキューに登録し、またオプションとしてキューに入れられたレスポンス・メッセージを介して応答が得られるようにします。メッセージをキューに登録したりレスポンスをキューから取り出すためのATMI関数は、TPENQUEUE()TPDEQUEUE()です。これらの関数は、Oracle Tuxedo ATMIのアプリケーション・プロセスの全ての型(クライアント、サーバー、会話型)のいずれのプロセスからも呼び出せます。

キュー・メッセージ機能は、XA準拠のリソース・マネージャで提供されます。永続的なメッセージはトランザクション内でキューへの登録および取出しが行われ、高い信頼性で一度に処理されます。

ATMIトランザクション

Oracle Tuxedoシステムは、トランザクションの定義および管理について、相互に排他的な2つの関数をサポートしています。Oracle TuxedoシステムのATMIトランザクション境界関数(名前の先頭がTP)とX/OpenのTXインタフェース関数(名前の先頭がTX_)です。X/OpenではTXインタフェースのベースとしてATMIのトランザクション境界関数が使用されるので、TXインタフェースの構文およびセマンティクスは、ATMIとほとんど同じです。この項では、ATMIのトランザクション概念について概要を述べます。次の項では、TXインタフェースについて補足説明します。

Oracle Tuxedoシステムにおけるトランザクションは、全体としてある結果を導く、あるいは何も結果を示さない1つの論理的な作業単位を定義するときに使用します。トランザクションにより、多くのプロセスによって(そして、おそらく様々な場所で)なされる作業を1つの作業単位として扱うことができます。トランザクションの開始者(開始プロセス)はTPBEGIN()およびTPCOMMIT()またはTPABORT()を使用してトランザクション内での操作内容を記述します。

開始プロセスはまた、TPSUSPEND()を呼び出して現在のトランザクションでの作業を中断することもできます。他のプロセスがTPRESUME()を呼び出して、中断されているトランザクションの開始プロセスの役割を引き継ぐこともできます。トランザクションの開始プロセスとして、プログラムはTPSUSPEND()TPCOMMIT()、またはTPABORT()のいずれかを呼び出す必要があります。したがって、あるプロセスがトランザクションを終了し、別のプロセスがトランザクションを開始することができます。

サービスを呼び出すプログラムがトランザクション・モードの場合、呼び出されたサービス・ルーチンも同じトランザクションのトランザクション・モードになります。それ以外の場合、サービスがトランザクション・モードで呼び出されるかどうかは、構成ファイルでサービスについて指定されたオプションによって決まります。トランザクション・モードで呼び出されないサービスは、それが呼び出された時点から終了時点までの間に複数のトランザクションを定義できます。一方、トランザクション・モードで呼び出されたサービス・ルーチンは、1つのトランザクションにのみ関与し、終了するまでそのトランザクションでの作業を続けます。なお、接続をトランザクション・モードにアップグレードすることはできません。会話中にTPBEGIN()が呼び出されると、会話はそのトランザクションの外側で維持されます(TPCONNECT()TPNOTRANを設定して呼び出された場合と同様)。

別のプログラムによって起動されたトランザクションに加わるサービスを、「参加リソース」と呼びます。トランザクションは常に、1つの開始プロセスをもち、かついくつかの参加リソースをもつことができます。同じトランザクションでの作業を行うためにサービスを2回以上呼び出すことができます。TPCOMMIT()またはTPABORT()を呼び出すことができるのは、トランザクションの開始プロセス(つまり、TPBEGIN()またはTPRESUME()のいずれかを呼び出すプログラム)だけです。参加リソースは、TPRETURN()あるいはTPFORWAR()を使用することによりトランザクションの結果に影響を与えます。これらの2つの呼出しはそれぞれ、サービス・ルーチンの終わり、およびそのルーチンがトランザクションの中で担当する部分を終了したことを示すものです。

TXトランザクション

TXインタフェースによって定義されるトランザクションは、ATMI関数によって定義されるトランザクションと実質的に同じです。アプリケーションの開発者は、クライアント・ルーチンおよびサービス・ルーチンを作成するにあたり、どちらの関数でも使用できます。実際、Oracle Tuxedoシステムでは、単一のアプリケーションにおけるクライアント・プログラムおよびサーバー・プログラムすべてに、必ずしもどちらかの1つの関数を使用する必要はありません。ただし、単一のプログラム内で2つの関数を一緒に使用することはできません。たとえば、同じプログラム内でTPBEGIN()を呼び出した後にTXCOMMIT()を呼び出すことはできません。

TXインタフェースには、移植性の高い方法でリソース・マネージャのオープンとクローズを行う2つのコール、TXOPEN()およびTXCLOSE()があります。トランザクションは、TXBEGIN()で開始され、TXCOMMIT()またはTXROLLBACK()のいずれかで完了します。TXINFORM()はトランザクション情報を取り出すために使用されます。また、トランザクションにオプションを設定する3つの呼出しTXSETCOMMITRET()TXSETTRANCTL()、およびTXSETTIMEOUT()があります。TXインタフェースには、ATMIのTPSUSPEND()TPRESUME()に相当するものはありません。

TXインタフェースには、ATMIトランザクションについて定義されているセマンティクスおよび規則の他にも、ここで説明しておくべきセマンティクスがいくつかあります。まず、TXインタフェースを使用するサービス・ルーチン開発者は、TXOPEN()を呼び出す独自のTPSVRINIT()ルーチンを使用する必要があります。省略時にOracle Tuxedoシステムが提供するTPSVRINIT()は、TPOPEN()を呼び出します。TPSVRDONE()についても同じことがあてはまります。TXインタフェースを使用している場合は、サービス・ルーチン開発者は、TXCLOSE()を呼び出す独自のTPSVRDONE()を使用しなければなりません。

次に、TXインタフェースには、ATMIにはない別のセマンティクスが2つあります。それは、連鎖および非連鎖トランザクションと、トランザクション特性です。

連鎖および非連鎖トランザクション

TXインタフェースは、トランザクション実行の連鎖モードおよび非連鎖モードをサポートしています。省略時には、クライアント・ルーチンおよびサービス・ルーチンは、非連鎖モードで実行されます。この場合、アクティブなトランザクションが完了した際、新しいトランザクションはTXBEGIN()が呼び出されるまで実行されません。

連鎖モードでは、新しいトランザクションは、現在のトランザクションが完了すると、暗黙に開始されます。つまり、TXCOMMIT()またはTXROLLBACK()が呼び出されると、Oracle Tuxedoシステムは、現在のトランザクションの完了を調整し、制御を呼出し側に返す前に新しいトランザクションを開始します(異常終了の条件によっては、新しいトランザクションを開始できない場合もあります)。

クライアント・ルーチンおよびサービス・ルーチンは、TXSETTRANCTL()を呼び出すことによって連鎖モードのオンとオフを切り替えます。連鎖モードと非連鎖モードの間の移行により、その次のTXCOMMIT()コールまたはTXROLLBACK()コールの動作が変わります。TXSETTRANCTL()の呼出しでは、呼出し側のトランザクション・モードのオンとオフの切替えは行いません。

TXCLOSE()は、呼出し側がトランザクション・モードにあるときには呼び出すことができないため、連鎖モードで実行中の呼出し側がTXCLOSE()を呼び出すには、非連鎖モードに切り替えて、現在のトランザクションを完了してから呼び出さなければなりません。

トランザクション特性

クライアント・ルーチンまたはサービス・ルーチンは、TXINFORM()を呼び出すことによって、そのルーチンのトランザクション特性の現在の値を取得したり、そのルーチンがトランザクション・モードで実行中であるかどうかを判別したりすることができます。

アプリケーション・プログラムの状態には、いくつかのトランザクション特性があります。呼出し側は、TXSET*関数の呼出しによってこれらの特性を指定します。クライアント・ルーチンまたはサービス・ルーチンが特性の値を設定している場合は、異なる値を呼出し側が指定するまでは、その値が有効のままです。呼出し側がTXINFORM()を使用して特性の値を取得しても、これによって値が変更されることはありません。

タイムアウト

Oracle Tuxedo ATMIシステムには3種類のタイムアウトがあります。1つは、トランザクションの開始から終了までの時間に対応します。2つめは、呼出し元に制御が戻るまでブロッキング呼出しがブロック状態になる最長時間に対応します。3つめはサービスのタイムアウトです。これは呼出しの秒数が構成ファイルのSERVICESセクションにおけるSVCTIMEOUTパラメータで指定された秒数を越えた時に発生します。

最初のタイムアウトは、TPBEGIN()を使用してトランザクションを起動するときに指定します(詳細については、TPBEGIN()を参照)。2つめのタイムアウトは、TPCALL()に定義されているOracle Tuxedo ATMIのコミュニケーション・ルーチンを使用する際に発生することがあります。これらのルーチンの呼出し側は一般に、まだ届いていない応答を待っている間はブロック状態になります。これらの呼出し側はデータの送信を行うこともブロックされることがあります(たとえば、リクエスト・キューがいっぱいの場合など)。呼出し側がブロック状態になる最大時間は、Oracle Tuxedo ATMIの構成ファイルに記述されているパラメータによって決まります。詳細については、「UBBCONFIG(5)」BLOCKTIMEパラメータの項を参照してください。

ブロッキング・タイムアウトは呼出し側がトランザクション・モードにないときにデフォルトの設定によって実行されます。クライアントあるいはサーバーがトランザクション・モードにあると、そのトランザクションが開始したときに指定されたタイムアウト値が働き、UBBCONFIGファイルに指定されているブロッキング・タイムアウト値の影響は受けません。

トランザクション・タイムアウトが発生すると、トランザクション・モードで行われた非同期のリクエストに対する応答は失効状態になることがあります。つまり、あるプログラムがトランザクション・モードで送られたリクエストに対する特定の非同期応答の到着を待っているときに、トランザクション・タイムアウトが発生すると、その応答のハンドルが無効になります。同様に、トランザクション・タイムアウトが発生すると、トランザクションに関連する通信ハンドルに対してイベントが生成され、そのハンドルは無効になります。一方、ブロッキング・タイムアウトが発生した場合、該当するハンドルは無効にならず、応答を待機しているプログラムはその応答を待機するための呼出しを再度出すことができます。

サービス・タイムアウト機構によって、未知の、または予期しないシステム・エラーが原因でフリーズする可能性のあるプロセスについて、システムが強制終了を行うことができます。リクエスト/レスポンス・サービス時にサービス・タイムアウトが発生すると、Oracle Tuxedoシステムによって、フリーズしたサービスを実行中のサーバー・プロセスが強制終了され、エラー・コードTPESVCERRが戻ります。サービス・タイムアウトが会話型サービスで発生した場合は、TPEV_SVCERRイベントが戻ります。

トランザクションがタイムアウトになった場合、トランザクションが中断される前に有効な通信は、TPNOREPLYTPNOTRAN、およびTPNOBLOCKを設定したTPACALL()の呼び出しだけです。

動的サービス公開

デフォルトの設定では、サーバーのサービスは、サーバーのブート時に公開され、サーバーの停止時にその公開が解除されます。サーバーは、それが提供するサービス・セットに対する制御を実行時に必要とする場合、TPADVERTISE()およびTPUNADVERTISE()を使用します。これらのルーチンは、該当サーバーが複数サーバー/単一キュー・セットに属していないかぎり、呼出し側サーバーが提供するサービスだけに影響します。MSSQセットのサーバーはすべて同じサービス・セットを提供しなければならないため、これらのルーチンもまた呼出し側のMSSQセットを共有するすべてのサーバーの公開に影響します。

型付きレコード

別のアプリケーション・プログラムにデータを送信するために、アプリケーション・プログラムは、まずそのデータをレコードに入れます。インタフェースは、型付きレコードの概念をサポートしています。型付きレコードは、実際には、COBOLの2つのレコードからなります。データ・レコードは、静的領域内に定義され、別のアプリケーション・プログラムに渡すアプリケーション・データが入ります。データ・レコードには、補助型レコードが付加され、異なるマシン・バウンダリ間にまたがってデータ・レコードを渡す際に、Oracle Tuxedoシステムに対し、データ・レコードの解釈と変換の規則を識別します。補助型レコードには、データ・レコードのタイプ、任意選択のサブタイプ、および任意選択のデータ長が入ります。レコード・タイプによっては、特定のレコード・レイアウトなど、サブタイプによる追加の指定が必要となる場合があり、可変長レコードには長さを指定する必要があります。

アプリケーション・プログラマは、サポートされる6つの型付きレコードの中から1つを選択できます。Oracle Tuxedoシステムでは、ユーザー固有の型付きレコードを追加することもできます。詳細は、『Oracle Tuxedo ATMI C関数リファレンス』の「C言語アプリケーション・トランザクション・モニター・インタフェースについて」を参照してください。TPTYPE-REC内のREC-TYPEによって、アプリケーションで送信または受信しようとするレコード・タイプを選択します。さらに細かい分類が必要な場合には、TPTYPE-REC内のSUB-TYPEも指定しなければなりません(たとえば、VIEWレコードなど)。TPTYPE-REC内のLENによって、送信時には送信するバイト数を示し、受信時にはユーザーのレコードに移動するバイト数を示します。サポートされるREC-TYPEは次のとおりです。

CARRAY

レコード・タイプCARRAYでは、任意の文字数を入れることが可能です。レコード内のどこかにLOW-VALUE文字列が入ります。データ送信時には、LENに転送バイト数が入っていなければなりません。

STRING

レコード・タイプSTRINGは、任意の文字数を入れることが可能です。LOW-VALUE文字列はレコード内には含まれず、レコードの末尾に付けられます。データ送信時には、LENに転送バイト数が入っていなければなりません。

VIEW

このレコード・タイプは、viewc()コンパイラを使用して生成されたCOBOLレコードを記述します。VIEWを使用する際には、SUB-TYPEにVIEWの名前が入っていなければなりません。VIEWタイプの送信時には、LENに転送バイト数を入れるか、そうでなければNO-LENGTHを設定しなければなりません。NO-LENGTHを設定すると、VIEWの長さ分が送信されます。

上記のレコード・タイプの中の2つには、同等のタイプがあります。X_OCTETCARRAYと同じであり、X_COMMONVIEWと同じです。X_COMMONは、VIEWがサポートするデータ・タイプのサブセットをサポートします。それらは、longs (PIC S9(9) COMP-5)shorts (PIC S9(4) COMP-5)、およびcharacters (PIC X(n))です。X_COMMONは、CとCOBOLの両方のプログラムがやりとりする際に、使用してください。

どのタイプの場合でも、正常に転送が行われると、LENには転送されたバイト数が入ります。受信時には、LENには、データ領域に入る最大バイト数が入っていなければなりません。正常な呼出しの後、LENは、データ領域に移動されたバイト数が入ります。着信メッセージのサイズがLENで指定されているサイズより大きいと、LENで指定されたデータ長分のみがデータ領域に移動され、残りのデータは破棄されます。

バッファ・タイプ・スイッチ

Oracle Tuxedoシステムでは、ユーザー固有のレコード・タイプを追加できます。詳細は、『Oracle Tuxedo ATMI C関数リファレンス』の「C言語アプリケーション・トランザクション・モニター・インタフェースについて」のバッファ・タイプ・スイッチに関する項を参照してください。

プロセスごとのシングル・コンテキストとマルチコンテキスト

Oracle Tuxedoシステムでは、クライアント・プログラムはプロセスごとに1つまたは複数のアプリケーションとの関連を作成することができます。TPINFDEF-RECCONTEXTS-FLAGTP-MULTI-CONTEXTSを設定してTPINITIALIZE()が呼び出されると、複数のクライアント・コンテキストを利用できます。TPINITIALIZE()が暗黙的に呼び出された場合、またはCONTEXTS-FLAGTP-MULTI-CONTEXTSが設定されていない場合は、1つのアプリケーションとの関連しか作成できません。

シングル・コンテキスト・モードでTPINITIALIZE()が2回以上呼び出された場合(つまり、クライアントがアプリケーションに参加した後で呼び出された場合)は、アクションは何も実行されず、成功を示す戻り値が返されます。

マルチコンテキスト・モードでは、TPINITIALIZE()の呼出しのたびに新しいアプリケーションとの関連が作成されます。プログラムはTPGETCTXT()を呼び出すことによりこのアプリケーション関連を表すハンドルを取得し、TPSETCTXT()を呼び出してそのコンテキストを設定することができます。

アプリケーションでシングル・コンテキスト・モードが選択されると、すべてのアプリケーション関連が終了するまで、すべてのTPINITIALIZE()呼出しでシングル・コンテキスト・モードを指定する必要があります。同様に、アプリケーションでマルチコンテキスト・モードが選択されると、すべてのアプリケーション関連が終了するまで、すべてのTPINITIALIZE()呼出しでマルチコンテキスト・モードを指定する必要があります。

サーバー・プログラムは1つのアプリケーションとしか関連付けられないため、クライアントとして機能することはありません。

注意: Oracle Tuxedoシステムでは、1プロセスで複数のアプリケーション・コンテキストを利用できるほか、1プロセスで複数のアプリケーション・スレッドを使用できます。ただし、マルチスレッド機能はC言語インタフェースでしかサポートされません。

表2は、クライアント・プロセス内で発生する、非初期化状態、シングル・コンテキスト・モードで初期化された状態、およびマルチコンテキスト・モードで初期化された状態の遷移を示しています。

表2プロセスごとのコンテキスト・モード
関数
状態
非初期化S0
シングル・コンテキスト・モードでの初期化S1
マルチコンテキスト・モードでの初期化S2
TP-MULTI-CONTEXTSが設定されていないTPINITIALIZE()
S1
S1
S2 (エラー)
TP-MULTI-CONTEXTS設定のTPINITIALIZE()
S2
S1 (エラー)
S2
暗黙的TPINITIALIZE()
S1
S1
S2 (エラー)
TPTERM() - 最後の関連でない
   
S2
TPTERM() - 最後の関連
 
S0
S0
TPTERM() - 関連なし
S0
   

非請求通知

上記のように定義されたクライアント/サーバー間でのやりとりの境界外からメッセージをアプリケーション・クライアントに送る方法は2通りあります。第1の方法は、TPBROADCAST()によって実現されるブロードキャスト機構です。この関数により、アプリケーション・クライアント、サーバーおよび管理者は割り当てられた名前に基づいて選択されるクライアントに型付きレコード・メッセージをブロードキャストすることができます。クライアントに割り当てられる名前は、一部はアプリケーションにより(特に、TPINFDEF-RECデータ構造体にTPINITIALIZE実行時に渡される情報により)、また一部は(クライアントがアプリケーションのアクセスに使用するプロセッサに基づいて)システムにより決められます。

もう1つの方法は、以前のあるいは現在のサービス・リクエストから識別される特定クライアントによる通知方法です。各サービス・リクエストには、そのサービス・リクエストを出したクライアントを特定するユニークなクライアント識別子が含まれています。サービス・ルーチンの中から出されるTPCALL()およびTPFORWAR()関数の呼出しは、そのサービス・リクエストの連鎖に対応する元のクライアントを変更しません。クライアント識別子は保存しておき、アプリケーション・サーバー間で受け渡すことができます。この方法で識別されたクライアントに対する通知は、TPNOTIFY()関数を使用して行います。

COBOL言語ATMIの戻り値とその他の定義

ATMIルーチンは、次に挙げる戻り値と設定の定義を使用します。

*
* TPSTATUS.cbl
*
05 TP-STATUS PIC S9(9) COMP-5.
88 TPOK VALUE 0.
88 TPEABORT VALUE 1.
88 TPEBADDESC VALUE 2.
88 TPEBLOCK VALUE 3.
88 TPEINVAL VALUE 4.
88 TPELIMIT VALUE 5.
88 TPENOENT VALUE 6.
88 TPEOS VALUE 7.
88 TPEPERM VALUE 8.
88 TPEPROTO VALUE 9.
88 TPESVCERR VALUE 10.
88 TPESVCFAIL VALUE 11.
88 TPESYSTEM VALUE 12.
88 TPETIME VALUE 13.
88 TPETRAN VALUE 14.
88 TPEGOTSIG VALUE 15.
88 TPERMERR VALUE 16.
88 TPEITYPE VALUE 17.
88 TPEOTYPE VALUE 18.
88 TPERELEASE VALUE 19.
88 TPEHAZARD VALUE 20.
88 TPEHEURISTIC VALUE 21.
88 TPEEVENT VALUE 22.
88 TPEMATCH VALUE 23.
88 TPEDIAGNOSTIC VALUE 24.
88 TPEMIB VALUE 25.
88 TPEMAXVAL VALUE 26.
05 TPEVENT PIC S9(9) COMP-5.
88 TPEV-NOEVENT VALUE 0.
88 TPEV-DISCONIMM VALUE 1.
88 TPEV-SENDONLY VALUE 2.
88 TPEV-SVCERR VALUE 3.
88 TPEV-SVCFAIL VALUE 4.
88 TPEV-SVCSUCC VALUE 5.
05 TPSVCTIMOUT PIC S9(9) COMP-5.
88 TPED-NOEVENT VALUE 0.
88 TPEV-SVCTIMEOUT VALUE 1.
88 TPEV-TERM VALUE 2.
05 APPL-RETURN-CODE PIC S9(9) COMP-5.

TPTYPE COBOL構造体は、アプリケーション・データの送受信時に必ず使用されます。REC-TYPEは、送信されるデータ・レコードのタイプを表します。SUB-TYPEは、VIEW REC-TYPEが指定されている場合のVIEWの名前を表します。LENは、送信するデータのサイズおよび受信されるデータのサイズを表します。

*
* TPTYPE.cbl
*
05 REC-TYPE PIC X(8).
88 X-OCTET VALUE "X_OCTET".
88 X-COMMON VALUE "X_COMMON".
05 SUB-TYPE PIC X(16).
05 LEN PIC S9(9) COMP-5.
88 NO-LENGTH VALUE 0.
05 TPTYPE-STATUS PIC S9(9) COMP-5.
88 TPTYPEOK VALUE 0.
88 TPTRUNCATE VALUE 1.

TPSVCDEFデータ構造体は、Oracle Tuxedoシステムと設定値をやりとりする関数によって使用されます。

*
* TPSVCDEF.cbl
*
05 COMM-HANDLE PIC S9(9) COMP-5.
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 TPREPLY-FLAG PIC S9(9) COMP-5.
88 TPREPLY VALUE 0.
88 TPNOREPLY VALUE 1.
05 TPACK-FLAG PIC S9(9) COMP-5 REDEFINES TPREPLY-FLAG.
88 TPNOACK VALUE 0.
88 TPACK 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 TPGETANY-FLAG PIC S9(9) COMP-5.
88 TPGETHANDLE VALUE 0.
88 TPGETANY VALUE 1.
05 TPSENDRECV-FLAG PIC S9(9) COMP-5.
88 TPSENDONLY VALUE 0.
88 TPRECVONLY VALUE 1.
05 TPNOCHANGE-FLAG PIC S9(9) COMP-5.
88 TPCHANGE VALUE 0.
88 TPNOCHANGE VALUE 1.
05 TPSERVICETYPE-FLAG PIC S9(9) COMP-5.
88 TPREQRSP VALUE IS 0.
88 TPCONV VALUE IS 1.
*
05 APPKEY PIC S9(9) COMP-5.
05 CLIENTID OCCURS 4 TIMES PIC S9(9) COMP-5.
05 SERVICE-NAME PIC X(127).

TPINFDEFデータ構造体は、TPINITIALIZE()によってアプリケーションに結合する際に使用されます。

*
* TPINFDEF.cbl
*
05 USRNAME PIC X(30).
05 CLTNAME PIC X(30).
05 PASSWD PIC X(30).
05 GRPNAME PIC X(30).
05 NOTIFICATION-FLAG PIC S9(9) COMP-5.
88 TPU-SIG VALUE 1.
88 TPU-DIP VALUE 2.
88 TPU-IGN VALUE 3.
05 ACCESS-FLAG PIC S9(9) COMP-5.
88 TPSA-FASTPATH VALUE 1.
88 TPSA-PROTECTED VALUE 2.
05 CONTEXTS-FLAG PIC S9(9) COMP-5.
88 TP-SINGLE-CONTEXT VALUE 0.
88 TP-MULTI-CONTEXTS VALUE 1.
05 DATALEN PIC S9(9) COMP-5.

TPCONTEXTDEFデータ構造体は、TPGETCTXT()およびTPSETCTXT()がプログラムのコンテキストを操作する際に使用されます。

      *
      *  TPCONTEXTDEF.cbl
      *
       05 CONTEXT     PIC S9(9) COMP-5.

TPQUEDEFデータ構造体は、キューへのメッセージ登録に関連する情報を渡したり、取り出したりする際に、使用します。

*
* TPQUEDEF.cbl
*
05 TPBLOCK-FLAG PIC S9(9) COMP-5.
88 TPNOBLOCK VALUE 0.
88 TPBLOCK VALUE 1.
05 TPTRAN-FLAG PIC S9(9) COMP-5.
88 TPNOTRAN VALUE 0.
88 TPTRAN VALUE 1.
05 TPTIME-FLAG PIC S9(9) COMP-5.
88 TPNOTIME VALUE 0.
88 TPTIME 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 TPNOCHANGE VALUE 0.
88 TPCHANGE 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 S9(9) COMP-5.
05 EXP-TIME PIC S9(9) COMP-5.
05 PRIORITY PIC S9(9) COMP-5.
05 MSGID PIC X(32).
05 CORRID PIC X(32).
05 QNAME PIC X(127).
05 QSPACE-NAME PIC X(127).
05 REPLYQUEUE PIC X(127).
05 FAILUREQUEUE PIC X(127).
05 CLIENTID OCCURS4 TIMES PIC S9(9) COMP-5.
05 APPL-RETURN-CODE PIC S9(9) COMP-5.
05 APPKEY PIC S9(9) COMP-5.

TPSVCRETデータ構造体は、TPRETURN()がトランザクションのステータスを表す際に、使用されます。

*
* TPSVCRET.cbl
*
05 TP-RETURN-VAL PIC S9(9) COMP-5.
88 TPSUCCESS VALUE 0.
88 TPFAIL VALUE 1.
88 TPEXIT VALUE 2.
05 APPL-CODE PIC S9(9) COMP-5.

TPTRXDEFデータ構造体はトランザクション・タイムアウトを設定するためにTPBEGIN()、トランザクション識別子を獲得するためにTPSUSPEND()、設定するためにTPRESUME()でそれぞれ使用されます。

*
* TPTRXDEF.cbl
*
05 T-OUT PIC S9(9) COMP-5 VALUE IS 0.
05 TRANID OCCURS 6 TIMES PIC S9(9) COMP-5.

TPCMTDEFデータ構造体は、TPSCMT()がコミット・レベル特性を設定する際に、使用されます。

*
* TPCMTDEF.cbl
*
05 CMT-FLAG PIC S9(9) COMP-5.
88 TP-CMT-LOGGED VALUE 1.
88 TP-CMT-COMPLETE VALUE 2.
05 PREV-CMT-FLAG PIC S9(9) COMP-5.
88 PREV-TP-CMT-LOGGED VALUE 1.
88 PREV-TP-CMT-COMPLETE VALUE 2.

TPAUTDEFデータ構造体は、TPCHKAUTH()が認証の必要性を調べる際に、使用されます。

* TPAUTDEF.cbl
*
05 AUTH-FLAG PIC S9(9) COMP-5.
88 TPNOAUTH VALUE 0.
88 TPSYSAUTH VALUE 1.
88 TPAPPAUTH VALUE 2.

TPPRIDEFデータ構造体は、TPSPRIO()およびTPGPRIO()がメッセージの優先度を操作する際に、使用されます。

*
* TPPRIDEF.cbl
*
05 PRIORITY PIC S9(9) COMP-5.
05 PRIO-FLAG PIC S9(9) COMP-5.
88 TPABSOLUTE VALUE 0.
88 TPRELATIVE VALUE 1.

TPTRXLEVデータ構造体は、TPGETLEV()がトランザクション・レベル設定を取り出す際に使用されます。

*
* TPTRXLEV.cbl
*
05 TPTRXLEV-FLAG PIC S9(9) COMP-5.
88 TP-NOT-IN-TRAN VALUE 0.
88 TP-IN-TRAN VALUE 1.

TPBCTDEFデータ構造体は、TPNOTIFY()およびTPBROADCAST()が通知を送る際に、使用されます。

*
* TPBCTDEF.cbl
*
05 TPBLOCK-FLAG PIC S9(9) COMP-5.
88 TPBLOCK VALUE 0.
88 TPNOBLOCK 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 LMID PIC X(30).
05 USERNAME PIC X(30).
05 CLTNAME PIC X(30).

FML-INFOデータ構造体は、FINIT()FVSTOF()、およびFVFTOS()がFMLバッファを扱う際に、使用されます。

*
* FMLINFO.cbl
*
05 FML-STATUS PIC S9(9) COMP-5.
88 FOK VALUE 0.
88 FALIGNERR VALUE 1.
88 FNOTFLD VALUE 2.
88 FNOSPACE VALUE 3.
88 FNOTPRES VALUE 4.
88 FBADFLD VALUE 5.
88 FTYPERR VALUE 6.
88 FEUNIX VALUE 7.
88 FBADNAME VALUE 8.
88 FMALLOC VALUE 9.
88 FSYNTAX VALUE 10.
88 FFTOPEN VALUE 11.
88 FFTSYNTAX VALUE 12.
88 FEINVAL VALUE 13.
88 FBADTBL VALUE 14.
88 FBADVIEW VALUE 15.
88 FVFSYNTAX VALUE 16.
88 FVFOPEN VALUE 17.
88 FBADACM VALUE 18.
88 FNOCNAME VALUE 19.
88 FEBADOP VALUE 20.
*
05 FML-LENGTH PIC S9(9) COMP-5.
*
05 FML-MODE PIC S9(9) COMP-5.
88 FUPDATE VALUE 1.
88 FCONCAT VALUE 2.
88 FJOIN VALUE 3.
88 FOJOIN VALUE 4.
*
05 VIEWNAME PIC X(33).

TPEVTDEFデータ構造体は、イベントの通知とサブスクリプションを処理するためにTPPOST()TPSUBSCRIBE()、およびTPUNSUBSCRIBE()が使用します。

*
* TPEVTDEF.cbl
*
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 TPREPLY-FLAG PIC S9(9) COMP-5.
88 TPREPLY VALUE 0.
88 TPNOREPLY 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 TPEV-METHOD-FLAG PIC S9(9) COMP-5.
88 TPEVNOTIFY VALUE 0.
88 TPEVSERVICE VALUE 1.
88 TPEVQUEUE VALUE 2.
05 TPEV-PERSIST-FLAG PIC S9(9) COMP-5.
88 TPEVNOPERSIST VALUE 0.
88 TPEVPERSIST VALUE 1.
05 TPEV-TRAN-FLAG PIC S9(9) COMP-5.
88 TPEVNOTRAN VALUE 0.
88 TPEVTRAN VALUE 1.
*
05 EVENT-COUNT PIC S9(9) COMP-5.
05 SUBSCRIPTION-HANDLE PIC S9(9) COMP-5.
05 NAME-1 PIC X(127).
05 NAME-2 PIC X(127).
05 EVENT-NAME PIC X(31).
05 EVENT-EXPR PIC X(255).
05 EVENT-FILTER PIC X(255).

TPKEYDEFデータ構造体は、メッセージ・ベースのデジタル署名と暗号化を行うために使用する公開鍵と秘密鍵を管理する場合に、TPKEYCLOSE()TPKEYGETINFO()TPKEYOPEN()、およびTPKEYSETINFO()によって使用されます。

*
* TPKEYDEF.cbl
*
05 KEY-HANDLE PIC S9(9) COMP-5.
05 PRINCIPAL-NAME PIC X(512).
05 LOCATION PIC X(1024).
05 IDENTITY-PROOF PIC X(2048).
05 PROOF-LEN PIC S9(9) COMP-5.
05 CRYPTO-PROVIDER PIC X(128).
05 SIGNATURE-FLAG PIC S9(9) COMP-5.
88 TPKEY-NOSIGNATURE VALUE 0.
88 TPKEY-SIGNATURE VALUE 1.
05 DECRYPT-FLAG PIC S9(9) COMP-5.
88 TPKEY-NODECRYPT VALUE 0.
88 TPKEY-DECRYPT VALUE 1.
05 ENCRYPT-FLAG PIC S9(9) COMP-5.
88 TPKEY-NOENCRYPT VALUE 0.
88 TPKEY-ENCRYPT VALUE 1.
05 AUTOSIGN-FLAG PIC S9(9) COMP-5.
88 TPKEY-NOAUTOSIGN VALUE 0.
88 TPKEY-AUTOSIGN VALUE 1.
05 AUTOENCRYPT-FLAG PIC S9(9) COMP-5.
88 TPKEY-NOAUTOENCRYPT VALUE 0.
88 TPKEY-AUTOENCRYPT VALUE 1.
05 ATTRIBUTE-NAME PIC X(64).
05 ATTRIBUTE-VALUE-LEN PIC S9(9) COMP-5.

COBOL言語TXの戻り値その他の定義

TXルーチンは、次に挙げる戻り値と設定の定義を使用します。

*
* TXSTATUS.cbl
*
05 TX-STATUS PIC S9(9) COMP-5.
88 TX-NOT-SUPPORTED VALUE 1.
* Normal execution
88 TX-OK VALUE 0.
* Normal execution
88 TX-OUTSIDE VALUE -1.
* Application is in an RM local transaction
88 TX-ROLLBACK VALUE -2.
* Transaction was rolled back
88 TX-MIXED VALUE -3.
* Transaction was partially committed and partially
* rolled back
88 TX-HAZARD VALUE -4.
* Transaction may have been partially committed and
* partially rolled back
88 TX-PROTOCOL-ERROR VALUE -5.
* Routine invoked in an improper context
88 TX-ERROR VALUE -6.
* Transient error
88 TX-FAIL VALUE -7.
* Fatal error
88 TX-EINVAL VALUE -8.
* Invalid arguments were given
88 TX-COMMITTED VALUE -9.
* The transaction was heuristically committed
88 TX-NO-BEGIN VALUE -100.
* Transaction committed plus new transaction could not
* be started
88 TX-ROLLBACK-NO-BEGIN VALUE -102.
* Transaction rollback plus new transaction could not
* be started
88 TX-MIXED-NO-BEGIN VALUE -103.
* Mixed plus new transaction could not be started
88 TX-HAZARD-NO-BEGIN VALUE -104.
* Hazard plus new transaction could not be started
88 TX-COMMITTED-NO-BEGIN VALUE -109.
* Heuristically committed plus transaction could not
* be started

TXINFDEFレコードは、TXINFORM()コールの結果が格納されるデータ構造体を定義します。

*
* TXINFDEF.cbl
*
05 XID-REC.
* XID record
10 FORMAT-ID PIC S9(9) COMP-5.
* A value of -1 in FORMAT-ID means that the XID is NULL
10 GTRID-LENGTH PIC S9(9) COMP-5.
10 BRANCH-LENGTH PIC S9(9) COMP-5.
10 XID-DATA PIC X(128).
05 TRANSACTION-MODE PIC S9(9) COMP-5.
* Transaction mode settings
88 TX-NOT-IN-TRAN VALUE 0.
88 TX-IN-TRAN VALUE 1.
05 COMMIT-RETURN PIC S9(9) COMP-5.
* Commit_return settings
88 TX-COMMIT-COMPLETED VALUE 0.
88 TX-COMMIT-DECISION-LOGGED VALUE 1.
05 TRANSACTION-CONTROL PIC S9(9) COMP-5.
* Transaction_control settings
88 TX-UNCHAINED VALUE 0.
88 TX-CHAINED VALUE 1.
05 TRANSACTION-TIMEOUT PIC S9(9) COMP-5.
* Transaction_timeout value
88 NO-TIMEOUT VALUE 0.
05 TRANSACTION-STATE PIC S9(9) COMP-5.
* Transaction_state information
88 TX-ACTIVE VALUE 0.
88 TX-TIMEOUT-ROLLBACK-ONLY VALUE 1.
88 TX-ROLLBACK-ONLY VALUE 2.

ATMIの状態遷移

Oracle Tuxedoシステムは、各プログラムの状態を記録し、各種の関数呼び出しやオプションごとに正当な状態遷移が行われているかどうかを検証します。この状態情報には、プログラムのタイプ(リクエスト/レスポンス型サーバー、会話サーバー、またはクライアント)、初期化状態(初期化済み、非初期化)、リソースの管理状態(クローズまたはオープン)、プログラムのトランザクション状態およびすべての非同期リクエスト/レスポンスおよび接続ハンドルの状態などがあります。不当な状態遷移が行われようとすると、呼び出された関数は異常終了し、TPSTATUS-RECTPEPROTO()が設定されます。この情報に関する正規の状態と遷移について、次の表に示します。

表3は、リクエスト/レスポンス型サーバー、会話型サーバーおよびクライアントがどの関数を呼び出すことができるかを示しています。ただし、TPSVRINIT()TPSVRDONE()はこの表には示してありません。これらの関数はアプリケーションからは呼び出されないためです。これらはアプリケーションが提供する関数ですが、Oracle Tuxedoシステムによって呼び出されます。

表3 使用可能な関数
関数
プロセス・タイプ
リクエスト/レスポンス型
サーバー
会話型
サーバー
クライアント
TPABORT()
Y
Y
Y
TPACALL()
Y
Y
Y
TPADVERTISE()
Y
Y
N
TPBEGIN()
Y
Y
Y
TPBROADCAST()
Y
Y
Y
TPCALL()
Y
Y
Y
TPCANCEL()
Y
Y
Y
TPCHKAUTH()
Y
Y
Y
TPCHKUNSOL()
N
N
Y
TPCLOSE()
Y
Y
Y
TPCOMMIT()
Y
Y
Y
TPCONNECT()
Y
Y
Y
TPDEQUE()
Y
Y
Y
TPDISCON()
Y
Y
Y
TPENQUEUE()
Y
Y
Y
TPFORWAR()
Y
N
N
TPGBLKTIME()
Y
Y
Y
TPGETCTXT()
Y
Y
Y
TPGETLEV()
Y
Y
Y
TPGETRPLY()
Y
Y
Y
TPGPRIO()
Y
Y
Y
TPINITIALIZE()
N
N
Y
TPNOTIFY()
Y
Y
Y
TPOPEN()
Y
Y
Y
TPPOST()
Y
Y
Y
TPRECV()
Y
Y
Y
TPRESUME()
Y
Y
Y
TPRETURN()
Y
Y
N
TPSBLKTIME()
Y
Y
Y
TPSCMT()
Y
Y
Y
TPSEND()
Y
Y
Y
TPSETCTXT()
N
N
Y
TPSETUNSOL()
N
N
Y
TPSPRIO()
Y
Y
Y
TPSUBSCRIBE()
Y
Y
Y
TPSUSPEND()
Y
Y
Y
TPTERM()
N
N
Y
TPUNADVERTISE()
Y
Y
N
TPUNSUBSCRIBE()
Y
Y
Y

以下に示す表は、特に明記されていないかぎり、クライアントとサーバー両方に適用されます。なお、関数によってはクライアントとサーバーの両方が呼び出せるわけではないので(たとえばTPINITIALIZE())、以下の状態遷移のなかには、両方のプログラム・タイプには適用できないものもあります。上記の表を参照して、目的のプログラムから特定の関数を呼び出すことができるかどうかを判断するようにしてください。

表 4は、クライアント・プログラムがトランザクション・マネージャで初期化され登録されているかどうかを示しています。この表では、TPINITIALIZE()を使用しているものとします。TPINITIALIZE()は、シングル・コンテキスト・モードでは任意選択可能です。つまり、シングル・コンテキストのクライアントは、多数のATMI関数のどれか(たとえば、TPACALL()またはTPCALL())を発行することによって、暗黙的にアプリケーションに参加することができます。次のいずれかに該当する場合、クライアントはTPINITIALIZE()を使用する必要があります。

サーバーはTPSVRINIT()関数が呼び出される前にOracle Tuxedoディスパッチャによって初期化状態になり、TPSVRDONE()関数が返された後、Oracle Tuxedoディスパッチャによって非初期化状態になります。なお、下記のすべての表において、関数がエラーを起こした場合、特に明記されていないかぎり、プログラムの状態は変わりません。

表4は、初期化状態を示しています。

表4初期化状態
関数
状態
非初期化
I0
初期化
I1
TPCHKAUTH()
I0
I1
TPGETCTXT()
I0
I1
TPINITIALIZE()
I1
I1
TPSETCTXT()
NULL以外のコンテキストに設定
I1
I1
TPNULLCONTEXT設定のTPSETCTXT()
I0
I0
TPSETUNSOL()
I0
I1
TPTERM()
I0
I0
ほかのすべてのATMI関数
 
I1

以降の表は、(TPINITIALIZE()TPSETCTXT()、またはOracle Tuxedoのサービス・ディスパッチャを介してこの状態でプログラムが到着したかどうかに関わりなく)事前条件として状態がI1であると想定しています。

表5は、クライアントまたはサーバーに対応するリソース・マネージャが初期化されているかいないかに応じてクライアントまたはサーバーの状態を示しています。

表5リソース・マネージャの状態
関数
状態
クローズ
R0
オープン
R1
TPOPEN()
R1
R1
TPCLOSE()
R0
R0
TPBEGIN()
 
R1
TPCOMMIT()
 
R1
TPABORT()
 
R1
TPSUSPEND()
 
R1
TPRESUME()
 
R1
TPTRAN設定のTPSVCSTART()
 
R1
ほかのすべてのATMI関数
R0
R1

表6は、プログラムがトランザクションに対応しているかどうかに関してそのプログラムの状態を示したものです。サーバーの場合、状態T1とT2への遷移は、事前条件として状態R1を想定しています(たとえば、TPOPEN()はそれ以降TPCLOSE()またはTPTERM()への呼出しがないものとして呼び出されています)。

表6アプリケーション関連のトランザクション状態
関数
状態
トランザクション内ではない
T0
開始プロセス
T1
参加リソース
T2
TPBEGIN()
     
TPABORT()
 
T0
 
TPCOMMIT()
 
T0
 
SPSUSPEND()
 
T0
 
TPRESUME()
 
T0
 
TPTRAN設定のTPSVCSTART()
T2
   
TPSVCSTART()
(トランザクション・モードでない)
T0
   
TPRETURN()
T0
 
T0
TPFORWAR()
T0
 
T0
TPCLOSE()
R0
   
TPTERM()
I0
T0
 
ほかのすべてのATMI関数
T0
T1
T2

表7は、TPACALL()が戻す1つのリクエスト・ハンドルの状態を示すものです。

表7 非同期リクエスト記述子の状態
関数
状態
記述子なし
A0
有効な記述子
A1
TPACALL()
A1
 
TPGETRPLY()
 
A0
TPCANCEL()
 
A0a
TPABORT()
A0
A0b
TPCOMMIT()
A0
A0b
TPSUSPEND()
A0
Ac
TPRETURN()
A0
A0
TPFORWAR()
A0
A0
TPTERM()
I0
I0
ほかのすべてのATMI関数
A0
A1

注意: a この状態遷移は、記述子が呼出し側のトランザクションに関連付けられていない場合にのみ発生します。
注意: b この状態遷移は、記述子が呼出し側のトランザクションに関連付けられている場合にのみ発生します。
注意: c記述子が呼出し側のトランザクションに関連する場合、TPSUSPEND()はプロトコル・エラーを戻します。

表8は、TPCONNECT()によって戻される接続記述子またはTPSVCINFO構造体でサービス呼出しを行うことによって提供される接続記述子の状態を示したものです。接続記述子をとらないプリミティブの場合、特に明記されていないかぎり、状態の変化はすべての接続記述子に適用されます。

状態には次のものがあります。

C0 - ハンドルなし
C1 - TPCONNECTハンドル送信専用
C2 - TPCONNECTハンドル受信専用
C3 - TPSVCDEFハンドル送信専用
C4 - TPSVCDEFハンドル受信専用

表8 接続リクエストハンドルの状態
関数/イベント
状態
C0
C1
C2
C3
C4
TPSENDONLY設定のTPCONNECT()
C1a
       
TPRECVONLY設定のTPCONNECT()
C2a
       
TPSENDONLY設定のTPSVCSTART()
C3b
       
TPRECVONLY設定のTPSVCSTART()
C4b
       
TPRECV()/イベントなし
   
C2
 
C4
TPRECV()/TPEV_SENDONLY
   
C1
 
C3
TPRECV()/TPEV_DISCONIMM
   
C0
 
C0
TPRECV()/TPEV_SVCERR
   
C0
   
TPRECV()/TPEV_SVCFAIL
   
C0
   
TPRECV()/TPEV_SVCSUCC
   
C0
   
TPSEND()/イベントなし
 
C1
 
C3
 
TPRECVONLY設定のTPSEND()
 
C2
 
C4
 
TPSEND()/TPEV_DISCONIMM
 
C0
 
C0
 
TPSEND()/TPEV_SVCERR
 
C0
     
TPSEND()/TPEV_SVCFAIL
 
C0
     
TPTERM() (クライアントのみ)
C0
C0
     
TPCOMMIT() (オリジネータのみ)
C0
C0c
C0 c
   
TPSUSPEND() (オリジネータのみ)
C0
C0d
C0d
   
TPABORT() (オリジネータのみ)
C0
C0 c
C0c
   
TPDISCON()
 
C0
C0
   
TPRETURN() (CONVサーバー)
 
C0
C0
C0
C0
TPFORWAR() (CONVサーバー)
 
C0
C0
C0
C0
ほかのすべてのATMI関数
C0
C1
C2
C3
C4

注意: aプログラムがトランザクション・モードでTPNOTRANの指定がない場合、接続はトランザクション・モードになります。
注意: b TPTRANが設定されている場合、接続はトランザクション・モードになります。
注意: c接続がトランザクション・モードにない場合、状態は変化しません。
注意: d接続がトランザクション・モードの場合、TPSUSPEND()はプロトコル・エラーを返します。

TXの状態遷移

Oracle Tuxedoでは、プロセスが必ずTX関数を正しい順序で呼び出すことを確認します。不正の状態遷移が試行される(つまり、ブランクの遷移エントリの状態から呼出しを行う)と、呼び出された関数は、TX_PROTOCOL_ERRORを返します。TX関数の正当な状態および遷移を、次の表に示します。異常終了を返す呼出しの場合、この表で特に明記されていないかぎり、状態遷移は行われません。Oracle Tuxedoのクライアントまたはサーバーは、TX関数を使用できます。

状態は、次のように定義されています。

S0

どのRMもオープンまたは初期化が行われていません。プロセスは、TXOPEN()を正常に呼び出すまで、グローバル・トランザクションを開始できません。

S1

プログラムは、RMをオープンしましたが、トランザクションには入っていません。transaction_control特性は、TX-UNCHAINEDです。

S2

プログラムは、RMをオープンしましたが、トランザクションには入っていません。transaction_control特性は、TX-CHAINEDです。

S3

プログラムがRMをオープンし、トランザクションには入っています。transaction_control特性は、TX-UNCHAINEDです。

S4

プログラムがRMをオープンし、トランザクションには入っています。transaction_control特性は、TX-CHAINEDです。

表9 TXの状態遷移
関数
状態
S0
S1
S2
S3
S4
TXBEGIN()
 
S3
S4
   
TXCLOSE()
S0
S0
S0
   
TXCOMMIT() -> TX_SET1
     
S1
S4
TXCOMMIT() -> TX_SET2
       
S2
TXINFORM()
 
S1
S2
S3
S4
TXOPEN()
S1
S1
S2
S3
S4
TXROLLBACK() -> TX_SET1
     
S1
S4
TXROLLBACK() -> TX_SET2
       
S2
TXSETCOMMITRET()
 
S1
S2
S3
S4
TXSETTRANCTL()
control = TX-CHAINED
 
S2
S2
S4
S4
TXSETRRANCTL()
control = TX-UNCHAINED
 
S1
S1
S3
S3
TXSETTIMEOUT()
 
S1
S2
S3
S4

関連項目

buffer(3c)TPINITIALIZE(3cbl)TPADVERTISE(3cbl)TPBEGIN(3cbl), TPCALL(3cbl)TPCONNECT(3cbl)TPGETCTXT(3cbl)TPKEYCLOSE(3cbl)TPKEYGETINFO(3cbl)TPKEYOPEN(3cbl)TPKEYSETINFO(3cbl)TPOPEN(3cbl)TPSETCTXT(3cbl)TPSVCSTART(3cbl)tuxtypes(5)typesw(5)

 


FINIT、FINIT32(3cbl)

名前

FINIT()FINIT32() - フィールド化バッファの初期化

形式

01 FML-BUFFER.
05
FML-ALIGN PIC S9(9) USAGE IS COMP.
05
FML-DATA PIC X(applen).

01
FML-REC
COPY FMLINFO.

CALL "FINIT" USING
FML-BUFFER FML-REC.

CALL "FINIT32" USING
FML-BUFFER FML-REC.

説明

FINIT()は、フィールド化バッファの初期化をする場合に呼び出すことができます。FML-BUFFERは、フィールド化バッファで使用されるレコードです。FML16とFML32の両方で使用するためには、4バイト境界にアラインする必要があります。これを実現するには、上記の「形式」に示すように2つのレコード要素を定義します。FML-REC中のFML-LENGTHはレコードの長さです。フィールド化バッファに対応して、内部構造体がフィールドなしで設定されます。アプリケーション・プログラムはレコードをFINIT()FVFTOS()、またはFVSTOF()に渡したり、型付きレコードが必要なATMI呼出しに渡す(この場合、タイプは「FML」でサブタイプはありません)場合を除いて、レコードを解釈してはなりません。

FINIT32()は32ビットFMLで使用します。

戻り値

FINIT()は正常終了時には、FML-REC内のFML-STATUSFOKを設定します。

エラーが発生した場合は、FML-STATUSは0以外の値に設定されます。

エラー

次の条件が発生すると、FINIT()は異常終了し、FML-REC内のFML-STATUSに次の値を設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOSPACE]

「フィールド化バッファにスペースがありません。」
フィールド化バッファ用に指定されたバッファの大きさが小さすぎます。

バッファからフィールドを削除する再初期化のための正しい方法を以下に示します。Finit(frfr, (FLDLEN)Fsizeof(fbfr));

関連項目

『Oracle Tuxedo ATMI FML関数リファレンス』「FML関数の紹介」

 


FVFTOS、FVFTOS32(3cbl)

名前

FVFTOS()FVFTOS32() - フィールド化バッファからCOBOL構造体にコピーする

形式

01 DATA-REC. 
COPY User data.

01 FML-BUFFER.
05 FML-ALIGN PIC S9(9) USAGE IS COMP.
05 FML-DATA PIC X(applen).

01 FML-REC COPY FMLINFO.

CALL "FVFTOS" USING FML-BUFFER DATA-REC FML-REC.

CALL "FVFTOS32" USING FML-BUFFER DATA-REC FML-REC.

説明

FVFTOS()関数はフィールド化バッファからCOBOLのレコードにデータを転送します。FML-BUFFERは、FINIT()で初期化されたフィールド化バッファを指すポインタです。DATA-RECは、Cの構造体へのポインタです。FML-REC中のVIEWNAMEは、COBOLのレコードを記述するVIEWの名前です。

各フィールドは、フィールド化バッファから、VIEWNAMEでの要素の記述に基づいた構造体にコピーされます。フィールド化バッファのフィールドに対応する要素がCOBOLのレコードに存在しない場合は、そのフィールドは無視されます。COBOLのレコードで指定された要素に対応するフィールドがフィールド化バッファに存在しない場合は、その要素にはNULL値がコピーされます。使用するNULLの値は、各要素ごとにVIEW記述で定義できます。

複数のオカレンスをCOBOLのレコードに格納するには、レコードの要素をOCCURSで定義してください。バッファ中のフィールドのオカレンスが、要素のオカレンスよりも少ない場合は、余分な要素スロットにはNULL値が代入されます。反対に、バッファ中のフィールドのオカレンスが、要素のオカレンスよりも多い場合は、余分なオカレンスは無視されます。

FVFTOS32()は、より多くのフィールドを持つ大きなview用のview32()型付きバッファで定義されたviewのために使用されます。

戻り値

FVFTOS32()は正常終了時には、FML-REC内のFML-STATUSFOKを設定します。

エラーが発生した場合は、FML-STATUSは0以外の値に設定されます。

エラー

次の条件が発生すると、FVFTOS()は異常終了し、FML-STATUSに次の値を設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファがフィールド化されていないか、またはFINIT()で初期化されていません。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です。

[FBADACM]

「ACMに負の値が含まれています。」
COBOLレコードからフィールド化バッファにデータを移動するときには、連想カウント・メンバー(ACM)は負の値であってはなりません。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません。」
VIEWNAMEのVIEW記述が、VIEWDIRまたはVIEWFILESで指定されたファイルに見つかりません。

関連項目

『Oracle Tuxedo ATMI FML関数リファレンス』「FML関数の紹介」viewfile(5)

 


FVSTOF(3cbl)

名前

FVSTOF() - C構造体からフィールド化バッファにコピーする

形式

01 DATA-REC.
COPY User data.

01 FML-BUFFER.
05 FML-ALIGN PIC S9(9) USAGE IS COMP.
05 FML-DATA PIC X(applen).

01 FML-REC
COPY FMLINFO.

CALL "FVSTOF" USING FML-BUFFER DATA-REC FML-REC.

CALL "FVSTOF32" USING FML-BUFFER DATA-REC FML-REC.

説明

FVSTOF()は、C構造体からフィールド化バッファにデータを転送します。FML-BUFFERは、フィールド化バッファを含むレコードです。DATA-RECは、COBOLのレコードです。FML-REC中のVIEWNAMEは、COBOLのレコードを記述するVIEWの名前です。FML-REC中のFML-MODEには、データを転送する方式を指定します。FML-MODEには次の4種類の値のいずれかを設定できます。

FUPDATE
FOJOIN
FJOIN
FCONCAT

これらのモードの動作は、Fupdate、Fupdate32(3fml)Fojoin、Fojoin32(3fml)Fjoin、Fjoin32(3fml)、およびFconcat、Fconcat32(3fml)で説明したものと同じです。これらの関数ではソース・バッファを指定するのに対して、FVSTOF()ではCOBOLのレコードを指定することを除けば、FVSTOF()はこれらの関数と同じものと考えることもできます。FUPDATEはNULLの値を持つレコードの要素を移動しないことを憶えていてください。

FVSTOF32()は、より多くのフィールドを持つ大きなview用のview32()型付きバッファで定義されたviewのために使用されます。

戻り値

FVSTOF32()は正常終了時には、FML-REC内のFML-STATUSFOKを設定します。

エラーが発生した場合は、FML-STATUSは0以外の値に設定されます。

エラー

次の条件が発生すると、FVSTOF()は異常終了し、FML-STATUSに次の値を設定します。

[FALIGNERR]

「フィールド化バッファが境界付けされていません。」
バッファの先頭が正しい境界線上にありません。

[FNOTFLD]

「バッファがフィールド化されていません。」
バッファがフィールド化されていないか、またはFINIT()で初期化されていません。

[FEINVAL]

「関数の引数が無効です。」
呼び出された関数の引数の1つが無効です。

[FBADACM]

「ACMに負の値が含まれています。」
COBOLレコードからフィールド化バッファにデータを移動するときには、連想カウント・メンバー(ACM)は負の値であってはなりません。

[FBADVIEW]

「VIEW記述が見つからないか、取得できません。」
VIEWNAMEのVIEW記述が、VIEWDIRまたはVIEWFILESで指定されたファイルに見つかりません。

関連項目

『Oracle Tuxedo ATMI FML関数リファレンス』「FML関数の紹介」viewfile(5)

 


TPABORT(3cbl)

名前

TPABORT() - 現在のOracle Tuxedo ATMIのトランザクションの中断

形式

01 TPTRXDEF-REC.
COPY TPTRXDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPABORT" USING
TPTRXDEF-REC TPSTATUS-REC.

説明

TPABORT()は、トランザクションの中止を指定します。この関数が終了すると、そのトランザクションでなされたリソースへの変更内容はすべて取り消されます。TPCOMMIT()と同様、このルーチンは、トランザクションのイニシエータからしか呼び出せません。参加リソース(つまり、サービス・ルーチン)は、トランザクションを中断したい場合には、TPFAILを付けてTPRETURN()を呼び出します。

未処理の応答に対する通信ハンドルが存在するときにTPABORT()を呼び出すと、このルーチンの終了時にトランザクションは中断し、呼出し側のトランザクションに関連する通信ハンドルは以後無効になります。呼出し側のトランザクションと無関係の通信ハンドルは有効なままです。

トランザクション・モードの会話サーバーに対してオープン接続がある場合、TPABORT()TPEV-DISCONIMMイベントをサーバーに送ります(そのサーバーが接続の制御権を有するかどうかに関係なく)。TPBEGIN()の前に、あるいはTPNOTRAN設定を付けて(つまり、トランザクション・モードにない状態で)オープンした接続は、影響を受けません。

現時点では、TPABORT()の引数TPTRXDEF-RECは将来使用するために予約されています。

戻り値

TPABORT()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPABORT()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。呼出し側のトランザクションは影響を受けません。

[TPEHEURISTIC]

ヒューリスティックな判断のため、トランザクションの一部としてなされた作業が一部はコミットされ、一部は中途終了しています。

[TPEHAZARD]

ある種の障害のため、トランザクションの一部としてなされた作業がヒューリスティックに完了している可能性があります。

[TPEPROTO]

tpabort()が不正なコンテキストで呼び出されました(参加リソースによって呼び出されるなど)。

[TPESYSTEM]

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

[TPEOS]

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

注意事項

TPBEGIN()TPCOMMIT()およびTPABORT()を使用してOracle Tuxedo ATMIのトランザクションを記述する際には、XAインタフェースに準拠した(および呼出し側に適切にリンクされている)リソース・マネージャの行う作業がトランザクションとしてのプロパティを備えていることを忘れないようにすることが重要です。トランザクションで行われるその他の処理内容は、TPCOMMIT()TPABORTの影響を受けません。

関連項目

TPBEGIN(3cbl)TPCOMMIT(3cbl)TPGETLEV(3cbl)

 


TPACALL(3cbl)

名前

TPACALL() - サービスへのメッセージの非同期送信を行うルーチン

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

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

説明

TPACALL()は、TPSVCDEF-REC内のSERVICE-NAMEで指定されているサービスにリクエスト・メッセージを送ります。このリクエストは、以前になされたTPSPRIO()の呼出しで変更されていないかぎり、SERVICE-NAMEに定義されている優先度で送信されます。DATA-RECは、送信するメッセージであり、TPTYPE-REC内のLENは、DATA-RECに入るデータの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。TPTYPE-REC内のREC-TYPESPACESの場合は、DATA-RECおよびLENは無視され、リクエストはデータ部なしで送信されます。REC-TYPESTRINGで、LEN0の場合は、リクエストはデータ部なしで送信されます。DATA-RECREC-TYPEおよびSUB-TYPEは、SERVICE-NAMEが認識するREC-TYPEおよびSUB-TYPEのいずれかと一致しなければなりません。トランザクション・モードにあるときに送信されるリクエストごとに、最終的には対応する応答が受信されなければならないことに注意してください。

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

TPNOTRAN

呼出し側がトランザクション・モードにあり、この設定を使用していると、SERVICE-NAMEが呼び出されても、呼出し側のトランザクションの一部として実行されません。トランザクションをサポートしないサーバーにSERVICE-NAMEが属しており、呼出し側がトランザクション・モードにある場合は、この設定を指定しなければなりません。このフラグ設定を使用するトランザクション・モードの呼出し側は、依然としてトランザクション・タイムアウトの対象となります(それ以外はなし)。この設定を使用した状態で呼び出されたサービスが正常に実行できない場合、呼出し側のトランザクションは影響を受けません。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPTRAN

呼出し側がトランザクション・モードにあり、この設定が使用されていると、SERVICE-NAMEが呼び出されたときに、このプログラムは呼出し側のトランザクションのために実行されます。呼出し側がトランザクション・モードにない場合、この設定は無視されます。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPNOREPLY

応答を期待していないことをtpacall()に通知します。TPNOREPLYが設定されると、このルーチンは、正常終了時には[TPOK]を返し、TPSVCDEF-REC内のCOMM-HANDLE0を設定します。0は、無効な通信ハンドルです。呼出し側がトランザクション・モードにある場合は、TPTRANも設定するときには、この設定は使用できません。TPNOREPLYまたはTPREPLYのいずれかが設定されていなければなりません。

TPREPLY

応答を期待していることをTPACALL()に通知します。TPREPLYが設定されると、このルーチンは、正常終了時には[TPOK]を戻し、COMM-HANDLEに有効な通信ハンドルを設定します。呼出し側がトランザクション・モードにあり、TPTRANが設定されている場合は、このフラグを設定する必要があります。TPNOREPLYまたはTPREPLYのいずれかが設定されていなければなりません。

TPNOBLOCK

このリクエストは、ブロッキング条件が存在する場合(たとえば、メッセージの送信先である内部バッファがいっぱいの場合など)には、送信されません。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

戻り値

TPACALL()は正常終了時には、TP-STATUSに[TPOK]を設定します。また、TPSVCDEF-RECTPREPLYが設定されている場合には、TPCALL()は、COMM-HANDLEに通信ハンドルを返します。このハンドルは、送信したリクエストに対する応答を受信する際に使用できる有効なハンドルです。

エラー

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

[TPEINVAL]

無効な引数が指定されました(TPSVCDEF-RECの設定が無効など)。

[TPENOENT]

存在しないか、リクエスト/レスポンス型サービスでない(つまり、会話サービスである)ため、SERVICE-NAMEに送信できません。

[TPEITYPE]

REC-TYPEおよびSUB-TYPEが、SERVICE-NAMEが受け付けるタイプおよびサブタイプではありません。

[TPELIMIT]

未終了の非同期リクエストの数が、保持できる最大数に達したため、呼出し側のリクエストが送信できませんでした。

[TPETRAN]

SERVICE-NAMEは、トランザクションをサポートしていないサーバーに属していて、TPTRANが設定されました。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPACALL()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで失敗します(前の段落で説明した例外を除く)。

[TPEBLOCK]

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

[TPGOTSIG]

シグナルが受信され、TPNOSIGRSTRTがセットされました。

[TPEPROTO]

TPACALL()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPCALL(3cbl)TPCANCEL(3cbl)TPGETRPLY(3cbl)TPGPRIO(3cbl)TPSPRIO(3cbl)

 


TPADVERTISE(3cbl)

名前

TPADVERTISE() - サービス名の公開を行うルーチン

形式

01 SVC-NAME PIC X(127).
01
PROGRAM-NAME PIC X(32).
01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPADVERTISE" USING
SVC-NAME PROGRAM-NAME TPSTATUS-REC.

説明

TPADVERTISE()を使用するとサーバーは提供するサービスを公開することができます。デフォルトの設定では、サーバーのサービスは、サーバーのブート時に公開され、サーバーの停止時にその公開が解除されます。

複数サーバー単一キュー(MSSQ)セットに属するすべてのサーバーは、同じサービス・セットを提供しなければなりません。これらのルーチンは、MSSQセットを共有する全サーバーを公開することによってこの規則を適用します。

TPADVERTISE()は、サーバー(または、呼出し側のMSSQセットを共有するサーバー・セット)のSVC-NAMEを公開します。SVC-NAMEの長さは127文字以内にしてください。これに、SPACESを指定することはできません。(「UBBCONFIG(5)」SERVICESの項を参照。)これより長い名前は127文字に切り詰められます。ユーザーは、切り詰められた名前が他のサービス名と同じにならないように注意する必要があります。PROGRAM-NAMEはOracle Tuxedo ATMIのサービス・プログラムの名前です。このプログラムは、SVC-NAMEに対するリクエストをサーバーが受け取ったときに起動されます。PROGRAM-NAMESPACESを指定することはできません。

SVC-NAMEがすでにサーバーに対して公開されていて、PROGRAM-NAMEがその現在のプログラムと一致する場合(すでに公開されていた名前と切り詰められた名前が一致する場合を含む)、TPADVERTISE()は正常終了します。ただし、SVC-NAMEがすでにサーバーに対して公開されていても、PROGRAM-NAMEが現在のプログラムと一致しない場合には(すでに公開されていた名前と切り詰められた名前が一致する場合も含む)、エラーが返されます。

戻り値

TPADVERTISE() TPADVERTISE()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPADVERTISE()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

SVC-NAMEまたはPROGRAM-NAMESPACESである場合、またはPROGRAM-NAMEが有効なプログラムの名前でない場合。

[TPELIMIT]

十分な空き領域がないためSVC-NAMEを宣言できない場合(UBBCONFIG(5)の*RESOURCESセクションのMAXSERVICESを参照)。

[TPEMATCH]

SVC-NAMEがサーバーに対してすでに宣言されているが、PROGRAM-NAME以外のプログラムで宣言されている場合。TPADVERTISE()が異常終了しても、SVC-NAMEはその現在のプログラムで宣言されたまま変わりません。つまり、現在のプログラムはPROGRAM-NAMEに置き換えられません。

[TPEPROTO]

TPADVERTISE()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

移植性

RS6000上のAIXでは、最初のCOBOLオブジェクト・ファイルで提供されるどのサービスもシンボル表で利用できません。buildserverコマンドで-sオプションを指定してサービス名を特定し、サービス名がTPADVERTISE()により実行時に公開されるようにする必要があります。

関連項目

TPUNADVERTISE(3cbl)

 


TPBEGIN(3cbl)

名前

TPBEGIN() - Oracle Tuxedo ATMIのトランザクションを開始するルーチン

形式

01 TPTRXDEF-REC.
COPY TPTRXDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPBEGIN" USING
TPTRXDEF-REC TPSTATUS-REC.

説明

Oracle Tuxedoシステムにおけるトランザクションは、完全に成功するか、あるいは何も影響を残さない1つの論理的な作業単位の定義として使用されます。トランザクションにより、多くのプロセスで(そして、多分様々なサイトで)行われる作業を1つの分割できない単位として扱うことができます。トランザクションの開始プロセスはTPBEGIN()とともに、TPCOMMIT()またはTPABORT()を使用して、トランザクション内での処理を記述します。いったんTPBEGIN()が呼び出されると、他のプロセスとの通信は、後のプロセス(つまりサーバー)をトランザクション・モードにすることができます(つまり、サーバーの作業はトランザクションの一部となります)。トランザクションに参加する制御スレッドは参加リソースと呼ばれます。トランザクションには、必ず1つの実行元があり、いくつかの参加リソースをもつことができます。TPCOMMIT()またはTPABORT()を呼び出せるのは、トランザクションの実行元だけです。参加リソースは、それらがTPRETURN()を呼び出したときに、TPSVCDEF-RECの設定によってトランザクションの結果に影響することがあります。トランザクション・モードに入ると、サーバーに出されたサービス・リクエストはすべて、トランザクションの一部として処理されます(明示的にリクエスタからのそれ以外の指定がない場合)。

また、会話型サーバーに対して確立されたオープン接続があるときにプログラムがトランザクションを起動しても、これらの接続はトランザクション・モードには変わりません。これは、TPCONNECT()の呼出し時にTPNOTRAN設定を指定したことと同じです。

T-OUTは、トランザクションのタイムアウトまでの時間を最低T-OUT秒にすることを指定します。トランザクションはタイムアウト時間を経過した後は、異常終了します。T-OUTの値が0であると、トランザクションにはシステムが許す最大時間(秒単位)のタイムアウト値が与えられます。つまり、このときのタイムアウト値は、システムが定義する符号なしlong型の最大値になります。

戻り値

TPBEGIN()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPBEGIN()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。

[TPETRAN]

呼出し側は、トランザクション起動時にエラーが発生したため、トランザクション・モードになれません。

[TPEPROTO]

tpbegin()が不正なコンテキストで呼び出されました(たとえば、呼出し側がすでにトランザクション・モードです)。

[TPESYSTEM]

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

[TPEOS]

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

注意事項

TPBEGIN()TPCOMMIT()、およびTPABORT()を使用してOracle Tuxedo ATMIのトランザクションを記述する際には、XAインタフェースに準拠した(および呼出し側に適切にリンクされている)リソース・マネージャが行う作業がトランザクションとしてのプロパティを備えていることを覚えておくことが重要です。トランザクションで行われるその他の処理内容は、TPCOMMIT()TPABORT()の影響を受けません。そのリソース・マネージャが行った処理がOracle Tuxedo ATMIのトランザクションの一部となるよう、XAインタフェースを満たすリソース・マネージャをサーバーにリンクする方法については、「buildserver(1)」を参照してください。

関連項目

TPABORT(3cbl)TPCOMMIT(3cbl)TPGETLEV(3cbl)TPSCMT(3cbl)

 


TPBROADCAST(3cbl)

名前

TPBROADCAST() - 名前によって通知をブロードキャストする

形式

01 TPBCTDEF-REC.
COPY TPBCTDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPBROADCAST" USING
TPBCTDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

説明

tpbroadcast()は、クライアント・プロセスやサーバー・プロセスがシステム内に登録されているクライアントに非請求メッセージを送ることができるようにします。ターゲット・クライアント・セットは、tpbroadcast()に渡されるワイルドカード以外の識別子すべてと一致するクライアントで構成されます。識別子の指定にワイルドカードを使用できます。

LMIDUSRNAMEおよびCLTNAMEは、すべてTPBCTDEF-RECに入り、ターゲット・クライアント・セットの選択に使用する論理識別子です。論理識別子のSPACES値はその引数のワイルドカードとなります。ワイルドカード引数は、そのフィールドの全クライアント識別子と一致します。各識別子は、システムが有効とみなすよう定義されたサイズの制約事項を満たさなければなりません。つまり、各識別子の長さは0 - 30文字にする必要があります。

リクエストのデータ部は、DATA-RECによって識別され、TPTYPE-REC内のLENは、送信するDATA-RECの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。TPTYPE-REC内のREC-TYPESPACESの場合、DATA-RECおよびLENは無視され、データ部なしでリクエストが送られます。

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

TPNOBLOCK

このリクエストは、ブロッキング条件が存在する場合(たとえば、メッセージの送信先である内部バッファがいっぱいの場合など)には、送信されません。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

ブロッキング条件が存在する場合にはリクエストは送られません(たとえば、メッセージの送信先である内部バッファがいっぱいのとき)。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

ルーチン内部のシステム・コールがシグナルによって中断された場合、中断されたシステム・コールは再発行されます。tpbroadcast()が正常終了した場合には、メッセージはシステムに渡され、選択されたクライアントに転送されます。tpbroadcast()は、選択された各クライアントにメッセージが送られるのを待機しません。TPNOSIGRSTRTまたはTPSIGRSTRTのいずれかが設定されていなければなりません。

TPNOSIGRSTRT

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

戻り値

TPBROADCAST()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPBROADCAST()はブロードキャスト・メッセージをアプリケーション・クライアントに送信せず、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。不当なLMIDを使用すると、TPBROADCAST()は失敗し、TPEINVAL()が戻されます。ただし、存在しないユーザーやクライアントの名前の場合は、どこにもブロードキャストされないだけでこのルーチンは正常に終了します。

[TPETIME]

ブロッキング・タイムアウトが発生しました。ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。

[TPEBLOCK]

呼出し時にブロッキング条件が検出されましたが、TPNOBLOCKが指定されました。

[TPGOTSIG]

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

[TPEPROTO]

TPBROADCAST()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

移植性

TPNOTIFY()に記述されているインタフェースはすべて、ネイティブ・サイトのUNIXシステム・ベースのプロセッサ上で利用できます。さらに、ルーチンTPBROADCAST()TPCHKUNSOL()およびルーチンTPSETUNSOL()は、UNIXおよびMS-DOSワークステーション・プロセッサ上で利用できます。

使用方法

シグナル・ベースの通知方法を選択したクライアントは、シグナルに関する制約から、システムがシグナルで通知を制御することはできません。このような状態で通知がなされた場合、システムは、選択されたクライアントに対する通知方法をディップ・インに切り替えることを示すログ・メッセージを生成し、以後、クライアントにはディップ・イン方式で通知が行われることになります。(通知方法の詳細については、「UBBCONFIG(5)」の中のRESOURCESセクションのNOTIFYパラメータの説明を参照してください)。

クライアントのシグナル通知は、常にシステムによって行われるので、元の通知呼出しがどこで行われるかにかかわらず、通知の形態は一貫しています。したがって、シグナル・ベースの通知を使用するには次の条件が必要です。

アプリケーション管理者のIDは、そのアプリケーションの構成ファイルで識別されます。

あるクライアントに対してシグナル・ベースの通知方法を選択すると、いくつかのATMI呼出しは異常終了します。TPSIGRSTRTの指定がなければ、非請求メッセージを受け取るため、TPGOTSIG()を返します。通知方法の選択については、「UBBCONFIG(5)」および「TPINITIALIZE(3cbl)」を参照してください。

関連項目

TPINITIALIZE(3cbl)TPNOTIFY(3cbl)TPTERM(3cbl)UBBCONFIG(5)

 


TPCALL(3cbl)

名前

TPCALL() - サービスへのメッセージの同期送信を行うルーチン

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
ITPTYPE-REC.
COPY TPTYPE.

01
IDATA-REC.
COPY User data.

01
OTPTYPE-REC.
COPY TPTYPE.

01
ODATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPCALL" USING
TPSVCDEF-REC ITPTYPE-REC IDATA-REC OTPTYPE-REC ODATA-REC TPSTATUS-REC.

説明

TPCALL()はリクエストを送り、それと同期してその応答を待ちます。このルーチンへの呼出しは、TPACALL()を呼び出した後即座にTPGETRPLY()を呼び出すのと同じことです。TPCALL()は、TPSVCDEF-REC内のSERVICE-NAMEで指定するリクエスト/レスポンス型サービスにリクエストを送ります。このリクエストは、以前になされたTPSPRIO()の呼出しで変更されていないかぎり、SERVICE-NAMEに定義されている優先度で送信されます。リクエストのデータ部分は、IDATA-RECによって指定され、ITPTYPE-REC内のLENは、送信するIDATA-RECの大きさを指定します。なお、IDATA-RECは、長さの指定を必要としないタイプのレコードを指している場合、ITPTYPE-REC内のLENは無視されます(0でかまいません)。ITPTYPE-REC内のREC-TYPESPACESの場合には、IDATA-RECおよびITPTYPE-REC内のLENは無視され、データ部なしでリクエストが送信されます。ITPTYPE-REC内のREC-TYPESTRINGのときにITPTYPE-REC内のLEN0の場合にも、データ部なしでリクエストが送信されます。ITPTYPE-REC内のREC-TYPEおよびITPTYPE-REC内のSUB-TYPEは、SERVICE-NAMEが認識するREC-TYPEおよびSUB-TYPEのいずれかと一致しなければなりません。

ODATA-RECは応答が読み込まれる場所を指定し、入力時のOTPTYPE-REC内のLENODATA-RECに移動されるべき最大バイト数を示します。同じレコードを送信と受信の両方に使用する場合には、ODATA-RECIDATA-RECREDEFINEDしてください。TPCALL()の正常終了時には、OTPTYPE-REC内のLENには、ODATA-RECに実際に移動されたバイト数が入ります。OTPTYPE-REC内のREC-TYPEおよびSUB-TYPEには、それぞれ応答のタイプおよびサブタイプが入っています。応答がODATA-RECより大きい場合は、ODATA-RECにはこのレコードに入るバイト数分のみが入ります。応答の残りは破棄され、TPCALL()TPTRUNCATE()を設定します。

OTPTYPE-REC内のLENが正常終了時に0であると、応答にはデータ部がなく、ODATA-RECは変更されていません。OTPTYPE-REC内のLENが入力時に0であると、エラーになります。

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

TPNOTRAN

呼出し側がトランザクション・モードにあり、この設定を使用していると、SERVICE-NAMEが呼び出されても、呼出し側のトランザクションの一部として実行されません。トランザクションをサポートしないサーバーにSERVICE-NAMEが属しており、呼出し側がトランザクション・モードにある場合は、この設定を指定しなければなりません。この値がtrueに設定されたトランザクション・モードの呼出し側には、トランザクション・タイムアウトが適用されます。それ以外は適用されません。この設定を使用した状態で呼び出されたサービスが正常に実行できない場合、呼出し側のトランザクションは影響を受けません。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPTRAN

呼出し側がトランザクション・モードにあり、この設定が使用されていると、SERVICE-NAMEが呼び出されたときに、このプログラムは呼出し側のトランザクションのために実行されます。呼出し側がトランザクション・モードにない場合、この設定は無視されます。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPNOCHANGE

この設定を使用すると、ODATA-RECのタイプは変更されません。つまり、応答されたレコードのタイプとサブタイプは、受け取り側が着信レコードのタイプを識別するかぎりは、それぞれOTPTYPE-REC内のREC-TYPEおよびOTPTYPE-REC内のSUB-TYPEと一致しなければなりません。TPNOCHANGEまたはTPCHANGEのいずれかが設定されていなければなりません。

TPCHANGE

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

TPNOBLOCK

このリクエストは、ブロッキング条件が存在する場合(たとえば、メッセージの送信先である内部バッファがいっぱいの場合など)には、送信されません。ただし、この設定はTPCALL()の送信部分にしか適用されません。このルーチンは応答を待ってブロックすることがあります。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

戻り値

TPCALL()は正常終了時には、TP-STATUSに[TPOK]を設定します。TP-STATUSTPOKまたはTPESVCFAILが設定されると、TPSTATUS-REC内のAPPL-RETURN-CODETPRETURN()の一部として送信されたアプリケーション定義の値が入ります。

着信メッセージの大きさが入力時にLENに指定されたものより大きい場合は、TPTRUNCATE()が設定され、LEN分のデータのみがODATA-RECに移動されて残りのデータは破棄されます。

エラー

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

[TPEINVAL]

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

[TPENOENT]

存在しないか、リクエスト/レスポンス型サービスでない(つまり、会話サービスである)ため、SERVICE-NAMEに送信できません。

[TPEITYPE]

REC-TYPEおよびSUB-TYPEが、SERVICE-NAMEが受け付けるタイプおよびサブタイプではありません。

[TPEOTYPE]

応答のタイプまたはサブタイプのいずれかは、呼出し側が認識しているものでありません。あるいは、TPNOCHANGEが設定されていて、ODATA-RECREC-TYPESUB-TYPEが、そのサービスから送られた応答のタイプおよびサブタイプと一致しません。OTPTYPE-RECODATA-RECLENも変更されません。サービス・リクエストが呼出し側の現在のトランザクションの一部として発行されると、応答が破棄されるので、そのトランザクションは中断のみとマークされます。

[TPETRAN]

SERVICE-NAMEは、トランザクションをサポートしていないサーバーに属していて、TPTRANが設定されました。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPCALL()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。)いずれの場合でも、ODATA-RECOTPTYPE-RECも変更されません。 トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで失敗します(前の段落で説明した例外を除く)。

[TPESVCFAIL]

呼出し側の応答を送信するサービス・ルーチンが、TPFAILTPRETURN()を呼び出しました。これは、アプリケーション・レベルの障害です。サービスの応答の内容(送信された場合)は、ODATA-RECで使用可能になります。呼出し側のトランザクションの一部としてサービス・リクエストが出された場合、トランザクションには中断のみマークが付けられます。トランザクションがタイムアウトしたかどうかに関わりなく、トランザクションが中断される前の通信で有効であるのは、TPNOREPLYTPNOTRAN、およびTPNOBLOCKを設定したTPACALL()の呼び出しだけです。

[TPESVCERR]

サービス・ルーチンの呼出し中、またはそのルーチンがTPRETURN()で完了する際に、エラーを検出しました(たとえば、間違った引数が渡された場合など)。このエラーが発生すると、応答データは返されません。つまり、ODATA-RECOTPTYPE-RECも変更されません。呼出し側のトランザクションの一部としてサービス・リクエストが出された場合(つまり、TPNOTRANが設定されていない場合)、このトランザクションは中断のみとしてマークされます。トランザクションがタイムアウトになったかどうかにかかわらず、トランザクションが中断される前に有効な通信は、TPNOREPLYTPNOTRAN、およびTPNOBLOCKを設定したTPACALL()の呼出しのみです。

[TPEBLOCK]

TPCALL()の送信部分でブロッキング状態が検出されましたが、TPNOBLOCKが指定されました。

[TPGOTSIG]

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

[TPEPROTO]

TPCALL()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPACALL(3cbl)TPFORWAR(3cbl)TPGPRIO(3cbl)TPRETURN(3cbl)TPSPRIO(3cbl)

 


TPCANCEL(3cbl)

名前

TPCANCEL() - 未処理の応答の通信ハンドルを取り消す

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPCANCEL" USING
TPSVCDEF-REC TPSTATUS-REC.

説明

TPCANCEL()は、TPACALL()が戻す通信ハンドル、TPSVCDEF-REC内のCOMM-HANDLEを取り消します。トランザクションに対応する通信ハンドルを取り消そうとすると、エラーになります。

正常終了の場合、COMM-HANDLEは以後無効になり、COMM-HANDLEのために受信する応答はすべて、警告なしに破棄されます。

戻り値

TPCANCEL()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPCANCEL()は異常終了し、TP-STATUSに次の値を設定します。

[TPEBADDESC]

COMM-HANDLEが無効な通信ハンドルです。

[TPETRAN]

COMM-HANDLEが呼出し側のトランザクションに対応しています。COMM-HANDLEはそのまま有効で、呼出し側の現在のトランザクションは影響を受けません。

[TPEPROTO]

TPCANCEL()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPACALL(3cbl)

 


TPCHKAUTH(3cbl)

名前

TPCHKAUTH() - Oracle Tuxedo ATMIアプリケーションへの結合に認証が必要かどうかをチェックする

形式

01 TPAUTDEF-REC.
COPY TPAUTDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPCHKAUTH" USING
TPAUTDEF-REC TPSTATUS-REC.

説明

TPCHKAUTH()は、アプリケーションの構成が認証を必要としているかどうかを調べます。これは一般に、TPINITIALIZE()を呼び出す前にアプリケーション・クライアントが使用して、ユーザーからのパスワードの入力を必要とするかどうかを判別します。

戻り値

TPCHKAUTH()は正常終了時には、TP-STATUSに[TPOK]を設定し、TPAUTDEF-RECに次のいずれかの値を設定します。

TPNOAUTH

認証が必要とされないことを示します。

TPSYSAUTH

システムの認証のみが必要とされることを示します。

TPAPPAUTH

システムの認証およびアプリケーション固有の認証の両方が必要であることを示します。

エラー

次の条件が発生すると、TPCHKAUTH()は異常終了し、TP-STATUSに次の値を設定します。

[TPESYSTEM]

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

[TPEOS]

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

移植性

TPCHKAUTH()に記述されているインタフェースは、UNIXシステムおよびMS-DOSオペレーティング・システム上でサポートされています。

関連項目

TPINITIALIZE(3cbl)

 


TPCHKUNSOL(3cbl)

名前

TPCHKUNSOL() - 非請求メッセージをチェックする

形式

01 MSG-NUM PIC S9(9) COMP-5. 

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPCHKUNSOL" USING
MSG-NUM TPSTATUS-REC.

説明

tpchkunsol()は、クライアントが非請求メッセージの検査を行うときに使用します。クライアントでシグナル・ベースの通知方法を使用してこのルーチンを呼び出しても、何も行われず、ただちに終了します。このルーチンを呼び出すと、アプリケーションで定義された非請求メッセージ処理ルーチンへの呼出しがOracle Tuxedo ATMIのライブラリによって行われることがあります。

戻り値

TPCHKUNSOL()は正常終了時には、TP-STATUSに[TPOK]を設定し、ディスパッチされた非請求メッセージの数をMSG-NUMに返します。

エラー

次の条件が発生すると、TPCHKUNSOL()は異常終了し、TP-STATUSに次の値を設定します。

[TPEPROTO]

tpchkunsol()が不正なコンテキストで呼び出されました(たとえば、サーバー内から)。

[TPESYSTEM]

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

[TPEOS]

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

移植性

TPNOTIFY()に記述されているインタフェースはすべて、ネイティブ・サイトのUNIXシステム・ベースのプロセッサ上で利用できます。さらに、ルーチンTPBROADCAST()TPCHKUNSOL()およびルーチンTPSETUNSOL()は、UNIXおよびMS-DOSワークステーション・プロセッサ上で利用できます。

シグナル・ベースの通知方法を選択したクライアントは、シグナルに関する制約から、システムがシグナルで通知を制御することはできません。このような状態で通知がなされた場合、システムは、選択されたクライアントに対する通知方法をディップ・インに切り替えることを示すログ・メッセージを生成し、以後、クライアントにはディップ・イン方式で通知が行われることになります。(通知方法の詳細については、「UBBCONFIG(5)」の中のRESOURCESセクションのNOTIFYパラメータの説明を参照してください)。

クライアントのシグナル通知は、常にシステムによって行われるので、元の通知呼出しがどこで行われるかにかかわらず、通知の形態は一貫しています。したがって、シグナル・ベースの通知を使用するには次の条件が必要です。

アプリケーション管理者のIDは、アプリケーション構成の一部として識別されます。

あるクライアントに対してシグナル・ベースの通知方法を選択すると、いくつかのATMI呼出しは異常終了します。TPSIGRSTRTの指定がなければ、非請求メッセージを受け取るため、TPGOTSIG()を返します。通知方法の選択については、「UBBCONFIG(5)」および「TPINITIALIZE(3cbl)」を参照してください。

関連項目

TPBROADCAST(3cbl)TPINITIALIZE(3cbl)TPNOTIFY(3cbl)TPSETUNSOL(3cbl)

 


TPCLOSE(3cbl)

名前

TPCLOSE() - Oracle Tuxedo ATMIのリソース・マネージャのクローズ

形式

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPCLOSE" USING
TPSTATUS-REC.

説明

tpclose()は、呼出し側とそれにリンクされたリソース・マネージャとの関係を絶ちます。リソース・マネージャはクローズの内容がそれぞれで異なるため、個々のリソース・マネージャをクローズするために必要な情報を構成ファイルに記述します。

リソース・マネージャがすでにクローズしている場合(つまり、tpclose()が1回以上呼び出された)、何も処理は行われず、正常終了を示すコードが返されます。

戻り値

TPCLOSE()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPCLOSE()は異常終了し、TP-STATUSに次の値を設定します。

[TPERMERR]

リソース・マネージャが正しくクローズできませんでした。より詳しい理由については、リソース・マネージャを独自の方法で調べることによって得ることができます。エラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれることに注意してください。

[TPEPROTO]

tpclose()が不正なコンテキストで呼び出されました(たとえば、呼出し側がトランザクション・モードにあるとき)。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPOPEN(3cbl)

 


TPCOMMIT(3cbl)

名前

TPCOMMIT() - 現在のOracle Tuxedo ATMIのトランザクションのコミット

形式

01 TPTRXDEF-REC.
COPY TPTRXDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPCOMMIT" USING
TPTRXDEF-REC TPSTATUS-REC

説明

tpcommit()はトランザクションの終了(コミット)を示します。tpcommit()は2フェーズ・コミット・プロトコルを使用して、参加リソース間の調整をとります。tpcommit()は、トランザクションの開始プロセスからのみ呼び出されます。いずれかの参加リソースがトランザクションをコミットできない場合(たとえば、TPFAIL()を付けてTPRETURN()を呼び出した場合など)、そのトランザクション全体が中断し、TPCOMMIT()は異常終了します。つまり、そのトランザクションに関連して各プロセスが行ったすべての作業は取り消されます。すべての参加リソースがトランザクションの中のそれぞれが担当する部分のコミットを決定した場合、この決定は安定したストレージに記録された後、すべての参加リソースに対して作業のコミットが要求されます。

TP-COMMIT-CONTROL特性の設定条件に従って(TPSCMT()参照)、コミットの決定が記録された後、あるいは2フェーズ・コミット・プロトコルが完了した後、TPCOMMIT()は正常に終了することができます。コミットの決定が記録された後、第2フェーズが完了する前(TP-CMT-LOGGED)にTPCOMMIT()が終了する場合、すべての参加リソースはトランザクションのために行った作業内容をコミットすることに同意しているとみなし、第2フェーズでトランザクションをコミットする約束を果たす必要があります。ただし、TPCOMMIT()は第2フェーズが完了する前に終了してしまうので、参加リソースの中には、このルーチンが正常終了した場合でも、トランザクションの担当部分をヒューリスティックに(コミットの決定とは矛盾するような方法で)完了するといった状況が発生してしまいます。

TP-COMMIT-CONTROL特性が2フェーズ・コミット・プロトコルの完了(TP-CMT-COMPLETE)後にTPCOMMIT()が終了するように設定されている場合、その戻り値にはトランザクションの正確なステータスが反映されます(つまり、トランザクションがヒューリスティックに完了したかどうか)。

なお、トランザクションに1つのリソース・マネージャしか関与していない場合には、1フェーズ・コミットが行われます(つまり、リソース・マネージャには、コミットできるかどうかの確認はされず、単にコミットの指示が出されます)。そして、この場合、TP-COMMIT-CONTROL特性はコミットには関係せず、TPCOMMIT()はヒューリスティックな結果(もしあれば)を返します。

未処理の応答の通信ハンドルがあるときにTPCOMMIT()が呼び出されると、TPCOMMIT()の終了時にトランザクションは中断し、呼出し側のトランザクションに対応する通信ハンドルがすべて無効になります。呼出し側のトランザクションに対応していない通信ハンドルは有効なままです。

呼出し側のトランザクションに対応する接続がすべてクローズしてから、TPCOMMIT()を呼び出さなければなりません。そうでないと、[TPEABORT]が返され、トランザクションは中断し、TPEV-DISCONIMMイベントを示して各接続が不規則に切断されます。TPBEGIN()の前またはTPNOTRANを設定して(つまり、トランザクション・モードでない状態で)オープンされた接続は、TPCOMMIT()またはTPABORT()の影響を受けません。

現時点では、TPCOMMIT()の引数TPTRXDEF-RECは将来使用するために予約されています。

戻り値

TPCOMMIT()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPCOMMT()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

TPTRXDEF-REC0でありません。呼出し側のトランザクションは影響を受けません。

[TPETIME]

トランザクションがタイムアウトし、トランザクションのステータスが不明です(つまり、コミットされている可能性もあれば、中途終了している可能性もあります)。トランザクションがタイムアウトし、そのステータスが中途終了であることが分かっている場合には、TPEABORTが返されます。

[TPEABORT]

トランザクションの実行元あるいはその参加リソースが行った作業をコミットできなかったために、そのトランザクションをコミットできませんでした。また、このエラーは、tpcommit()が、未終了の応答が残っているか会話型接続をオープンしたまま呼び出された場合にも返されます。

[TPEHEURISTIC]

ヒューリスティックな判断のため、トランザクションの一部としてなされた作業が一部はコミットされ、一部は中途終了しています。

[TPEHAZARD]

ある種の障害のため、トランザクションの一部としてなされた作業がヒューリスティックに完了している可能性があります。

[TPEPROTO]

tpcommit()が不正なコンテキストで呼び出されました(たとえば、参加リソースにより呼び出されるなど)。

[TPESYSTEM]

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

[TPEOS]

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

注意事項

TPBEGIN()TPCOMMIT()、およびTPABORT()を使用してOracle Tuxedo ATMIのトランザクションを記述する際には、XAインタフェースに準拠した(および呼出し側に適切にリンクされている)リソース・マネージャが行う作業のみがトランザクションとしてのプロパティを備えていることを忘れないようにすることが重要です。トランザクションで行われるその他の処理内容は、TPCOMMIT()TPABORT()の影響を受けません。そのリソース・マネージャが行った処理がOracle Tuxedo ATMIのトランザクションの一部となるよう、XAインタフェースを満たすリソース・マネージャをサーバーにリンクする方法については、「buildserver(1)」を参照してください。

関連項目

TPABORT(3cbl)TPBEGIN(3cbl)TPCONNECT(3cbl)TPGETLEV(3cbl)TPRETURN(3cbl)TPSCMT(3cbl)

 


TPCONNECT(3cbl)

名前

TPCONNECT() - 会話接続の確立

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

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

説明

TPCONNECT()により、プログラムは会話サービス、TPSVCDEF-REC内のSERVICE-NAMEとの半二重接続を設定できます。この名前は、会話型サーバーがポストした会話型サービス名の1つでなければなりません。

呼出し側は、接続セットアップ処理の一部として、アプリケーション定義データを受信サービス・ルーチンに渡すことができます。呼出し側がデータを渡すことを選択した場合には、DATA-RECにはデータが入り、TPTYPE-REC内のLENは送信するレコードの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。TPTYPE-REC内のREC-TYPESPACESである場合、DATA-RECおよびLENは無視されます(アプリケーション・データは会話サービスに渡されません)。REC-TYPEおよびTPTYPE-REC内のSUB-TYPEは、SERVICE-NAMEが認識するタイプおよびサブタイプと一致しなければなりません。

TPSVCSTART()の正常終了時には会話サービスはDATA-RECおよびLENを受け取るので、TPCONNECT()が送信したデータを獲得するために、会話サービスがTPRECV()を呼び出すことはありません。

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

TPNOTRAN

呼出し側がトランザクション・モードにあり、この設定を使用していると、SERVICE-NAMEが呼び出されても、呼出し側のトランザクションの一部として実行されません。トランザクションをサポートしないサーバーにSERVICE-NAMEが属しており、呼出し側がトランザクション・モードにある場合は、この設定を指定しなければなりません。このフラグ設定を使用するトランザクション・モードの呼出し側は、依然としてトランザクション・タイムアウトの対象となります(それ以外はなし)。この設定を使用した状態で呼び出されたサービスが正常に実行できない場合、呼出し側のトランザクションは影響を受けません。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPTRAN

呼出し側がトランザクション・モードにあり、この設定が使用されていると、SERVICE-NAMEが呼び出されたときに、このプログラムは呼出し側のトランザクションのために実行されます。呼出し側がトランザクション・モードにない場合、この設定は無視されます。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPSENDONLY

呼出し側は、最初にそれがデータの送信のみを行え、呼び出されたサービスはデータの受信のみを行えるように(つまり、呼出し側が当初の接続の制御権を有するように)接続を設定します。TPSENDONLYまたはTPRECVONLYのいずれかを指定しなければなりません。

TPRECVONLY

呼出し側は、それがデータの受信のみを行え、呼び出されたサービスがデータの送信のみを行えるように(つまり、呼び出されるサービスが当初、接続の制御権を有するように)接続を設定します。TPSENDONLYまたはTPRECVONLYのいずれかを指定しなければなりません。

TPNOBLOCK

ブロッキング条件が存在する場合、接続が設定されておらず、データが送信されません(たとえば、メッセージが送信されるときに使用されるデータ・バッファがいっぱいである場合)。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

シグナルが関数内部のシステム・コールを中断させると、呼出しが再度出されます。TPNOSIGRSTRTまたはTPSIGRSTRTのいずれかが設定されていなければなりません。

TPNOSIGRSTRT

TPNOSIGRSTRTを指定しているときにシグナルが関数内部のシステム・コールを中断させると、その呼出しは異常終了し、TP-STATUSTPGOTSIG()が設定されます。TPNOSIGRSTRTまたはTPSIGRSTRTのいずれかが設定されていなければなりません。

戻り値

TPCONNECT()は正常終了時には、TP-STATUSに[TPOK]を設定し、TPSVCDEF-REC内のCOMM-HANDLEに通信ハンドルを返します。このハンドルは、以降の呼出しにおいて接続を参照するために使用されます。

エラー

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

[TPEINVAL]

無効な引数が指定されました(TPSVCDEF-RECの設定が無効など)。

[TPENOENT]

SERVICE-NAMEが存在しないか、会話サーバーでないため、SERVICE-NAMEへの接続を行えません。

[TPEITYPE]

REC-TYPEおよびSUB-TYPEが、SERVICE-NAMEが受け付けるタイプおよびサブタイプではありません。

[TPELIMIT]

未終了の接続の最大数に達したため、接続が送られませんでした。

[TPETRAN]

SERVICE-NAMEはトランザクションをサポートしないプログラムに属していますが、TPNOTRANが設定されていませんでした。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPCONNECT()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで失敗します(前の段落で説明した例外を除く)。

[TPGOTSIG]

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

[TPEPROTO]

TPCONNECT()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPDISCON(3cbl)TPRECV(3cbl)TPSEND(3cbl)

 


TPDEQUEUE(3cbl)

名前

TPDEQUEUE() - キューからメッセージを取り出すルーチン

形式

01 TPQUEDEF-REC.
COPY TPQUEDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY STATDEF.

CALL "TPDEQUEUE" USING
TPQUEDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

説明

TPDEQUEUE()は、キュー・スペースQSPACE-NAME内のQNAMEで指定されるキューから、処理するメッセージを取り出します。

省略時設定では、キューの先頭のメッセージが取り出されます。キュー上のメッセージの順序は、そのキューの作成時に定義されます。アプリケーションは、MSGIDを使用してメッセージ識別子を指定するか、またはCORRIDを使用して相関識別子を指定することにより、特定のメッセージをキューから取り出すことをリクエストできます。メッセージを現在取り出せない場合には、アプリケーションはメッセージを待つことを示すために、TPQUEDEF-REC設定を使用することもできます。また、TPQUEDEF-REC構造体を使用して、メッセージを読み出してもそれがキューから削除されないようにしたり、キュー上の相対位置が変更されないようにすることが可能です。この後のこのレコードについての説明を参照してください。

DATA-RECは、キューから取り出されたメッセージの読込み先を指定します。入力時のLENは、DATA-RECへ移動する最大バイト数を示します。正常終了時には、LENには、DATA-RECへ移動された実際のバイト数が入ります。REC-TYPEおよびSUB-TYPEには、それぞれ応答のタイプおよびサブタイプが入ります。応答がDATA-RECより大きい場合は、DATA-RECにはこのレコードに入るバイト数分のみが入ります。応答の残りは破棄され、TPDEQUEUE()は異常終了して[TPTRUNCATE]を返します。

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

呼出し側がトランザクション・モードにあり、TPTRANが設定されている場合は、メッセージは、トランザクション・モードでキューから取り出されます。この結果、TPDEQUEUEが正常終了して呼出し側のトランザクションが正常にコミットされると、リクエストはキューから削除されます。呼出し側のトランザクションが、明示的に、またはトランザクション・タイムアウトあるいは何らかの通信エラーの結果としてロールバックされると、メッセージはキュー上に残されます。つまり、キューからのメッセージの削除もロールバックされます。同じトランザクション内で、同じメッセージの登録と取出しを行うことはできません。

呼出し側がトランザクション・モードにないか、またはTPNOTRANが設定されている場合は、メッセージはトランザクション・モードではキューから取り出されません。トランザクション・モードでない場合に通信エラーまたはタイムアウトが発生した場合、アプリケーションには、メッセージが正しくキューから取り出されたかどうかがわからず、メッセージが失われることがあります。

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

TPNOTRAN

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

TPTRAN

呼出し側がトランザクション・モードにあり、この設定が使用されていると、メッセージは呼出し側と同じトランザクション内でキューから取り出されます。呼出し側がトランザクション・モードにない場合は、この設定は無視されます。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPNOBLOCK

ブロッキング状態が存在すると、メッセージはキューから取り出されません。TPNOBLOCKを設定した場合、メッセージの転送先である内部バッファがいっぱいであるなどのブロッキング状態が存在すると、呼出しは異常終了し、TP-STATUSTPEBLOCKが設定されます。TPNOBLOCKを設定し、ターゲット・キューが別のアプリケーションによって排他的にオープンされているというブロッキング状態が存在する場合、呼出しは異常終了し、TP-STATUSTPEDIAGNOSTICが設定され、TPQUEDEFレコードのDIAGNOSTICフィールドにQMESHAREが設定されます。後者の場合、Oracle Tuxedoシステム以外のOracle製品に基づくほかのアプリケーションが、キューイング・サービスAPI (QSAPI)を使用して読取りと書き込み、またはそのいずれかを排他的に行うためにキューをオープンしています。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPNOCHANGE

この設定を使用すると、DATA-RECのタイプは変更できません。つまり、受信側が着信レコードのタイプを識別できる場合、応答レコードのタイプおよびサブタイプは、それぞれTPTYPE-REC内のREC-TYPEおよびTPTYPE-REC内のSUB-TYPEと一致しなければなりません。TPNOCHANGEまたはTPCHANGEのいずれかが設定されていなければなりません。

TPCHANGE

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

TPDEQUEUE()が正常終了すると、アプリケーションは、TPQUEDEF-REC構造体を使用してメッセージに関する追加情報を取得できます。この情報には、キューから取り出されたメッセージのメッセージ識別子、すべての応答または失敗メッセージに付随して、発信元がメッセージと元のリクエストを結び付けることができるようにする相関識別子、メッセージが送られるサービスの品質、メッセージの応答が送られるサービスの品質、応答が要求された場合は応答キューの名前、およびメッセージをキューから取り出すときの失敗に関する情報をアプリケーションが登録できる失敗キューの名前が含まれます。これらについて以下に説明します。

制御構造体

TPQUEDEF-RECは、アプリケーション・プログラムが、キューからのメッセージの取出しに関連する情報を渡したり、取得したりするために使用します。TPQUEDEF-RECの設定は、構造体の他のどの要素が有効であるかを示すために使用されます。

TPDEQUEUE()への入力時には、次の要素をTPQUEDEF-RECに設定できます。

05 MSGID    PIC X(32).
05 CORRID PIC X(32).

TPDEQUEUE()の入力情報を制御するTPQUEDEF-RECの有効な設定の一覧を次に示します。

TPQGETNEXT

この値を設定すると、デフォルトのキューの順序を使用して、キュー上の次のメッセージが取り出されることをリクエストします。TPQGETNEXTTPQGETBYMSGID、またはTPQGETBYCORRIDのいずれかを設定する必要があります。

TPQGETBYMSGID

この値を設定すると、MSGIDで識別されるメッセージが取り出されることをリクエストします。メッセージ識別子は、事前のTPENQUEUE()呼出しによって戻されます。メッセージがあるキューから別のキューに移動した場合、メッセージ識別子は正しい値を示さないので注意が必要です。また、メッセージ識別子の値は32バイト全体が意味を持つので、MSGIDで識別される値は、たとえば空白を埋め込むなどして完全に初期化される必要があります。
TPQGETNEXTTPQGETBYMSGID、またはTPQGETBYCORRIDのいずれかを設定する必要があります。

TPQGETBYCORRID

この値が設定されていると、CORRIDで識別されるメッセージが取り出されます。相関識別子は、アプリケーションがTPENQUEUE()でキューにメッセージを登録したときに指定されます。相関識別子の値は32バイト全体が意味を持つので、CORRIDで識別される値は、たとえば空白を埋め込むなどして、完全に初期化する必要があります。
TPQGETNEXTTPQGETBYMSGID、またはTPQGETBYCORRIDのいずれかを設定する必要があります。

TPQWAIT

この値が設定されていると、キューが空の場合はエラーが戻されません。かわりに、メッセージを取り出すことができるようになるまで、プロセスが待機します。メッセージを取り出すことができるようになるまで待機しない場合は、TPQNOWAITを設定します。TPQWAITTPQGETBYMSGIDまたはTPQGETBYCORRIDと組み合せて設定されている場合、指定されたメッセージ識別子または相関識別子を持つメッセージがキューに存在しないときは、エラーが戻されません。かわりに、基準を満たすメッセージを取り出すことができるようになるまで、プロセスは待機します。プロセスは呼出し側のトランザクション・タイムアウトの影響を受けますが、トランザクション・モードでない場合、プロセスはTMQUEUEプロセスで-tオプションによって指定されたタイムアウトの影響を受けます。
基準に一致するメッセージをすぐに取り出すことができない場合に、設定されているアクション・リソースの限界に達すると、TPDEQUEUEは失敗し、TP-STATUSTPEDIAGNOSTICが設定され、DIAGNOSTICQMESYSTEMが設定されます。 TPQWAIT制御パラメータを指定するTPDEQUEUE()の各リクエストでは、条件を満たすメッセージがすぐに利用できない場合、キュー・マネージャ(TMQUEUE)のアクション・オブジェクトを使用できる必要があります。アクション・オブジェクトを利用できない場合、TPDEQUEUE()リクエストは失敗します。利用できるキュー・マネージャのアクション数は、キュー・スペースの作成時または変更時に指定されます。待機中のキューからの取出しリクエストが完了すると、対応するアクション・オブジェクトは別のリクエストに使用できるようになります。

TPQPEEK

TPQPEEKを設定すると、指定されたメッセージを読み取ってもキューから削除されなくなります。TPNOTRANフラグが設定されている必要があります。トランザクション内でメッセージをキューに登録されたメッセージやキューから取り出されたメッセージは、そのトランザクションが完了するまで読み取ることができません。
あるスレッドでTPQPEEKを使用してメッセージをキューから非破壊的に取り出す場合、非破壊的な取出しリクエストをシステムが処理する少しの間、ほかの非ブロッキング状態のメッセージ取出し操作からそのメッセージが認識されないことがあります。たとえば、特定の選択基準(メッセージ識別子や相関識別子など)を使用してメッセージをキューから取り出す操作が、破棄せずに取出しが現在行われているメッセージを探している場合などがあります。

TPDEQUEUE()からの出力時には、次の要素がTPQUEDEF-RECに設定されます。

05 PRIORITY                PIC S9(9) COMP-5. 
05 MSGID PIC X(32).
05 CORRID PIC X(32).
05 TPQUEQOS-DELIVERY-FLAG PIC S9(9) COMP-5.
05 TPQUEQOS-REPLY-FLAG PIC S9(9) COMP-5.
05 REPLYQUEUE PIC X(127).
05 FAILUREQUEUE PIC X(127).
05 DIAGNOSTIC PIC S9(9) COMP-5.
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.

TPDEQUEUE()からの出力情報を制御するTPQUEDEF-RECの有効な設定を次に示します。どの設定でも、TPDEQUEUE()の呼出し時に真の場合、メッセージがキューに入れられたときに提供された値が、レコード内の対応する要素に格納され、その設定は真のままになります。値を利用できない、つまりメッセージがキューに入れられたときに値が提供されていない場合、またはTPDEQUEUE()の呼出し時に設定が真でない場合、その値が真でない状態でTPDEQUEUE()は完了します。

TPQPRIORITY

この値が設定され、TPDEQUEUE()の呼出しが成功し、メッセージが明示的な優先度でキューに登録された場合は、その優先度がPRIORITYに格納されます。優先度は1以上100以内の範囲内で、数値が高いほど優先度も高くなります。つまり、高い数値のメッセージが低い数値のメッセージよりも先にキューから取り出されます。TPQNOPRIORITYが設定されている場合、優先度は使用できません。
メッセージのキューへの登録時に優先度が明示的に指定されていない場合、そのメッセージの優先度は50になります。

TPQMSGID

この値を設定し、TPDEQUEUE()の呼出しが正常終了した場合は、メッセージ識別子がMSGIDに格納されます。メッセージ識別子の値は、32バイト全体が意味を持ちます。TPQNOMSGIDが設定されている場合、メッセージ識別子は使用できません。

TPQCORRID

この値を設定し、TPDEQUEUE()の呼出しが正常終了し、メッセージが相関識別子を付けてキューに登録された場合は、相関識別子がCORRIDに格納されます。相関識別子の値は、32バイト全体が意味を持ちます。Oracle Tuxedo /Qから渡されるメッセージに対するすべての応答は、元のメッセージの相関識別子を持ちます。TPQNOCORRIDが設定されている場合、相関識別子は使用できません。

TPQDELIVERYQOS

この値が設定され、TPDEQUEUE()の呼出しが成功し、メッセージがサービスの配信品質と共にキューに登録された場合、TPQUEQOS-DELIVERY-FLAGで指定されるフラグTPQQOSDELIVERYDEFAULTPERSISTTPQQOSDELIVERYPERSISTENT、またはTPQQOSDELIVERYNONPERSISTENTがサービスの配信品質を示します。TPQNODELIVERYQOSが設定されている場合、サービスの配信品質は使用できません。
メッセージのキューへの登録時にサービスの配信品質が明示的に指定されていない場合は、ターゲット・キューのデフォルトの配信ポリシーによってメッセージの配信サービスの品質が決まります。

TPQREPLYQOS

この値が設定され、TPDEQUEUE()の呼出しが成功し、メッセージがサービスの応答品質と共にキューに登録された場合、TPQUEQOS-REPLY-FLAGで指定されるフラグTPQQOSREPLYDEFAULTPERSISTTPQQOSREPLYPERSISTENT、またはTPQQOSREPLYNONPERSISTENTがサービスの配信品質を示します。TPQNOREPLYQOSが設定されている場合、サービスの応答品質は使用できません。
メッセージがキューに入れられたときにサービスの応答品質が明示的に指定されていない場合、REPLYQUEUEキューのデフォルトの配信ポリシーが応答に対するサービスの配信品質を指定します。デフォルトの配信ポリシーは、メッセージに対する応答がキューに登録されるときに決定されます。つまり、元のメッセージがキューに登録されてから応答が登録されるまでの間に、応答キューのデフォルトの配信ポリシーが変更された場合、応答が最後に登録される時点で有効なポリシーが使用されます。

TPQREPLYQ

この値が設定され、TPDEQUEUE()の呼出しが成功し、メッセージが応答キューと共にキューに登録された場合、その応答キューの名前がREPLYQUEUEに格納されます。メッセージへの応答は、リクエスト・メッセージと同じキュー・スペース内の指定されたキューに登録されます。TPQNOREPLYQが設定されている場合、応答キューは使用できません。

TPQFAILUREQ

この値が設定され、TPDEQUEUE()の呼出しが成功し、メッセージが異常終了キューと共にキューに登録された場合、その異常終了キューの名前がFAILUREQUEUEに格納されます。異常終了メッセージは、リクエスト・メッセージと同じキュー・スペース内の指定された異常終了キューに登録されます。TPQNOFAILUREQが設定されている場合、異常終了キューは使用できません。

TPQUEDEF-RECの残りの設定は、TPDEQUEUE()が呼び出されると、TPQNOTOPTPQNOBEFOREMSGIDTPQNOTIME_ABSTPQNOTIME_RELTPQNOEXPTIME_ABSTPQNOEXPTIME_REL、およびTPQNOEXPTIME_NONEに設定されます。

TPDEQUEUE()の呼出しが異常終了し、TP-STATUSTPEDIAGNOSTICが設定された場合は、異常終了の原因を示す値がDIAGNOSTICに返されます。返される可能性のある値は、この後の「診断」の項で定義しています。

また、TPDEQUEUE()呼出しが正常終了した場合の出力時には、APPKEYにアプリケーション認証キーが設定され、CLIENTIDにリクエストの発信元であるクライアントの識別子が設定され、APPL-RETURN-CODEにメッセージ登録時に設定されたユーザー戻りコードが設定されます。

戻り値

TPDEQUEUE()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

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

[TPEINVAL]

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

[TPENOENT]

QSPACE-NAMEを利用できないので、これにアクセスできません(関連するTMQUEUE(5)サーバーは利用できません)。または、グローバル・トランザクション表(GTT)にエントリがないので、グローバル・トランザクションを開始できません。

[TPEOTYPE]

キューから取り出されたメッセージのREC-TYPEおよびSUB-TYPEのいずれかは、呼出し側が認識しているものではありません。あるいは、TPNOCHANGEが設定されていて、REC-TYPESUB-TYPEが、キューから取り出されたメッセージのREC-TYPEおよびSUB-TYPEと一致しません。DATA-RECTPTYPE-RECも変更されません。 呼出しがトランザクション・モードで行われ、このエラーが発生すると、トランザクションはアボートのみになり、メッセージはキューに残ります。

[TPTRUNCATE]

着信メッセージのサイズが、LENで指定されたサイズより大きいことを示します。LENで指定されたデータ長分のみがDATA-RECへ移動され、残りのデータは破棄されます。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPDEQUEUE()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。)いずれの場合でも、DATA-RECTPTYPE-RECも変更されません。 トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで失敗します(前の段落で説明した例外を除く)。

[TPEBLOCK]

ブロッキング条件が存在し、TPBLOCKが設定されました。

[TPGOTSIG]

シグナルが受信され、TPNOSIGRSTRTが設定されました。

[TPEPROTO]

TPDEQUEUE()が不正に呼び出されました。キューまたはトランザクションには影響ありません。

[TPESYSTEM]

Oracle Tuxedoシステムのエラーが発生しました。エラーの正確な性質がログ・ファイルに書き込まれます。キューには影響ありません。

[TPEOS]

オペレーティング・システムのエラーが発生しました。キューには影響ありません。

[TPEDIAGNOSTIC]

指定されたキューからのメッセージの取出しが異常終了しました。異常終了の原因は、TPQUEDEF-RECを介して返される診断値によって判別できます。

診断

次の診断値は、キューからのメッセージの取出し中に返されます。

[QMEINVAL]

無効な設定が指定されました。

[QMEBADRMID]

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

[QMENOTOPEN]

このリソース・マネージャは現在オープンしていません。

[QMETRAN]

呼出しがトランザクション・モードでない、またはTPNOTRAN設定で呼出しが行われ、キューからメッセージを取り出すトランザクションの開始を試みた際に、エラーが発生しました。この診断は、Oracle Tuxedoリリース7.1以降のキュー・マネージャでは戻されません。

[QMEBADMSGID]

キューからの取出し用に、無効なメッセージ識別子が指定されました。

[QMESYSTEM]

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

[QMEOS]

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

[QMEABORTED]

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

[QMEPROTO]

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

[QMEBADQUEUE]

無効な、または削除された、あるいは予約されているキューの名前が指定されました。

[QMENOMSG]

キューから取り出せるメッセージはありません。メッセージがキュー上に存在し、別のアプリケーション・プロセスが、このメッセージをキューから読み取っていた可能性があることに注意してください。この場合は、その別のプロセスがトランザクションをロールバックしたときにメッセージはキューに戻されます。

[QMEINUSE]

メッセージ識別子または相関識別子を使用してメッセージをキューから取り出す際に、指定されたメッセージが別のトランザクションによって使用されています。それ以外の場合、現在キューにあるすべてのメッセージは、ほかのトランザクションによって使用されています。この診断は、Oracle Tuxedoリリース7.1以降のキュー・マネージャでは返されません。

[QMESHARE]

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

関連項目

qmadmin(1)TPENQUEUE(3cbl)TMQUEUE(5)

 


TPDISCON(3cbl)

名前

TPDISCON() - 会話接続の切断

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPDISCON" USING
TPSVCDEF-REC TPSTATUS-REC.

説明

TPDISCON()は、通信ハンドル、TPSVCDEF-REC内のCOMM-HANDLEで指定された接続を即座に切断し、接続の他方の側でTPEV-DISCONIMMイベントを生成します。

TPDISCON()は会話の開始プロセスからしか呼び出せません。TPDISCON()は、呼出しに使用された通信ハンドルに対応する会話サービスの中からは呼び出せません。会話サービスはTPRETURN()を使用して、会話の該当部分が完了したことを通知しなければなりません。同様に、会話サービスとのやりとりを行うプログラムがTPDISCON()を発行できる場合でも、正しい結果を保証するためには、そのサービスにTPRETURN()で接続を切断させるようにしてください。接続の起動元がサーバーである場合には、TPRETURN()を使用し正常に切断を行うこともできます。接続の起動元がトランザクション・モードにある場合、TPCOMMIT()またはTPABORT()を使用して、接続を正常に終了させることができます。

TPDISCON()を使用すると、接続はただちに切断されます(つまり、正常終了ではなく、中断)。したがって、あて先に届いていないデータは失われます。TPDISCON()は、接続の他方の側のプログラムが呼出し側のトランザクションに参加している場合でも発行されます。この場合、このトランザクションは中断します。また、呼出し側は、TPDISCON()が呼び出されるときにその接続の制御権をもっている必要はありません。

戻り値

TPDISCON()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPDISCON()は異常終了し、TP-STATUSに次の値を設定します。

[TPEBADDESC]

COMM-HANDLEが無効であるか、会話サービスに使用された通信ハンドルです。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPDISCON()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側のトランザクションで接続時にTPDISCON()を呼び出すと、TPDISCON()が正常に呼び出されても、トランザクションが「中断のみ」とマークされる可能性があります。 呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。 トランザクション・タイムアウトが発生すると、1つの例外を除き、トランザクションが中断されないかぎり、会話を継続したり、新しいリクエストを送信したり、未処理の応答を受信しようとしても、TPETIMEで失敗します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで失敗します(前の段落で説明した例外を除く)。

[TPEPROTO]

TPDISCON()の呼出し方法が不適切です。

[TPESYSTEM]

Oracle Tuxedoシステムのエラーが発生しました。エラーの正確な性質がログ・ファイルに書き込まれます。通信ハンドルは無効になります。

[TPEOS]

オペレーティング・システムのエラーが発生しました。通信ハンドルは無効になります。

関連項目

TPABORT(3cbl)TPCOMMIT(3cbl)TPCONNECT(3cbl)TPRECV(3cbl)TPRETURN(3cbl)TPSEND(3cbl)

 


TPENQUEUE(3cbl)

名前

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()は、キュー・スペースQSPACE-NAME内のQNAMEで指定されるキューにメッセージを格納します。キュー・スペースは、キューを集めたもので、そのうちの1つのキューがQNAMEでなければなりません。

メッセージがOracle Tuxedo ATMIシステムのサーバーを対象としている場合、QNAMEは、サーバーによって提供されるサービスの名前に一致します。システムが提供するサーバーであるTMQFORWARD(5)は、メッセージをキューから取り出し、キューと同じ名前のサービスを提供するサーバーにそのメッセージを転送するデフォルトの機構となります。発信元が応答を期待していた場合は、転送されたサービス・リクエストへの応答は、特に指定されている場合を除き、発信元のキューに格納されます。発信元は、後で応答メッセージをキューから取り出します。キューは、任意の2つのOracle Tuxedo ATMIのプロセス間(クライアントやサーバー)における信頼性の高いメッセージ転送機構用としても使用できます。この場合、キューの名前はサービス名とは一致せず、メッセージ転送のための名前に関連します。

メッセージのデータ部分は、DATA-RECによって指定され、TPTYPE-REC内のLENは、キューに登録するDATA-RECの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。TPTYPE-REC内のREC-TYPESPACESの場合には、DATA-RECおよびLENは無視され、データ部なしでメッセージがキューに登録されます。TPTYPE-REC内のREC-TYPEおよびSUB-TYPEは、QSPACE-NAMEが認識するREC-TYPEおよびSUB-TYPEのいずれかと一致しなければなりません。

メッセージは、QSPACE-NAME用に定義された優先度が事前のTPSPRIO()の呼出しによって無効化されていないかぎり、QSPACE-NAME用の優先度でキューに登録されます。

呼出し側がトランザクションにあり、TPTRANが設定されている場合は、メッセージは、トランザクション・モードでキューに登録されます。この結果、TPENQUEUE()が正常終了して呼出し側のトランザクションが正常にコミットされると、メッセージは、トランザクションの完了後に処理されることが保証されます。呼出し側のトランザクションが、明示的に、またはトランザクション・タイムアウトあるいはなんらかの通信エラーの結果としてロールバックされると、メッセージはキューから削除されます(つまり、キューへのメッセージの登録もロールバックされます)。同じトランザクション内で同じメッセージの登録と取出しを行うことはできません。

呼出し側がトランザクション・モードにないか、またはTPNOTRANが設定されている場合は、メッセージはトランザクション・モードではキューに登録されません。TPENQUEUE()が正常終了した後は、サブミットされたメッセージがキューに登録されたことが保証されます。トランザクション・モードでないときに通信エラーまたはタイムアウトが発生した場合、アプリケーションには、メッセージが正しくキューに格納されたかどうかがわかりません。

メッセージが処理される順序は、以下に説明するように、アプリケーションによってTPQUEDEF-RECを介して制御されます。デフォルトのキューの順序付けは、キューの作成時に設定されます。

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

TPNOTRAN

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

TPTRAN

呼出し側がトランザクション・モードにあり、この設定が使用されていると、メッセージは呼出し側と同じトランザクション内でキューに登録されます。呼出し側がトランザクション・モードにない場合は、この設定は無視されます。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPNOBLOCK

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

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

キューへのメッセージ登録に関する追加情報は、TPQUEDEF-RECを介して指定できます。この情報には、デフォルトのキューの順序付けを無効にしてキューの先頭または登録済みのメッセージの前にメッセージを登録するための値、キューからメッセージを取り出すまでの絶対時間または相対時間、メッセージが期限切れになりキューから削除される絶対時間または相対時間、メッセージ配信サービスの品質、メッセージが応答する際のサービス品質、メッセージとそのメッセージに関連付けられた応答または失敗メッセージを結び付けるときに役立つ相関識別子、応答を登録するキューの名前、およびすべての失敗メッセージを登録するキューの名前が含まれます。

制御パラメータ

TPQUEDEF-RECは、アプリケーション・プログラムが、キューへのメッセージの登録に関連する情報を渡したり、取得したりするために使用します。設定は、レコード内のどの要素が有効であるかを示すために使用されます。

TPENQUEUE()への入力時には、次の要素をTPQUEDEF-RECに設定できます。

05 DEQ-TIME                 PIC S9(9) COMP-5. 
05 PRIORITY PIC S9(9) COMP-5.
05 MSGID PIC X(32).
05 CORRID PIC X(32).
05 TPQUEQOS-DELIVERY-FLAG PIC S9(9) COMP-5.
05 TPQUEQOS-REPLY-FLAG PIC S9(9) COMP-5.
05 EXP-TIME PIC S9(9) COMP-5.
05 REPLYQUEUE PIC X(127).
05 FAILUREQUEUE PIC X(127).
05 APPL-RETURN-CODE PIC S9(9) COMP-5.

次の値は、どの値がTPQUEDEF-RECに設定されるかを示します。

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以外の応答を返す場合は、応答とそれに関連付けられたTPSTATUSレコード内のAPPL-RETURN-CODEで構成される異常終了メッセージが、元のリクエスト・メッセージと同じキュー・スペース内の指定されたキューに入ります。異常終了キューの名前を使用できない場合は、TPQNOFAILUREQを設定します。

TPQDELIVERYQOS
TPQREPLYQOS

TPQDELIVERYQOSフラグを設定すると、TPQUEQOS-DELIVERY-FLAGで指定されるフラグを使用して、メッセージの配信サービスの品質を制御できます。相互に排他的な次のフラグ、TPQQOSDELIVERYDEFAULTPERSISTTPQQOSDELIVERYPERSISTENT、またはTPQQOSDELIVERYNONPERSISTENTのいずれかを設定する必要があります。TPQDELIVERYQOSを設定しない場合、TPQNODELIVERYQOSを設定する必要があります。TPQNODELIVERYQOSを設定すると、ターゲット・キューのデフォルトの配信ポリシーによって、メッセージの配信サービスの品質が決まります。
TPQREPLYQOSフラグを設定すると、TPQUEQOS-REPLY-FLAGで指定されるフラグを使用して、応答メッセージの配信サービスの品質を制御できます。相互に排他的な次のフラグ、TPQQOSREPLYDEFAULTPERSISTTPQQOSREPLYPERSISTENT、またはTPQQOSREPLYNONPERSISTENTのいずれかを設定する必要があります。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-NONETPQNOEXPTIMEのいずれかを設定しなければなりません。

TPQEXPTIME-REL

この値が設定されていると、メッセージに有効期限の相対時間が適用されます。これは、メッセージがキューに到達してから、キューから削除されるまでの秒数です。有効期限の相対時間は、EXP-TIMEに格納された値で示されます。
有効期限の時間がメッセージの使用可能時間より前の場合、使用可能時間が有効期限の切れる時間より前になるようにいずれかの時間を変更しないかぎり、メッセージをキューから取り出すことはできません。また、これらのメッセージがキューからの取出しの対象になったことがなくても、有効期限が切れるとキューから削除されます。メッセージがトランザクション内にあるときに期限切れになった場合、それによってトランザクションが異常終了することはありません。トランザクション内でキューへの登録、またはキューからの取出し中に有効期限が切れたメッセージは、トランザクションが終了した時点でキューから削除されます。メッセージの有効期限が切れたことの通知は行われません。 TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONETPQNOEXPTIMEのいずれかを設定しなければなりません。

TPQEXPTIME-NONE

この値を設定すると、メッセージが期限切れになることはありません。このフラグは、ターゲット・キューに関連するデフォルトの期限切れポリシーを無効にします。メッセージを削除するには、管理用のインタフェースを使用して、キューからメッセージを取り出すか削除します。TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONETPQNOEXPTIMEのいずれかを設定しなければなりません。

TPQNOEXPTIME

この値を設定すると、ターゲット・キューに関連するデフォルトの期限切れ時間がメッセージに使用されます。TPQEXPTIME-ABSTPQEXPTIME-RELTPQEXPTIME-NONETPQNOEXPTIMEのいずれかを設定しなければなりません。

また、APPL-RETURN-CODEにユーザー戻り値を設定することができます。この値は、メッセージをキューから取り出すアプリケーションに戻されます。

TPENQUEUE()からの出力時には、次の要素がTPQUEDEF-RECに設定されます。

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

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

TPQMSGID

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

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

TPENQUEUE()の呼出しが異常終了し、TP-STATUSTPEDIAGNOSTICが設定された場合は、異常終了の原因を示す値がDIAGNOSTICに返されます。返される可能性のある値は、この後の「診断」の項で定義しています。

戻り値

TPENQUEUE()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

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

[TPEINVAL]

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

[TPENOENT]

QSPACE-NAMEを利用できないので、これにアクセスできません(関連するTMQUEUE(5)サーバーは利用できません)。または、グローバル・トランザクション表(GTT)にエントリがないので、グローバル・トランザクションを開始できません。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPENQUEUE()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPEBLOCK]

ブロッキング条件が存在し、TPBLOCKが設定されました。

[TPGOTSIG]

シグナルが受信され、TPNOSIGRSTRTが設定されました。

[TPEPROTO]

TPENQUEUE()が不正に呼び出されました。キューまたはトランザクションには影響ありません。

[TPESYSTEM]

Oracle Tuxedoシステムのエラーが発生しました。エラーの正確な性質がログ・ファイルに書き込まれます。キューには影響ありません。

[TPEOS]

オペレーティング・システムのエラーが発生しました。キューには影響ありません。

[TPEDIAGNOSTIC]

指定されたキューへのメッセージの登録が異常終了しました。異常終了の原因は、TPQUEDEF-RECを介して返される診断値によって判別できます。

診断

次の診断値は、キューへのメッセージの登録中に返されます。

[QMEINVAL]

無効な設定が指定されました。

[QMEBADRMID]

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

[QMENOTOPEN]

このリソース・マネージャは現在オープンしていません。

[QMETRAN]

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

[QMEBADMSGID]

無効なメッセージ識別子が指定されました。

[QMESYSTEM]

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

[QMEOS]

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

[QMEABORTED]

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

[QMEPROTO]

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

[QMEBADQUEUE]

無効な、または削除された、あるいは予約されているキューの名前が指定されました。

[QMENOSPACE]

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

[QMERELEASE]

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

[QMESHARE]

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

関連項目

qmadmin(1)TPDEQUEUE(3cbl)TPSPRIO(3cbl)TMQFORWARD(5), TMQUEUE(5)

 


TPFORWAR(3cbl)

名前

TPFORWAR() - Oracle Tuxedo ATMIのサービス・リクエストを別のルーチンに転送

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

COPY TPFORWAR REPLACING TPSVCDEF-REC BY
TPSVCDEF-REC
TPTYPE-REC BY TPTYPE-REC
DATA-REC BY DATA-REC
TPSTATUS-REC BY TPSTAUS-REC

説明

TPFORWAR()を使用すると、サービス・ルーチンはクライアントのリクエストを別のサービス・ルーチンに転送して処理させることができます。TPFORWAR()にはEXIT PROGRAM文が含まれるので、Oracle Tuxedo ATMIのディスパッチャに制御を確実に正しく返すために、TPFORWAR()はそれが起動されたルーチンと同じルーチンの中から呼び出されなければなりません。つまり、TPFORWAR()をサービス・ルーチンのサブ・プログラムから呼び出してはなりません。制御がOracle Tuxedo ATMIのディスパッチャに返されないからです。TPFORWAR()を会話サービスの中から呼び出すことはできません。

このルーチンは、DATA-RECに入っているデータを使用してTPSVCDEF-REC内のSERVICE-NAMEによって指定されるサービスにリクエストを転送します。リクエストを転送するサービス・ルーチンは応答を受け取りません。リクエストの転送が終わると、サービス・ルーチンはOracle Tuxedo ATMIのディスパッチャに戻り、他の作業を行える状態になります。なお、転送されたリクエストからの応答は期待しないため、このリクエストは、リクエストを転送するサービスと同じ実行可能プログラム内の任意のサービス・ルーチンに、エラーなしで転送することができます。

サービス・ルーチンがトランザクション・モードであると、このルーチンはトランザクションの呼出し側の部分を、そのトランザクションの起動元がTPCOMMIT()またはTPABORT()のいずれかを出したときに完了できるような状態にします。トランザクションがサービス・ルーチンの実行中にTPBEGIN()により明示的に開始された場合、このトランザクションをTPCOMMIT()またはTPABORT()で終了させてから、TPFORWAR()を呼び出さなければなりません。このため、転送チェーンに関与するすべてのサービスは、トランザクション・モードで起動するか、あるいはどれもトランザクション・モードでは起動しないようにします。

転送チェーンの最後のサーバーは、TPRETURN()を使用してリクエストの発信元に応答を返します。要約して言えば、TPFORWAR()は待機しているリクエスタに応答を返す役割を別のサーバーに転送するわけです。

TPFORWAR()は、サービス・ルーチンが出したサービス・リクエストから期待されるすべての応答を受け取った後、呼び出すようにしてください。受信されていない未終了の応答は、受信後、Oracle Tuxedo ATMIのディスパッチャによって自動的に取り除かれます。さらに、以後、これらの応答の通信ハンドルは無効になり、リクエストはSERVICE-NAMEに転送されません。

DATA-RECは送信されるレコードであり、TPTYPE-REC内のLENは、送信するDATA-RECの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。TPTYPE-REC内のREC-TYPESPACESの場合、DATA-RECおよびLENは無視され、長さゼロのデータでリクエストがデータ長ゼロで送信されます。REC-TYPESTRINGで、LEN0の場合は、リクエストはデータ部なしで送信されます。

サービス・ルーチンの作成者はTPFORWAR()の呼出し後は制御を保持しないので、シグナル・リスタートによるブロッキング送信が使用されます(つまり、TPSIGRSTRT)。現時点では、TPSVCDEF-RECの設定は将来使用するために予約されており、指定しても無視されます。

戻り値

サービス・ルーチンは、呼出し側であるOracle Tuxedo ATMIディスパッチャには値を返しません。このためTP-STATUSは設定されません。

エラー

このルーチンに渡されたパラメータの処理中またはそのルーチン自体の処理中にエラーが発生した場合、失敗メッセージが最初のリクエスタに戻されます(応答が送信されない場合を除く)。未終了の応答または従属接続がある場合や呼出し側のトランザクションに中断のみマークが付けられた場合には、失敗メッセージの原因となる障害であるとみなされます。リクエスタは、エラーを示すTPESVCERR()によって、失敗メッセージを検出します。このようなエラーが発生した場合、呼出し側のデータは送信されません。また、このエラーが原因で、呼出し側の現在のトランザクションに中断のマークが付けられます。

サービス・ルーチンの処理中あるいはリクエストの転送中にトランザクション・タイムアウトになると、TPCALL()またはTPGETRPLY()で応答を待つリクエスタはTPETIMEエラーを受け取ります。サービスがトランザクション内部で失敗すると、そのトランザクションはタイムアウトになり、TX_ROLLBACK_ONLY状態になります。また、そのトランザクションの後続のATMI呼出しは、すべてTPETIMEで異常終了します。待ち状態にあるリクエスタは、どのようなデータも受信しません。しかし、サービス・ルーチンはTPRETURN()またはTPFORWAR()を使用して終了させるようになっています。会話型サービス・ルーチンの場合、TPRETURN()を使用しなければならず、TPFORWAR()を使用することはできません。

サービス・ルーチンがTPRETURN()TPFORWAR()も使用しない場合、またはTPFORWAR()が会話サーバーから呼び出された場合、そのサーバーはログ・ファイルに警告メッセージを出力し、最初のリクエスタにサービス・エラーを戻します。また、従属接続に対するオープン接続はすべて、ただちに切断され、未終了の非同期応答は無効とマークされます。サーバーが障害発生時にトランザクション・モードにあった場合は、そのトランザクションには中断のみマークが付けられます。TPRETURN()またはTPFORWAR()のいずれかがサービス・ルーチンとは別に(たとえば、クライアント、TPSVRINIT()TPSVRDONE()などから)使用されても、これらのルーチンは何も影響を及ぼさず終了するだけです。

関連項目

TPCONNECT(3cbl)TPRETURN(3cbl)

 


TPGBLKTIME(3cbl)

名前

TPGBLKTIME() - 以前にTPSBLKTIMEで設定されたブロック時間値を取得する

形式

01 TPBLKDEF-REC.
COPY TPBLKDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.

CALL “TPGBLKTIME” USING TPBLKDEF-REC TPSTATUS-REC.

説明

TPGBLKTIME()は、以前に設定された1秒あたりのブロック時間値を取得し、この値をTBLKDEF-RECBLKTIMEに格納します。TPGBLKTIME()にブロック時間フラグ値を指定した場合、それに一致するフラグ値が設定されていないと戻り値0が返されます。ブロック時間フラグ値として0未満の値を指定するとエラーが発生します。

次に、有効なTPBLKDEF-RECフラグ値の一覧を示します。

TPBLK-NEXT

以前にTBLKNEXT値を使用して設定されたTPSBLKTIME()の1秒あたりのブロック時間値を取得します。

TPBLK-ALL

以前にTBLKALL値を使用して設定されたTPSBLKTIME()の1秒あたりのブロック時間値を取得します。

TPGBLKTIME()にブロック時間フラグ値(TPBLK-NEXTまたはTPBLK-ALL)を指定しない場合、以前にブロック時間フラグ値(TPBLK-NEXTまたはTPBLK-ALL)を指定したTPSBLKTIME()呼出しで設定された次のブロッキングAPIのブロック時間値、またはシステム全体のデフォルト・ブロック時間値が返されます。

注意: ワークステーション・クライアントがブロック時間フラグ値(TPBLK-NEXTまたはTPBLK-ALL)なしでTPGBLKTIME()を呼び出した場合は、システム全体のデフォルト・ブロック時間値を返すことはできません。この場合は、値0が返されます。

戻り値

TPGBLKTIME()は正常終了時には[TPOK]TP-STATUSを設定し、以前に設定されたブロック時間値があればその値をTBLKDEF-RECBLKTIMEに返します。BLKTIME値0は、以前に設定された入力ブロック時間値が存在しないことを示します。

エラー

次の条件が発生すると、TPGBLKTIMEは失敗し、TP-STATUSに次のいずれかの値を設定します。失敗しても、トランザクション・タイムアウト値には影響しません。

[TPEINVAL]

無効な引数が指定されました。TPBLKDEF-RECTPBLK-NEXTまたはTPBLK-ALL以外の値が指定されていることなどが考えられます。

[TPESYSTEM]

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

関連項目

TPCALL(3cbl)TPCONNECT(3cbl)TPRECV(3cbl)TPSBLKTIME(3cbl)、UBBCONFIG(5)

 


TPGETCTXT(3cbl)

名前

TPGETCTXT() - 現在のアプリケーション関連のコンテキスト識別子を取り出す

形式

01 TPCONTEXTDEF-REC.
COPY TPCONTEXTDEF.

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPGETCTXT" USING TPCONTEXTDEF-REC TPSTATUS-REC.

説明

TPGETCTXT()は、現在のアプリケーション関連のコンテキストを表す識別子を検索し、その識別子をTPCONTEXTDEF-REC内のCONTEXTに入れます。一般的なCOBOLアプリケーションの処理は次のとおりです。

  1. TP-MULTI-CONTEXTSフラグを設定してTPINITIALIZE()を呼び出します。
  2. TPGETCTXT()を呼び出し、TPCONTEXTDEF-RECを保存します。
  3. 再度TP-MULTI-CONTEXTSフラグを設定して、TPINITIALIZE()を呼び出します。
  4. 再度TPGETCTXT()を呼び出し、返されたコンテキストを保存します。
  5. TPSETCTXT()を呼び出し、最初のコンテキストに戻ります。

TPGETCTXT()は、シングル・コンテキスト・アプリケーションおよびマルチコンテキスト・アプリケーションで呼び出すことができます。

戻り値

TPGETCTXTは正常終了時には、TP-STATUSに[TPOK]を設定し、プログラムのコンテキスト識別子をTPCONTEXTDEF-REC内のCONTEXTに入れます。CONTEXTには現在のコンテキストIDが設定されます。これは、次のいずれかで表されます。

注意: TPINVALIDCONTEXTがCOBOLプログラムで返されることはありません。この値は、マルチスレッドのプログラムでしか返されないからです。

エラー

TPGETCTXTの異常終了時には、TP-STATUSに次のいずれかの値が設定されます。

[TPEINVAL]

無効な引数が指定されました。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

「COBOLアプリケーション・トランザクション・モニター・インタフェースの紹介」TPSETCTXT(3cbl)

 


TPGETLEV(3cbl)

名前

TPGETLEV() - Oracle Tuxedo ATMIのトランザクションの進行状況のチェック

形式

01 TPTRXLEV-REC.
COPY TPTRXLEV.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPGETLEV" USING
TPTRXLEV-REC TPSTATUS-REC.

説明

TPGETLEV()は現在のトランザクション・レベルを呼出し側に返します。現時点では、定義されているレベルはTP-NOT-IN-TRANTP-IN-TRANだけです。

戻り値

TPGETLEV()は正常終了時には、TP-STATUSに[TPOK]を設定し、TPTRXLEV-RECに値を設定します。TPTRXLEV-RECに設定される値は、進行中のトランザクションがないことを示すTP-NOT-IN-TRAN、トランザクションが進行中であることを示すTP-IN-TRANのいずれかです。

エラー

次の条件が発生すると、TPGETLEV()は異常終了し、TP-STATUSに次の値を設定します。

[TPEPROTO]

TPGETLEV()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

注意事項

TPBEGIN()TPCOMMIT()、およびTPABORT()を使用してOracle Tuxedo ATMIのトランザクションを記述する際には、XAインタフェースに準拠した(および呼出し側に適切にリンクされている)リソース・マネージャが行う作業のみがトランザクションとしてのプロパティを備えていることを忘れないようにすることが重要です。トランザクションで行われるその他の処理内容は、TPCOMMIT()TPABORT()の影響を受けません。そのリソース・マネージャが行った処理がOracle Tuxedo ATMIのトランザクションの一部となるよう、XAインタフェースを満たすリソース・マネージャをサーバーにリンクする方法については、「buildserver(1)」を参照してください。

関連項目

TPABORT(3cbl)TPBEGIN(3cbl)TPCOMMIT(3cbl)TPSCMT(3cbl)

 


TPGETRPLY(3cbl)

名前

TPGETRPLY() - 非同期メッセージからの応答の取得

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

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

説明

TPGETRPLY()は、事前に送られたリクエストの応答を戻します。TPGETRPLY()は、特定のリクエストに対する応答、または取得可能なすべての応答を戻します。選択可能なこの2つについて、ここで説明します。

DATA-RECは、応答を読み取る場所を指定し、TPTYPE-REC内のLENは、DATA-RECに移動すべき最大バイト数を示します。また、TPTYPE-RECREC-TYPEを指定する必要があります。TPGETRPLY()の正常終了時には、実際にDATA-RECに移動されたバイト数がLENに入り、TPTYPE-REC内のREC-TYPEおよびSUB-TYPEには、それぞれデータのタイプおよびサブタイプが入ります。応答がDATA-RECより大きい場合は、DATA-RECにはこのレコードに入るバイト数分のみが入ります。応答の残りは破棄され、TPGETRPLY()TPTRUNCATE()を設定します。

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

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

TPGETANY

この値を設定すると、TPGETRPLY()TPSVCDEF-REC内のCOMM-HANDLEによって示される通信ハンドルを無視し、存在する応答があればそれらを返し、返された応答の通信ハンドルを指すようCOMM-HANDLEを設定します。応答が存在しなければ、TPGETRPLY()は応答が届くまで待機します。TPGETANYTPGETHANDLEのいずれかを設定しなければなりません。

TPGETHANDLE

この値を設定すると、TPGETRPLY()COMM-HANDLEによって示される通信ハンドルを使用し、そのCOMM-HANDLEに対応する応答があればそれを返します。応答が存在しなければ、TPGETRPLY()は応答が届くまで待機します。TPGETANYTPGETHANDLEのいずれかを設定しなければなりません。

TPNOCHANGE

この値を設定すると、DATA-RECのタイプは変更されなくなります。つまり、応答レコードのタイプおよびサブタイプは、それぞれREC-TYPEおよびSUB-TYPEと一致しなければなりません。TPNOCHANGEまたはTPCHANGEのいずれかが設定されていなければなりません。

TPCHANGE

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

TPNOBLOCK

TPGETRPLY()は、応答が送られてくるまで待機しません。応答が取り出せる状態であれば、TPGETRPLY()はその応答を取り込み、終了します。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

TPBLOCKが設定されていて、データも取り出せる状態にない場合、呼出し側は応答が到着するまで、あるいはタイムアウト(トランザクションまたはブロッキング)が発生するまでブロックされます。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPNOTIME

この設定は、呼出し側をその応答に対して無期限にブロックでき、ブロッキング・タイムアウトの影響も受けないようにすることを指定します。ただし、トランザクション・タイムアウトは発生する可能性があります。TPNOTIMEまたはTPTIMEのいずれかが設定されていなければなりません。

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

特に説明がなければ、COMM-HANDLEは対応する応答が受信された後は、無効になります。

戻り値

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

エラー

次の条件が発生すると、TPGETRPLY()は異常終了し、TP-STATUSを以下のように設定します。TPGETHANDLEが設定されている場合は、特に明記されないかぎり、COMM-HANDLEは無効になります。TPGETANYが設定されていると、COMM-HANDLEは障害を起こした応答の通信ハンドルを示します。応答を取り出せるようになる前にエラーが発生した場合には、COMM-HANDLE0です。また、特に明記しないかぎり、異常終了は呼出し側のトランザクションが存在していても、それには影響しません。

[TPEINVAL]

無効な引数が指定されました(TPSVCDEF-RECの設定が無効など)。

[TPEOTYPE]

応答のタイプまたはサブタイプのいずれかは、呼出し側が認識しているものでありません。あるいは、TPNOCHANGEが設定されていて、REC-TYPESUB-TYPEが、そのサービスから送られた応答のタイプおよびサブタイプと一致しません。DATA-RECTPTYPE-RECも変更されません。呼出し側の現在のトランザクションのために応答が受信された場合は、応答が破棄されるので、そのトランザクションは中断のみとしてマークされます。

[TPEBADDESC]

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

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPGETRPLY()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。)いずれの場合でも、DATA-RECTPTYPE-RECも変更されません。COMM-HANDLEは、呼出し側がトランザクション・モードでなければ(そして、TPGETHANDLEが設定されている場合)そのまま有効です。 トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 サービスがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPESVCFAIL]

呼出し側の応答を送るサービス・ルーチンが、TPFAIL()を設定してTPRETURN()を呼び出しました。これは、アプリケーション・レベルの障害です。サービスの応答の内容は(送信された場合)、DATA-RECに入ります。APPL-RETURN-CODEには、TPRETURN()の一部として送信されたアプリケーション定義の値が入ります。応答が呼出し側のトランザクションのために受信された場合、トランザクションには中断のみマークが付けられます。トランザクションがタイムアウトになったかどうかにかかわらず、トランザクションが中断される前に有効な通信は、TPNOREPLYTPNOTRAN、およびTPNOBLOCKを設定したTPACALL()の呼出しのみです。

[TPESVCERR]

サービス・ルーチンがTPRETURN()あるいはTPFORWAR()で完了する際にエラーを検出しました(たとえば、誤った引数が渡された場合など)。このエラーが発生すると、応答データは戻されません(つまり、DATA-RECTPTYPE-RECも変更されません)。応答が呼出し側のトランザクションのために受信された場合、トランザクションには中断のみマークが付けられます。トランザクションがタイムアウトになったかどうかにかかわらず、トランザクションが中断される前に有効な通信は、TPNOREPLYTPNOTRAN、およびTPNOBLOCKを設定したTPACALL()の呼出しのみです。

[TPEBLOCK]

ブロッキング状態のため、TPNOBLOCKが指定されました。COMM-HANDLEはそのまま有効です。

[TPGOTSIG]

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

[TPEPROTO]

TPGETRPLY()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPACALL(3cbl)TPCANCEL(3cbl)TPRETURN(3cbl)

 


TPGETUNSOL(3cbl)

名前

TPGETUNSOL() - 非請求メッセージの獲得

形式

01 TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPGETUNSOL" USING
TPTYPE-REC DATA-REC TPSTATUS-REC.

説明

TPGETUNSOL()は、TPBROADCAST()またはTPNOTIFY()によって送られた非請求メッセージを取得します。このルーチンは、非請求メッセージ・ハンドラからのみ呼出し可能です。

正常終了時には、DATA-RECに移動された実際のバイト数がTPTYPE_REC内のLENに入ります。TPTYPE-REC内のREC-TYPEおよびSUB-TYPEにはそれぞれデータのタイプおよびサブタイプが入ります。メッセージがDATA-RECより大きい場合は、DATA-RECにはこのレコードに入るバイト数分のみが入ります。メッセージの残りは破棄され、TPTRUNCATE()が設定されます。正常終了時にLEN0である場合は、メッセージにはデータ部がなく、DATA-RECは変更されていません。

入力時にLEN0にすると、エラーになります。

戻り値

TPGETUNSOL()の正常終了時には、TP-STATUSに[TPOK]が設定されます。着信メッセージの大きさが入力時にLENに指定されたより大きい場合、TPTRUNCATE()が設定され、LEN分のデータのみがDATA-RECに移動されて残りのデータは破棄されます。

エラー

次の条件が発生すると、TPGETUNSOL()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。

[TPEPROTO]

TPGETUNSOL()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPSETUNSOL(3cbl)

 


TPGPRIO(3cbl)

名前

TPGPRIO() - サービス・リクエストの優先度を獲得

形式

01 TPPRIDEF-REC.
COPY TPPRIDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPGPRIO" USING
TPPRIDEF-REC TPSTATUS-REC.

説明

TPGPRIO()は、最後に送信または受信したリクエストの優先度を返します。優先度は1 - 100 (内包)で指定でき、最も高いのは100です。TPGPRIO()TPCALL()またはTPACALL() (また、キュー機能がインストールされている場合はTPENQUEUE()あるいはTPDEQUEUE())の後で呼び出すことができ、返される優先度は送信されたリクエストのものです。また、TPGPRIO()はサービス・ルーチン内から呼び出して、呼び出されたサービスがどの優先度で送られたかを明らかにします。TPGPRIO()は何回でも呼び出すことができ、次のリクエストが送られるまでは同じ値を返します。

会話プリミティブは優先度と関連付けられていないので、TPSEND()TPRECV()を発行しても、TPGPRIO()が返す優先度には影響しません。また、会話サービス・ルーチンの場合も、TPCALL()TPACALL()がそのサービス内から出されないかぎり、優先度は関連付けられません。

戻り値

TPGPRIO()の正常終了時には、TP-STATUSに[TPOK]が設定され、リクエストの優先度がTPPRIDEF-REC内のPRIORITYに戻されます。

エラー

次の条件が発生すると、TPGPRIO()は異常終了し、TP-STATUSに次の値を設定します。

[TPENOENT]

TPGPRIO()が呼び出されましたが、(TPCALL()またはTPACALL()を介して)何のリクエストも送信されなかったか、リクエストが送られなかった会話サービスの中でTPGPRIO()が呼び出されました。

[TPEPROTO]

TPGPRIO()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPACALL(3cbl)TPCALL(3cbl)TPDEQUEUE(3cbl)TPENQUEUE(3cbl)TPSPRIO(3cbl)

 


TPINITIALIZE(3cbl)

名前

TPINITIALIZE() - Oracle Tuxedo ATMIアプリケーションに参加する

形式

01 TPINFDEF-REC.
COPY TPINFDEF.

01
USER-DATA-REC PIC X(any-length).

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPINITIALIZE"
TPINFDEF-REC USER-DATA-REC TPSTATUS-REC.

説明

TPINITIALIZE()は、クライアントがOracle Tuxedo ATMIシステムのアプリケーションに参加するときに使用します。Oracle Tuxedoのコミュニケーションあるいはトランザクション・ルーチンをクライアントが使用する前には、あらかじめクライアントはOracle Tuxedo ATMIのアプリケーションに参加しなければなりません。TPINITIALIZE()には、シングル・コンテキスト・モードとマルチコンテキスト・モードの2つの動作モードがあります。これについては、後で詳しく説明します。シングル・コンテキスト・モードではTPINITIALIE()の呼出しは任意選択なので、シングル・コンテキストのクライアントは、TPINITIALIZE()を透過的に呼び出す多数のATMIルーチン(たとえば、TPACALL()TPCALL())を呼び出すことによりアプリケーションに参加することもできます。この場合、TPINITIALIZE()は、TPINFDEF-RECのメンバーにデフォルト値を使用して呼び出されます。クライアントはTPINITIALIZE()を直接呼び出すこともでき、その場合は、ここで説明するパラメータを設定することができます。マルチコンテキスト・モードが必要な場合、またはアプリケーション認証が必要な場合には、TPINITIALIZE() を使用する必要があります(「UBBCONFIG(5)」SECURITYキーワードの説明を参照)。TPINITIALIZE()が正常終了した後、クライアントはサービス・リクエストを開始し、トランザクションを定義できます。

シングル・コンテキスト・モードでTPINITIALIZE()が2回以上呼び出された場合、つまり、クライアントがアプリケーションに参加した後で呼び出された場合は、アクションは何も実行されず、正常終了を示す戻り値が返されます。

TPINFDEF-RECレコードの説明

TPINFDEF-RECレコードは、次のようなメンバーで構成されています。

05 USRNAME            PIC X(30). 
05 CLTNAME PIC X(30).
05 PASSWD PIC X(30).
05 GRPNAME PIC X(30).
05 NOTIFICATION-FLAG PIC S9(9) COMP-5.
88 TPU-SIG VALUE 1.
88 TPU-DIP VALUE 2.
88 TPU-IGN VALUE 3.
05 ACCESS-FLAG PIC S9(9) COMP-5.
88 TPSA-FASTPATH VALUE 1.
88 TPSA-PROTECTED VALUE 2.
05 CONTEXTS-FLAG PIC S9(9) COMP-5.
88 TP-SINGLE-CONTEXT VALUE 0.
88 TP-MULTI-CONTEXTS VALUE 1.
05 DATALEN PIC S9(9) COMP-5.

USRNAMEは呼出し側を表す名前です。CLTNAMEは、その意味付けがアプリケーション側で定義されているクライアント名です。値sysclientは、CLTNAMEフィールド用にシステムによって予約されています。USRNAMEおよびCLTNAMEフィールドはTPINITIALIZE()実行時にクライアントと関連付けられ、ブロードキャスト通知と管理統計情報の検索に使用されます。PASSWDは、アプリケーション・パスワードとの認証に使用される非暗号化形式のアプリケーション・パスワードです。PASSWDは30文字まで有効です。GRPNAMEは、クライアントをリソース・マネージャ・グループ名と関連付けるときに使用します。GRPNAMESPACESの場合、クライアントは、リソース・マネージャに関連付けられず、デフォルトのクライアント・グループになります。

シングル・コンテキスト・モードとマルチコンテキスト・モード

TPINITIALIZE()には、シングル・コンテキスト・モードとマルチコンテキスト・モードの2つの動作モードがあります。シングル・コンテキスト・モードでは、プロセスは一度に1つのアプリケーションに参加できます。シングル・コンテキスト・モードは、CONTEXTS-FLAGTP-SINGLE-CONTEXTを設定してTPINITIALIZE()を呼び出すか、TPINITIALIZE()を暗黙的に呼び出す別の関数を呼び出すことによって指定されます。

シングル・コンテキスト・モードでTPINITIALIZE()が2回以上呼び出された場合、つまり、クライアントがアプリケーションに参加した後で呼び出された場合は、アクションは何も実行されず、正常終了を示す戻り値が返されます。

マルチコンテキスト・モードは、CONTEXTS-FLAGTP-MULTI-CONTEXTSを設定してTPINITIALIZE()を呼び出すことにより指定されます。マルチコンテキスト・モードでは、TPINITIALIZE()を呼び出すたびに別のアプリケーション関連が作成されます。

アプリケーションの関連付けとは、プロセスとOracle Tuxedoアプリケーションを関連付けるコンテキストです。クライアントは、複数のOracle Tuxedoアプリケーションとの関連付けを保持したり、同じアプリケーションに対して複数の関連付けを保持することができます。クライアントの関連付けは、すべて同じリリースのOracle Tuxedoシステムを実行するアプリケーションに対する関連付けでなければなりません。また、すべての関連付けはネイティブ・クライアントかワークステーション・クライアントのいずれかでなければなりません。

ネイティブ・クライアントの場合、新しい関連の生成元になるアプリケーションは、TUXCONFIG環境変数の値で決まります。ワークステーション・クライアントの場合、新しい関連の生成元になるアプリケーションは、WSNADDRまたはWSENVFILE環境変数の値で決まります。現在のCOBOLプロセスのコンテキストは、新しい関連付けに設定されます。

マルチコンテキスト・モードでは、アプリケーションはTPGETCTXT()を呼び出すことにより現在のコンテキストを表すハンドルを取得し、そのハンドルをパラメータとしてTPSETCTXT()に渡して、特定のCOBOLプロセスが動作するコンテキストを設定することができます。

シングル・コンテキスト・モードとマルチコンテキスト・モードを一緒に使用することはできません。アプリケーションでいずれかのモードを選択したら、すべてのアプリケーション関連に対してTPTERM()を呼び出すまで、TPINITIALIZE()をほかのモードで呼び出すことはできません。

TPINFDEF-RECレコードの説明

TPINFDEF-RECの設定により、クライアント固有の通知機構とシステム・アクセスのモードの両方を示すことができます。これらの設定で、アプリケーションのデフォルトの設定を変更することができます。ただし、変更できない場合には、TPINITIALIZE()はログ・ファイルに警告メッセージを記録し、設定を無視して、TPINITIALIZE()の終了時にアプリケーションのデフォルト設定がTPINFDEF-RECに返されます。クライアントへの通知の場合、次のように設定できます。

TPU-SIG

シグナルによる非請求通知を選択します。この設定は、CONTEXTS-FLAGTP-MULTI-CONTEXTSとともに使用することはできません。

TPU-DIP

ディップ・インによる非請求通知を選択します。

TPU-IGN

非請求通知を無視します。

一度にはこのいずれか1つのみ使用できます。クライアントが通知方法を選択しない場合、アプリケーションのデフォルトの方法が、TPINITIALIZE()の終了時に設定されます。

システム・アクセス・モードの設定の場合、設定として次のものがあります。

TPSA-FASTPATH

システム・アクセス・モードをfastpathに設定します。

TPSA-PROTECTED

システム・アクセス・モードをprotectedに設定します。

一度にはこのいずれか1つのみ使用できます。クライアントが通知方法またはシステム・アクセス・モードを選択しない場合、アプリケーションのデフォルトの方法が、TPINITIALIZE()の終了時に設定されます。クライアントの通知方法とシステム・アクセス・モードの詳細は、「UBBCONFIG(5)」を参照してください。

DATALENは、サービスに送信されるアプリケーション固有のデータの長さです。アプリケーションがOracle Tuxedoシステムのアプリケーション認証機能を使用しない場合、USRNAMEおよびCLTNAMESPACES値を使用できます。現時点では、GRPNAMESPACESでなければなりません。このオプションを使用するクライアントは、Oracle Tuxedoシステムにおいて次のように定義されます。USRNAMECLTNAME、およびGRPNAMEはデフォルト値、デフォルト設定で、アプリケーション・データは得られません。

戻り値

TPINITIALIZE()は正常終了時には、TP-STATUSに[TPOK]を設定します。異常終了時には、TPINITIALIZE()は呼出し側プロセスのコンテキストを変更せず、-1を返して、TP-STATUSにエラー条件を示す値を設定します。

エラー

TPINITIALIZE()は異常終了時には、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。

[TPENOENT]

領域制限のため、クライアントはアプリケーションに参加できません。

[TPEPERM]

クライアントは、許可を持たないため、または正しいアプリケーション・パスワードが与えられていないために、アプリケーションに参加できません。許可が与えられない理由として、アプリケーション・パスワードが無効であった場合、アプリケーション固有の認証検査にパスできない場合、あるいは名前の使用制限がある場合などがあります。

[TPEPROTO]

TPINITIALIZE()の呼出し方法が不適切です。たとえば、(a)呼出し側がサーバーである場合、(b)シングル・コンテキスト・モードでTP-MULTI-CONTEXTS設定が指定された場合、または(c)マルチコンテキスト・モードでTP-MULTI-CONTEXTS設定が指定されなかった場合などがあります。

[TPESYSTEM]

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

[TPEOS]

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

移植性

TPINITIALIZE()に記述されているインタフェースは、UNIXシステムおよびMS-DOSオペレーティング・システム上でサポートされています。ただし、シグナル・ベースの通知方法は、MS-DOSではサポートされていません。TPINITIALIZE()の実行時にこの通知方法が選択されると、USERLOG()メッセージが生成され、通知方法は自動的にディップ・インに設定されます。

環境変数

TUXCONFIG

TPINITIALIZE()がワークステーション・クライアントでないネイティブ・クライアントによって呼び出される際に、TPINITIALIZE()内で使用されます。この変数は、クライアントの接続先になるアプリケーションを示します。なお、この環境変数は、TPINITIALIZE()が呼び出されるときにのみ参照されます。これ以降の呼出しには、アプリケーション・コンテキストが使用されます。

WSENVFILE

TPINITIALIZE()がワークステーション・クライアントによって呼び出される際に、TPINITIALIZE()内で使用されます。この変数には、環境変数の設定条件を収めたファイルを指定しますが、この設定は呼出し側の環境で行うようにします。ワークステーション・クライアントに必要とされる環境変数の設定に関する詳細は、「compilation(5)」を参照してください。なお、このファイルは、TPINITIALIZE()が呼び出されるとき(その前ではなく)にのみ処理されます。

WSNADDR

ワークステーション・クライアントが呼び出すときにTPINITIALIZE()内で使用されます。これは、アプリケーションをアクセスするときに使用されるワークステーション・リスナー・プロセスのネットワーク・アドレスを示します。この変数はワークステーション・クライアントの場合は必須ですが、ネイティブ・クライアントの場合は無視されます。
TCP/IPアドレスは、"//host.name:port_number"
"//#.#.#.#:port_number"
の形式で指定できます。1つ目の形式では、ドメインがローカル名を解決する手法(通常はDNS)を使用してhostnameのアドレスを検索します。hostnameにはローカル・マシン名を指定し、ローカル名解決の機能でhostnameをローカル・マシンのアドレスに明確に解決する必要があります。 2つ目の例の#.#.#.#は、ドットで区切られた10進数です。ドット区切りの10進数形式では、それぞれの#に0 - 255の数字を指定します。このドットで区切った10進数は、ローカル・マシンのIPアドレスを表現します。 上記のどちらの形式でも、port_numberはドメイン・プロセスがリクエストの受信をリスニングするTCPポート番号です。port_numberには、0から65535までの数字または名前を指定できます。port_numberが名前の場合は、ローカル・マシンのネットワーク・サービス・データベースになければなりません。 アドレスは、文字0xを先頭に付けて16進数形式でも指定できます。最初の0xの後の各文字は、0から9までの数値またはAからFまでの文字です(大文字と小文字は区別されません)。16進数の形式は、IPX/SPXやTCP/IPのような任意のバイナリ・ネットワーク・アドレスに使うことができます。 アドレスはまた、任意の文字列として指定することもできます。値は、構成ファイルの中のNETWORKSセクションのNLSADDRパラメータに指定された値と同じでなければなりません。 必要に応じて複数のアドレスを指定できます。その場合は、WSNADDRのパス名のリストをカンマ区切りで指定します。接続が確立するまで順番にアドレス指定が試みられます。アドレス・リストのメンバーは、どれでもパイプで区切られたネットワーク・アドレスのかっこ付きのグループとして指定することができます。次に例を示します。
 WSNADDR="(//m1.acme.com:3050|//m2.acme.com:3050),//m3.acme.com:3050"
Windows下で実行するためには、アドレス文字列は以下のように表します。
set WSNADDR=(//m1.acme.com:3050^|//m2.acme.com:3050),//m3.acme.com:3050
パイプ記号(|)はWindowsでは特殊文字と見みなされるため、コマンドラインで指定する際は、その前にWindows環境でのエスケープ文字のカレット(^)を前に付ける必要があります。ただし、envfileでWSNADDRが定義されている場合、Oracle Tuxedoシステムはtuxgetenv(3c)関数を介してWSNADDRが定義する値を取得します。この場合、パイプ記号(|)は特殊文字とみなされないので、カレット(^)を使用する必要はありません。 Oracle Tuxedoシステムはかっこ付きアドレスを無作為に選択します。この方法は、一連のリスナー・プロセスに対してランダムに負荷分散します。接続が確立するまで順番にアドレス指定が試みられます。ワークステーション・リスナーを呼び出すには、アプリケーションの構成ファイルの値を使用してください。この値が、「0x」で始まる文字列の場合は、16進値文字列と解釈され、それ以外の場合は、ASCII文字列と解釈されます。

WSFADDR

ワークステーション・クライアントが呼び出すときにTPINITIALIZE()内で使用されます。この変数は、ワークステーション・クライアントがワークステーション・リスナーまたはワークステーション・ハンドラに接続するときに使用するネットワーク・アドレスを指定します。この変数は、WSFRANGE変数とともに、ワークステーション・クライアントがアウトバウンド接続を行う前にバインドしようとするTCP/IPポートの範囲を決定します。このアドレスには、TCP/IPアドレスを指定する必要があります。TCP/IPアドレスのポート部分は、ワークステーション・クライアントによってバインドされる一連のTCP/IPポートのベース・アドレスを表します。WSFRANGE変数は、範囲の大きさを指定します。たとえば、このアドレスが//mymachine.bea.com:30000WSFRANGEが200の場合、このLMIDからアウトバウンド接続を試みるネイティブ・プロセスはすべて、mymachine.bea.com 30000から30200の間のポートをバインドします。この変数を設定しないと、空の文字列が使用され、オペレーティング・システムはローカル・ポートをランダムに選択します。

WSFRANGE

TPINITIALIZE()がワークステーション・クライアントによって呼び出される際に、TPINITIALIZE()内で使用されます。この変数は、ワークステーション・クライアント・プロセスが、アウトバウンド接続を行う前にバインドを試みるTCP/IPポートの範囲を指定します。WSFADDRパラメータは、範囲のベース・アドレスを指定します。たとえば、WSFADDRパラメータが//mymachine.bea.com:30000に設定され、WSFRANGEが200に設定されると、このLMIDからアウトバウンド接続を試みるネイティブ・プロセスはすべて、mymachine.bea.com 30000から30200の間のポートにバインドします。有効範囲は1から65535までです。デフォルト値は1です。

WSDEVICE

ワークステーション・クライアントが呼び出すときにTPINITIALIZE()内で使用されます。これは、ネットワークのアクセス時に使用するデバイス名を示します。この変数はワークステーション・クライアントが使用し、ネイティブ・クライアントの場合は無視されます。なお、ソケットやNetBIOSなどトランスポート・レベルのネットワーク・インタフェースはデバイス名を必要としません。このようなインタフェースによってサポートされているワークステーション・クライアントは、WSDEVICEを指定する必要はありません。

WSTYPE

ワークステーション・クライアントが呼び出すときにTPINITIALIZE()内から使用され、ネイティブ・サイトとの間でエンコード/デコードの責任範囲について調整を行います。この変数はワークステーション・クライアントの場合は省略可能で、ネイティブ・クライアントの場合は無視されます。

WSRPLYMAX

TPINITIALIZE()によって使用され、アプリケーション応答をファイルにダンプする前のバッファリングに使用するコア・メモリーの最大容量を設定します。このパラメータのデフォルトの値は、インスタンス化の方法に応じて異なります。詳細は、該当するプログラマ・ガイドを参照してください。

TMMINENCRYPTBITS

Oracle Tuxedoシステムに接続する際に必要な最小レベルの暗号化を確立するために使用されます。「0」は暗号化を行わないことを示します。「56」と「128」は暗号化キーの長さをビット単位で指定します。ここで指定された最低レベルの暗号化が行われないと、リンクの確立は失敗します。デフォルト値は0です。

TMMAXENCRYPTBITS

Oracle Tuxedoシステムに接続するときに、このレベルまで暗号化を調整するのに使用されます。「0」は暗号化を行わないことを示します。「56」と「128」は暗号化キーの長さをビット単位で指定します。デフォルト値は128です。

警告

シグナル・ベースの通知方法は、マルチコンテキスト・モードでは使用できません。また、シグナル・ベースの通知方法を選択するクライアントは、シグナルに関する制約から、システムからシグナルを受け取ることはできません。クライアントがシグナルを受け取ることができない場合、システムは、選択したクライアントへの通知方法をディップ・インに切り替えるログ・メッセージを生成し、クライアントはそれ以降ディップ・イン通知を介して通知を受けます。通知方法の詳細は、「UBBCONFIG(5)」RESOURCESセクションのNOTIFYパラメータの説明を参照してください。

クライアントのシグナル通知は、常にシステムによって行われるので、元の通知呼出しがどこで行われるかにかかわらず、通知の形態は一貫しています。したがって、シグナル・ベースの通知を使用するには次の条件が必要です。

アプリケーション管理者のIDは、そのアプリケーションの構成ファイルで識別されます。

クライアントにシグナル・ベースの通知を選択すると、ある種のATMI呼出しは正常に実行できないことがあります。このとき、TPSIGRSTRTの指定がない場合、非請求メッセージを受け取るため、TPGOTSIGが返されます。

関連項目

TPGETCTXT(3cbl)TPSETCTXT(3cbl)TPTERM(3cbl)

 


TPKEYCLOSE(3cbl)

名前

TPKEYCLOSE() - 以前にオープンされたキー・ハンドルのクローズ

形式

01 TPKEYDEF-REC.
COPY TPKEYDEF.

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPKEYCLOSE" USING TPKEYDEF-REC TPSTATUS-REC.

説明

TPKEYCLOSE()は、以前にオープンしたキー・ハンドルと、それに関連するすべてのリソースを解放します。プリンシパルの秘密鍵などの機密情報はすべて、メモリーから消去されます。

呼出し側プロセスはTPKEYDEF-REC内のKEY-HANDLEを指定する必要があります。KEY-HANDLEは、事前のTPKEYOPEN()呼出しで返されるキー識別子です。

戻り値

TPKEYCLOSE()は正常終了時には、TPSTATUS-REC内のTP-STATUSに[TPOK]を設定します。

エラー

TPKEYCLOSE()は異常終了時には、TPSTATUS-REC内のTP-STATUSに次のいずれかの値を設定します。

[TPEINVAL]

無効な引数が指定されました。たとえば、TPKEYDEF-REC内のKEY-HANDLEが正しく設定されていません。

[TPESYSTEM]

エラーが発生しました。詳細は、システム・エラーのログ・ファイルを調べてください。

関連項目

TPKEYGETINFO(3cbl)TPKEYOPEN(3cbl)TPKEYSETINFO(3cbl)

 


TPKEYGETINFO(3cbl)

名前

TPKEYGETINFO() - キー・ハンドルに関連付けられている情報の獲得

形式

01 TPKEYDEF-REC.
COPY TPKEYDEF.

01 ATTVALUE-REC.
COPY user data

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPKEYGETINFO" USING TPKEYDEF-REC ATTVALUE-REC TPSTATUS-REC.

説明

TPKEYGETINFO()は、キー・ハンドルに関する情報を報告します。キー・ハンドルは、特定のプリンシパルのキーおよびそれに関連付けられている情報を表します。

呼出し側プロセスはTPKEYDEF-REC内のKEY-HANDLEを設定する必要があります。KEY-HANDLEは、事前のTPKEYOPEN()呼出しで返されるキー識別子です。

情報が必要な属性は、TPKEYDEF-REC内のATTRIBUTE-NAMEによって識別されます。属性名には、SPACESまたはLOW-VALUESを埋め込むことができます。一部の属性は暗号サービス・プロバイダ固有のものですが、以下に示す属性は、すべてのプロバイダによってサポートされています。

属性
PRINCIPAL
キー(キー・ハンドル)と関連付けられているプリンシパルを識別する名前。NULLで終了する文字列で表されます。
PKENCRYPT_ALG
公開鍵による暗号化のキーによって使用される、公開鍵アルゴリズムのASN.1 DER (Distinguished Encoding Rules)形式のオブジェクト識別子。
RSAのオブジェクト識別子については、次の表を参照してください。
PKENCRYPT_BITS
公開鍵アルゴリズムのキー長(RSAのモジュロ・サイズ)。この値は、512 - 2048ビットの範囲でなければなりません。
SIGNATURE_ALG
デジタル署名のキーで使用される、デジタル署名アルゴリズムのASN.1 DER形式のオブジェクト識別子。
RSAおよびDSAのオブジェクト識別子については、次の表を参照してください。
SIGNATURE_BITS
デジタル署名アルゴリズムのキー長(RSAのモジュロ・サイズ)。この値は、512 - 2048ビットの範囲でなければなりません。
ENCRYPT_ALG
バルク・データの暗号化のキーで使用される、対称鍵アルゴリズムのASN.1 DER形式のオブジェクト識別子。
AES、DES、3DES、およびRC2のオブジェクト識別子については、次の表を参照してください。
ENCRYPT_BITS
対称鍵アルゴリズムのキー長。この値は、40 - 256ビットの範囲でなければなりません。
ENCRYPT_ALGで固定キー長によるアルゴリズムが設定されると、ENCRYPT_BITSの値は自動的にその固定キー長に設定されます。たとえば、ENCRYPT_ALGにDESが設定されると、ENCRYPT_BITSの値は自動的に56に設定されます。
DIGEST_ALG
デジタル署名のキーで使用される、メッセージ・ダイジェスト・アルゴリズムのASN.1 DER形式のオブジェクト識別子。
MD5およびSHA-1のオブジェクト識別子については、次の表を参照してください。
PROVIDER
暗号サービス・プロバイダの名前。
VERSION
暗号サービス・プロバイダのソフトウェアのバージョン番号。

次の表に、デフォルトの公開鍵実装でサポートされるASN.1 DERアルゴリズム・オブジェクト識別子を示します。

ASN.1 DERアルゴリズム・オブジェクト識別子
アルゴリズム
{ 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x02, 0x05 }
MD5
{ 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x1a }
SHA1
{ 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01 }
RSA
{ 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x0c }
DSA
{ 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x02 }
AES128-cbc
{ 0x06, 0x09, 0x60, 0x86, 0x48, 0x01, 0x65, 0x03, 0x04, 0x01, 0x2a }
AES256-cbc
{ 0x06, 0x05, 0x2b, 0x0e, 0x03, 0x02, 0x07 }
DES
{ 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x07 }
3DES
{ 0x06, 0x08, 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x03, 0x02 }
RC2

指定された属性に関連付けられている情報は、ユーザー定義のATTVALUE-RECに格納され、末尾にはSPACESが埋められます。この位置に格納できる最大データ量は、TPKEYDEF-REC内のATTRIBUTE-LENの呼出しで指定します。

TPKEYGETINFO()が完了すると、ATTRIBUTE-LENには実際に返されたデータの大きさが設定されます(埋め込み値を除く)。返されるべきバイト数がATTRIBUTE-VALUE-LENを超える場合、TPKEYGETINFO()は(TPELIMITエラー・コードを示して)異常終了し、必要なスペースをATTRIBUTE-VALUE-LENに設定します。

戻り値

TPKEYGETINFO()は正常終了時には、TPSTATUS-REC内のTP-STATUSに[TPOK]を設定します。

エラー

TPKEYGETINFO()は異常終了時には、TPSTATUS-REC内のTP-STATUSに次のいずれかの値を設定します。

[TPEINVAL]

無効な引数が指定されました。たとえば、KEY-HANDLEが有効なキーではありません。

[TPESYSTEM]

エラーが発生しました。詳細は、システム・エラーのログ・ファイルを調べてください。

[TPELIMIT]

リクエストされた属性値を保持するためのスペースが不足しています。

[TPENOENT]

リクエストされた属性は、このキーに関連付けらていません。

関連項目

TPKEYCLOSE(3cbl)TPKEYOPEN(3cbl)TPKEYSETINFO(3cbl)

 


TPKEYOPEN(3cbl)

名前

TPKEYOPEN() - デジタル署名の生成、メッセージの暗号化または復号化のためのキー・ハンドルのオープン

形式

01 TPKEYDEF-REC. 
COPY TPKEYDEF.

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPKEYOPEN" USING TPKEYDEF-REC TPSTATUS-REC.

説明

TPKEYOPEN()は、呼出し側のプロセスからキー・ハンドルを使用できるようにします。キー・ハンドルは、特定のプリンシパルの鍵およびそれに関連付けられている情報を表します。

キーは、以下に示す目的のうち、1つまたは複数の目的に使用できます。

TPKEYOPEN()によって返されるキー・ハンドルは、TPKEYDEF-REC内のKEY-HANDLEに格納されます。

呼出し側プロセスはTPKEYDEF-REC内のPRINCIPAL-NAMEを設定する必要があります。PRINCIPAL-NAMEは、キーのオーナーのIDを指定します。この名前の末尾にはSPACESまたはLOW-VALUESを埋め込むことができます。PRINCIPAL-NAMEがすべてSPACESまたはLOW-VALUESの場合は、デフォルトのアイデンティティとみなされます。デフォルトのアイデンティティは、現在のログイン・セッション、現在のオペレーティング・システム・アカウント、またはローカル・ハードウェア・デバイスなどの別の属性に基づいて決定されます。

呼出し側プロセスは、TPKEYDEF-REC内のLOCATIONを設定しなければならないことがあります。LOCATIONはキーのオーナーのIDの位置を指定します。プロバイダがこのフィールドを要求していない場合は、このフィールドにSPACESLOW-VALUESを入力できます。

PRINCIPAL-NAMEのアイデンティティを認証するために、パスワードまたはパス・フレーズなどの証明材料が要求されることがあります。必要な場合は、証明材料をTPKEYDEF-REC内のIDENTITY-PROOFに格納します。必要ない場合、このフィールドにはSPACESLOW-VALUESを入力できます。

証明材料の長さ(バイト単位)は、TPKEYDEF-REC内のPROOF-LENで指定されます。PROOF-LENが0の場合、IDENTITY-PROOFは末尾にSPACESLOW-VALUESを埋め込まれた文字列であるとみなされます。この場合、末尾のSPACESLOW-VALUESは証明材料の一部とはみなされません。

ローカル・マシンの構成および動作環境に基づいて、暗号サービス・プロバイダを選択しなければならないことがあります。暗号サービス・プロバイダを選択する場合は、必要なプロバイダ名をTPKEYDEF-REC内のCRYPTO-PROVIDERに設定します。暗号サービス・プロバイダを選択しない場合、このフィールドにSPACESLOW-VALUESを入力すると、デフォルトのプロバイダが選択されます。

鍵の動作モードに必要な鍵アクセスのタイプは、TPKEYDEF-RECに次の設定を1つまたは複数指定することにより決定されます。

TPKEY-SIGNATURE:

この秘密鍵はデジタル署名を生成します。

TPKEY-AUTOSIGN:

このプロセスがメッセージを送信するときは常に、公開鍵ソフトウェアは署名者の秘密鍵を使用してデジタル署名を生成し、それをメッセージに添付します。

TPKEY-ENCRYPT:

この公開鍵は、暗号化されたメッセージの受信者を識別します。

TPKEY-AUTOENCRYPT:

このプロセスがメッセージを送信するときは常に、公開鍵ソフトウェアはメッセージを暗号化し、受信者の公開鍵を使用して暗号化エンベロープを生成します。次に、暗号化エンベロープをメッセージに添付します。

TPKEY-DECRYPT:

この秘密鍵は復号化に使用できます。

これらの設定を組み合せて、指定することができます。キーが暗号化にのみ使用される場合(TPKEY-ENCRYPTおよびTPKEY-AUTOENCRYPT)、IDENTITY-PROOFは不要です。

戻り値

TPKEYOPEN()は正常終了時には、TPSTATUS-REC内のTP-STATUSに[TPOK]を設定します。また、このキーを表す値がTPKEYDEF-REC内のKEY-HANDLEに設定されます。この値は、TPKEYGETINFO()などほかの関数で使用されます。

エラー

TPKEYOPEN()は異常終了時には、TPSTATUS-REC内のTP-STATUSに次のいずれかの値を設定します。

[TPEINVAL]

無効な引数が指定されました。たとえば、設定(フラグ)の値が正しくありません。

[TPEPERM]

パーミッション異常終了。暗号サービス・プロバイダは、指定された証明情報と現在の環境で、このプリンシパルの秘密鍵にアクセスできませんでした。

[TPESYSTEM]

エラーが発生しました。詳細は、システム・エラーのログ・ファイルを調べてください。

関連項目

TPKEYCLOSE(3cbl)TPKEYGETINFO(3cbl)TPKEYSETINFO(3cbl)

 


TPKEYSETINFO(3cbl)

名前

TPKEYSETINFO() - キー・ハンドルに関連付けるオプション・パラメータを設定する

形式

01 TPKEYDEF-REC. 
COPY TPKEYDEF.

01 ATTVALUE-REC.
COPY user data

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPKEYSETINFO" USING TPKEYDEF-REC ATTVALUE-REC TPSTATUS-REC.

説明

TPKEYSETINFO()は、キー・ハンドルのオプション属性パラメータを設定します。キー・ハンドルは、特定のプリンシパルの鍵およびそれに関連付けられている情報を表します。

情報を変更するキーは、TPKEYDEF-REC内のKEY-HANDLEで識別されます。KEY-HANDLEは、事前のTPKEYOPEN()呼出しで返されるキー識別子です。

情報を変更する対象の属性は、TPKEYDEF-REC内のATTRIBUTE-NAMEで識別されます。属性名には、SPACESまたはLOW-VALUESを埋め込むことができます。一部の属性は暗号サービス・プロバイダ固有のものですが、「TPKEYGETINFO(3cbl)」リファレンス・ページで示す基本的属性は、すべてのプロバイダでサポートされる必要があります。

ユーザー定義されたATTVALUE-RECの値はATTRIBUTE-NAMEに関連付けられます。TPKEYSETINFO()が正常に終了すると、ATTVALUE-RECの情報が暗号サービス・プロバイダが定義する方法で格納または処理されます。ATTVALUE-RECのデータの内容が自己記述型の場合、TPKEYDEF-REC内のATTRIBUTE-VALUE-LENは無視されます(0でかまいません)。それ以外の場合、ATTRIBUTE-VALUE-LENにはATTVALUE-RECのデータ長を指定する必要があります。

戻り値

TPKEYSETINFO()は正常終了時には、TPSTATUS-REC内のTP-STATUSに[TPOK]を設定します。

エラー

TPKEYSETINFO()は異常終了時には、TPSTATUS-REC内のTP-STATUSに次のいずれかの値を設定します。

[TPEINVAL]

無効な引数が指定されました。たとえば、KEY-HANDLEが正しく設定されていません。

[TPESYSTEM]

エラーが発生しました。詳細は、システム・エラーのログ・ファイルを調べてください。

[TPELIMIT]

指定された属性値が大きすぎます。

[TPENOENT]

リクエストされた属性は、キーの暗号サービス・プロバイダによって認識されません。

関連項目

TPKEYCLOSE(3cbl)TPKEYGETINFO(3cbl)TPKEYOPEN(3cbl)

 


TPNOTIFY(3cbl)

名前

TPNOTIFY() - クライアント識別子により通知を送信する

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

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

説明

TPNOTIFY()は、サーバーが個々のクライアントに非請求メッセージを送信できるようにします。

TPSVCDEF-REC内のCLIENTIDには、以前のあるいは現在のサービス呼出しのTPSVCDEF-RECから保存されたクライアント識別子が入ります。

DATA-RECは、送信するメッセージであり、TPTYPE-REC内のLENは、送信するDATA-RECの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードの場合は、LENは無視されます(0でかまいません)。TPTYPE-REC内のREC-TYPESPACESの場合は、DATA-RECおよびLENは無視され、リクエストはデータ部なしで送信されます。

TPNOTIFY()が正常終了した場合、メッセージはシステムに渡され、指定されたクライアントに送信されます。TPACK()が設定されていた場合、正常終了は、クライアントがメッセージを受信したことを意味します。さらに、クライアントが非請求メッセージ・ハンドラに登録している場合は、ハンドラが呼び出されます。

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

TPNOBLOCK

このリクエストは、ブロッキング条件が存在する場合(たとえば、メッセージの送信先である内部バッファがいっぱいの場合など)には、送信されません。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

TPACK

この設定は、呼出し側がクライアントからの承認の待ち時間をブロックすることを示します。TPNOACK()またはTPACK()のいずれかが設定されていなければなりません。

TPNOACK

この設定は、呼出し側がクライアントからの承認の待ち時間をブロックしないことを示します。TPNOACK()またはTPACK()のいずれかが設定されていなければなりません。

戻り値

TPNOTIFY()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPNOTIFY()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。

[TPENOENT]

ターゲット・クライアントが存在せず、TPACK()が設定されました。

[TPETIME]

ブロッキング・タイムアウトが発生しました。ブロッキング・タイムアウトは、(a) TPBLOCKTPTIMEが指定された場合、(b) TPACKTPTIMEが指定された場合(この場合、承認は受信されない)に発生します。

[TPEBLOCK]

呼出し時にブロッキング条件が検出され、TPNOBLOCKは指定されていませんでした。

[TPGOTSIG]

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

[TPEPROTO]

TPNOTIFY()が不正なコンテキストで呼び出されました(たとえば、クライアントから)。

[TPESYSTEM]

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

[TPEOS]

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

[TPERELEASE]

TPACK()が指定され、ターゲットは応答プロトコルをサポートしない以前のOracle Tuxedoシステムのリリースのクライアントです。

関連項目

TPBROADCAST(3cbl)TPCHKUNSOL(3cbl)TPINITIALIZE(3cbl)TPSETUNSOL(3cbl)TPTERM(3cbl)

 


TPOPEN(3cbl)

名前

TPOPEN() - Oracle Tuxedo ATMIのリソース・マネージャのオープン

形式

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPOPEN" USING
TPSTATUS-REC.

説明

TPOPEN()は、呼出し側がリンクされるリソース・マネージャをオープンします。呼出し側には、多くとも1つのリソース・マネージャしかリンクできません。このルーチンはリソース・マネージャ固有のopen()呼出しのかわりに使用するもので、これによりサービス・ルーチンから、移植性を損なう可能性のある呼出しをなくすことができます。リソース・マネージャは初期化の内容がそれぞれで異なるため、個々のリソース・マネージャをオープンするために必要な情報を構成ファイルに記述します。

リソース・マネージャがすでにオープンされている場合(つまり、TPOPEN()を2回以上呼び出した場合)、何も処理は行われず、正常終了を示すコードが返されます。

戻り値

TPOPEN()は正常終了時には、TP-STATUSに[TPOK]を設定します。リソース・マネージャがオープンできなかった理由に関する詳しい情報は、そのリソース・マネージャに独自の方法で照会することで得ることができます。ただし、リソース・マネージャのエラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれます。

エラー

次の条件が発生すると、TPOPEN()は異常終了し、TP-STATUSに次の値を設定します。

[TPERMERR]

リソース・マネージャを正しくオープンできませんでした。より詳しい理由は、そのリソース・マネージャを独自の方法で調査することで得られます。エラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれることに注意してください。

[TPEPROTO]

TPOPEN()が不正なコンテキストで(たとえば、Oracle Tuxedo ATMIのサーバー・グループに参加していないクライアントにより)呼び出されました。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPCLOSE(3cbl)

 


TPPOST(3cbl)

名前

TPPOST() - イベントを通知する

形式

01 TPEVTDEF-REC.
COPY TPEVTDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPPOST" USING
TPEVTDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

説明

呼出し側は、イベントおよび関連データを通知するためにTPPOST()を使用します。イベントの名前はTPEVTDEF-RECEVENT-NAMEで指定され、ポストされるデータはDATA-RECに含まれます。通知されるイベントおよびそのデータは、EVENT-NAMEがそのサブスクリプション条件を満たし、DATA-RECがその省略可能なフィルタ規則に適合するすべてのサブスクライバに対し、Oracle Tuxedoのイベント・ブローカによってディスパッチされます。

EVENT-NAMEの文字長は最大31文字で、SPACESであってはなりません(スペースで埋めることはできません)。また、ドット(「.」)はOracle Tuxedoシステムによって定義されるイベントの頭文字として使用されるため、EVENT-NAMEの最初の文字にドットを使用することはできません。

DATA-RECはポストされるレコードであり、そのタイプを指定することができます。イベントとともにポストされるDATA-RECのデータ長は、TPTYPE-RECLENで指定されます。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。DATA-RECがデータ長を指定する必要のあるタイプのレコードである場合は、LENを0にセットすることはできません(0にセットした場合はデータはポストされません)。TPTYPE-RECREC-TYPESPACESの場合は、DATA-RECLENは無視され、データをともなわずにイベントだけがポストされます。

TPPOST()をトランザクション内で使用する場合、トランザクションの境界は、イベント・ブローカによって通知されるサーバーおよび安定ストレージのメッセージ・キュー、またはそのいずれかを含むように拡張されます。トランザクションによるポストでは、ポストされたイベントを受け取ったことがポスト元のトランザクションに通知される場合(サーバーやキューなど)と、通知されない場合(クライアントなど)があります。

ポスト元がトランザクション内にあり、TPTRANが設定されると、通知されるイベントはトランザクション・モードでイベント・ブローカに渡されます。これは、イベント・ブローカがイベントをポスト元のトランザクションの一部としてディスパッチできるようにするためです。ブローカは、サブスクリプションの実行時にTPEVTDEF-RECTPEVTRANをセットしたサービス・ルーチンや安定記憶キューのサブスクリプションに対してのみトランザクション・イベント通知を送出します。クライアント通知、およびサブスクリプション時にTPEVTDEF-RECTPEVNOTRANを設定したサービス・ルーチンや安定ストレージ・キューのサブスクリプションも、イベント・ブローカによってディスパッチされますが、これらはポスト側プロセスのトランザクションの一部としては処理されません。

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

TPNOTRAN

呼出し側がトランザクション・モードにあり、このフラグが設定されている場合は、イベントのポストは呼出し側のトランザクションについては実行されません。このフラグ設定を使用するトランザクション・モードの呼出し側は、依然としてトランザクション・タイムアウトの対象となります(それ以外はなし)。イベントのポストが正しく実行されなかった場合、呼出し側のトランザクションには影響はありません。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPTRAN

呼出し側がトランザクション・モードにあり、このフラグが設定されている場合は、イベントのポストは呼出し側のトランザクションに関して実行されます。呼出し側がトランザクション・モードにない場合、この設定は無視されます。TPNOTRANまたはTPTRANのいずれかが設定されていなければなりません。

TPNOREPLY

TPPOST()に対し、イベント・ブローカがEVENT-NAMEに対するすべてのサブスクリプションを処理するまで待ってから戻る必要はないことを知らせます。TPNOREPLYを設定すると、TPPOST()が正常終了するかどうかにかかわらず、TPEVTDEF-RECEVENT-COUNTは0に設定されます。呼出し側がトランザクション・モードにある場合は、TPTRANも設定するときには、この設定は使用できません。TPNOREPLYまたはTPREPLYのいずれかが設定されていなければなりません。

TPREPLY

TPPOST()に対し、すべてのサブスクリプションが処理されてから戻るよう指示します。TPREPLYを設定すると、ルーチンは正常終了時には[TPOK]を戻し、EVENT-NAMEに関してイベント・ブローカによってディスパッチされたイベント通知の数がTPEVTDEF-RECEVENT-COUNTに設定されます。呼出し側がトランザクション・モードにあり、TPTRANが設定されている場合は、このフラグを設定する必要があります。TPNOREPLYまたはTPREPLYのいずれかが設定されていなければなりません。

TPNOBLOCK

ブロッキング条件が存在する場合は、イベントはポストされません。このような条件が発生すると、呼出しは失敗し、TP-STATUSは[TPEBLOCK]に設定されます。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

ルーチン内部のシステム・コールがシグナルによって中断された場合、そのシステム・コールは再度実行されることはなく、呼出しは異常終了し、TP-STATUSは[TPGOTSIG]にセットされます。TPNOSIGRSTRTまたはTPSIGRSTRTのいずれかが設定されていなければなりません。

戻り値

TPPOST()は正常終了時には、TP-STATUSに[TPOK]を設定します。また、EVENT-COUNTにはイベント・ブローカがEVENT-NAMEに関してディスパッチしたイベント通知(つまり、そのイベント表現がEVENT-NAMEに対して有効であると評価され、かつそのフィルタ規則がDATA-RECに対して有効であると評価されたサブスクリプションのためのポスト)の数が入ります。終了時にTP-STATUSが[TPESVCFAIL]に設定された場合、EVENT-COUNTには、イベント・ブローカがEVENT-NAMEに関してディスパッチした非トランザクション・イベント通知の数が入ります。

エラー

次の条件が発生すると、TPPOST()は異常終了し、TP-STATUSに次のいずれかの値を設定します(特に記述した場合を除いては、エラーが呼出し側のトランザクションに影響を及ぼすことはありません)。

[TPEINVAL]

無効な引数が指定されました(EVENT-NAMESPACESである場合など)。

[TPENOENT]

Oracle Tuxedoのユーザー・イベント・ブローカにアクセスできません。

[TPETRAN]

呼出し側がトランザクション・モードにあり、TPTRANが設定され、TPPOST()がトランザクション伝播をサポートしないイベント・ブローカにコンタクトしました。つまり、TMUSREVT(5)が、トランザクションをサポートするOracle Tuxedo ATMIグループで実行されていません。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPPOST()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 TPPOST()がトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPESVCFAIL]

イベント・ブローカが呼出し側のトランザクションに関して、トランザクション・イベントをサービス・ルーチンまたは安定ストレージ上のキューに通知する際に、エラーが発生しました。呼出し側の現在のトランザクションは、中断のみとしてマークされます。このエラーが返されると、EVENT-COUNTには、イベント・ブローカがEVENT-NAMEに関してディスパッチした非トランザクション・イベント通知の数が入ります。トランザクションのポスティングの結果はトランザクション終了時にアボートされるため、カウントされません。なお、トランザクションがタイムアウトしないかぎり、通信はトランザクションが異常終了するまで継続され、呼出し側のトランザクションのためになされた作業はトランザクションが完了する時点で異常終了されます(つまり、以降のやりとりで何らかの結果が得られる場合には、TPNOTRANを設定しておく必要があります)。

[TPEBLOCK]

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

[TPGOTSIG]

シグナルが受信され、TPNOSIGRSTRTがセットされました。

[TPEPROTO]

TPPOST()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPSUBSCRIBE(3cbl)TPUNSUBSCRIBE(3cbl)EVENTS(5), TMSYSEVT(5)TMUSREVT(5)

 


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

このイベントは、会話の起動元が受け取るもので、接続の他方の側の従属サービスがアプリケーションで定義されているように正常に終了したことを示します(すなわち、TPSUCCESS()とともにTPRETURN()が呼び出されています)。サービス・ルーチンの終了処理の一部として、サーバーはこの接続を切断しています。このため、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-TYPESUB-TYPEが、着信メッセージのタイプおよびサブタイプと一致しません。会話が呼出し側のトランザクションの一部になっている場合は、着信メッセージが破棄されるため、トランザクションは中断のみとしてマークされます。

[TPEBADDESC]

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

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPRECV()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。)いずれの場合も、DATARECは変更されません。 トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 ATMI呼出しがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPEEVENT]

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

[TPEBLOCK]

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

[TPGOTSIG]

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

[TPEPROTO]

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

[TPESYSTEM]

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

[TPEOS]

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

使用方法

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

関連項目

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

 


TPRESUME(3cbl)

名前

TPRESUME() - グローバル・トランザクションを再開する

形式

01 TPTRXDEF-REC.
COPY TPTRXDEF.

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPRESUME" USING TPTRXDEF-REC TPSTATUS-REC.

説明

TPRESUME()を使用して、中断されているトランザクションでの作業を再開します。呼出し側がトランザクションの作業を再開した場合、その作業はTPSUSPEND()で再度中断させるか、あるいはあとでTPCOMMIT()またはTPABORT()を利用して完了させる必要があります。

トランザクションの作業を再開する際には、呼出し側はリンクされたリソース・マネージャが(TPOPEN()を利用して)オープンされていることを確認する必要があります。

TPRESUME()は、TRANID()に含まれるグローバル・トランザクション識別子に関して、呼出し側をトランザクション・モードに切り替えます。

戻り値

TPRESUME()は正常終了時には、[TPOK]を設定します。

エラー

次の条件が発生すると、TPRESUME()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

TRANID()に設定された識別子が、実在しないトランザクション(以前に終了したトランザクションやタイムアウトになったトランザクションを含む)のものであるか、または呼出し側が再開することを認められていないトランザクションのものです。トランザクションに関する呼出し側の状態は変化しません。

[TPEMATCH]

TRANID()に設定された識別子が示すトランザクションは、すでに別のプログラムによって再開されています。トランザクションに関する呼出し側の状態は変化しません。

[TPETRAN]

呼出し側が少なくとも1つ以上のリソース・マネージャでグローバル・トランザクションの外部の作業に関与しているため、Oracle Tuxedoシステムがグローバル・トランザクションを再開できません。グローバル・トランザクションを再開するためには、あらかじめこれらの作業をすべて終了させる必要があります。ローカル・トランザクションについての呼出し側の状態は、変更されません。

[TPEPROTO]

TPRESUME()が不正なコンテキストで呼び出されました(たとえば、呼出し側がすでにトランザクション・モードになっています)。トランザクション・モードに関する呼出し側の状態は変更されません。

[TPESYSTEM]

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

[TPEOS]

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

ノート

XA準拠のリソース・マネージャがグローバル・トランザクションに含まれるようにするには、そのリソース・マネージャが正常にオープンされている必要があります(詳細はTPOPEN()を参照)。

停止されていたトランザクションを再開するプログラムは、そのトランザクションを停止させたプログラムと同じ論理マシン(LMID)上に存在している必要があります。ワークステーション・クライアントの場合、そのワークステーションが接続されているワークステーション・ハンドラ(WSH)は、そのトランザクションを停止させたワークステーション・クライアントのハンドラと同じ論理マシン上に存在している必要があります。

関連項目

TPABORT(3cbl)TPCOMMIT(3cbl)TPOPEN(3cbl)TPSUSPEND(3cbl)

 


TPRETURN(3cbl)

名前

TPRETURN() - Oracle Tuxedo ATMIのサービス・ルーチンからのリターン

形式

01 TPSVCRET-REC.
COPY TPSVCRET.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

COPY TPRETURN REPLACING TPSVCRET-REC BY
TPSVCRET-REC

TPTYPE-REC BY
TPTYPE-REC
DATA-REC BY
DATA-REC T
PSTATUS-REC BY
TPSTATUS-REC.

説明

TPRETURN()は、サービス・ルーチンが完了したことを示します。TPRETURN()にはEXIT PROGRAM文が含まれるので、Oracle Tuxedo ATMIのディスパッチャに制御を確実に正しく返すために、TPRETURN()はそれが起動されたルーチンと同じルーチンの中から呼び出されなければなりません。つまり、TPRETURN()をサービス・ルーチンのサブ・プログラムから呼び出してはなりません。制御がOracle Tuxedo ATMIのディスパッチャに返されないからです。

TPRETURN()はサービスの応答メッセージを送るときに使用します。応答を受け取るサービスがTPCALL()TPGETRPLY()、またはTPRECV()で待機している場合、TPRETURN()の呼出しが成功した時点で、受信側のレコードに応答が入ります。

会話サービスの場合、TPRETURN()は接続自体も切断します。したがって、サービス・ルーチンは、TPDISCON()を直接呼び出すことができません。正しい結果を確実に得るためには、会話サービスに接続しているプログラムは、TPDISCON()を呼び出してはなりません。その代わり、会話サービスが完了したことを示す通知を待ってください。つまり、TPEV-SVCSUCCTPEV-SVCFAILなどのイベントがTPRETURN()から送られるのを待ってください。

サービス・ルーチンがトランザクション・モードであった場合、TPRETURN()はトランザクションのサービス部分を、そのトランザクションの完了時点でコミットあるいは中断できる状態にします。サービスは同じトランザクションの一部として複数回呼び出すことができるので、TPCOMMIT()またはTPABORT()がそのトランザクションの実行元によって呼び出されるまでは、完全にコミットあるいは中断させる必要は必ずしもありません。

TPRETURN()は、該当サービス・ルーチンが開始したリクエスト/レスポンス型サービス・リクエストで期待されるすべての応答を受け取った後で、呼び出すようにしてください。そうでない場合は、サービスの性質に応じて、そのサービス・ルーチンで通信を起動したプログラムに、[TPESVCERR]ステータスまたはTPEV-SVCERRイベントが戻されます。受信されていない未終了の応答は、受信後、Oracle Tuxedo ATMIのディスパッチャによって自動的に取り除かれます。また、これらの応答に対応する通信ハンドルは無効になります。

TPRETURN()は、サービスが開始した接続をすべてクローズしてから呼び出すことも必要です。そうでない場合は、サービスの性質に応じて、そのサービス・ルーチンで通信を起動したプログラムに、[TPESVCERR]ステータスまたはTPEV-SVCERRイベントが返されます。また、即時切断イベント(つまり、TPEV-DISCONIMM)が、オープンしているすべての接続を通して従属サービスに送信されます。

接続の制御に関しては、TPRETURN()発行時に、サービス・ルーチンがそれが呼び出された接続の制御権を持っていない場合、2とおりの結果が考えられます。まず、サービス・ルーチンがTPSVCRET-REC内のTP-RETURN-VALTPFAIL()を、TPTYPE-REC内のREC-TYPESPACES (つまり、送信データなし)を設定してTPRETURN()を呼び出す場合、TPEV-SVCFAILイベントがこの会話の起動元に送信されます。あるいは、それ以外の設定でTPRETURN()呼出しが行われる場合、TPEV-SVCERRイベントが起動元に送信されます。

会話サービスは、自分が開始していないオープン接続を1つだけ持っているので、どの通信ハンドルについてデータ(およびイベント)を送信すればいいかをサーバーは認識しています。このため、通信ハンドルはTPRETURN()には渡されません。

次に、TPRETURN()の引数について説明します。TP-RETURN-VALは次のいずれかに設定できます。

TPSUCCESS

サービスは正常に終了しました。データが存在する場合、そのデータは送られます(戻り処理の失敗の場合を除く)。呼出し側がトランザクション・モードの場合、TPRETURN()はそのトランザクションの呼出し側の部分を、トランザクションが最終的にコミットする時点でコミットできるような状態にします。なお、TPRETURN()を呼び出しても、必ずしもトランザクション全体が終了することにはつながりません。また、呼出し側が正常終了を示したとしても、未処理の応答またはオープンされたままの接続がある場合や、該当サービス内で行われた作業が原因でトランザクションがアボートのみになった場合は、異常終了メッセージが送られます。つまり、応答の受信者はTPESVCERR()表示あるいはTPEV-SVCERRイベントを受け取ります。なお、サービス・ルーチンの処理中になんらかの理由でトランザクションがアボートのみになると、TP-RETURN-VALTPFAIL()に設定されます。TPSUCCESS()が会話サービスに対して指定されると、TPEV-SVCSUCCイベントが生成されます。

TPFAIL

アプリケーション上の問題でサービスが異常終了しました。応答を受け取ったプログラムにエラーが報告されます。つまり、応答を受け取る呼出しは失敗し、受信側は[TPSVCERR]指示あるいはTPEV-SVCERRイベントを受け取ります。呼出し側がトランザクション・モードの場合、TPRETURN()はそのトランザクションを中断のみにします(ただし、トランザクションはすでに中断のみになっていることもあります)。戻り処理が失敗した場合を除き、呼出し側のデータが(もしあれば)送られます。トランザクション・タイムアウトになって、呼出し側のデータが送られない場合もあります。このケースでは、応答を待つプログラムは[TPETIME]エラーを受け取ることになります。

TPEXIT

この値は、サービスの完了という点ではTPFAIL()と同じですが、トランザクションが中断のみになり応答がリクエスタに戻された後で、サーバーは終了します。サーバーが再開可能な場合は、自動的に再開します。

TP-RETURN-VALがこれらの3つの値のいずれかに設定されない場合、デフォルトでTPFAIL()が使用されます。

アプリケーションが定義した戻り値TPSVCRET-REC内のAPPL-CODEを、サービスの応答を受け取るプログラムに送ることもできます。このコードは、応答を正常に送ることができれば(つまり、受信の呼出しが正常に行われるか[TPESVCFAIL]が返される、あるいはイベントTPEV-SVCSUCCまたはTPEV-SVCFAILのいずれかが受信されれば)、TP-RETURN-VALの設定に関係なく送られます。APPL-CODEの値は、受信側の変数TPSTATUS-REC内のAPPL-RETURN-CODEに入ります。

DATA-RECは送信されるレコードであり、LENは、送信するDATA-RECの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプおよびサブタイプのレコードである場合、LENは無視されます(0でかまいません)。REC-TYPESPACESの場合、DATA-RECおよびLENは無視されます。このとき、サービスを呼び出したプログラムが応答を期待している場合には、応答はデータ部なしで送信されます。応答を期待していない場合、TPRETURN()は渡されたデータをすべて無視し、応答を送信せずに終了します。REC-TYPESTRINGで、LEN0の場合は、リクエストはデータ部なしで送信されます。

会話サービスの場合、アプリケーションの戻りコードとデータ部が送られないケースがいくつかあります。

戻り値

TPRETURN()にはEXIT PROGRAM文が含まれるので、呼出し側には値が戻されず、制御もサービス・ルーチンには戻されません。サービス・ルーチンがTPRETURN()を使用せずに終了すると(つまり、EXIT PROGRAM文を直接使用するか、単純に「サービス・ルーチンを終了する」と)、サーバーはサービス・エラーをサービスのリクエスタに戻します。従属側へのオープン接続はすべてただちに切断され、未終了の非同期応答は取り除かれます。サーバーが失敗時にトランザクション・モードにあった場合は、そのトランザクションには中断のみマークが付けられます。TPRETURN()がサービス・ルーチンとは別に使用される場合(つまり、サービス・ルーチンでないルーチンによって使用される場合)、TPRETURN()は何の影響も与えません。

エラー

引数のハンドリング中または処理中にエラーが検出されると、TPCALL()またはTPGETRPLY()でサービスの結果を受信するプログラムについては、TP-STATUSに[TPESVCERR]が設定され、TPSEND()またはTPRECV()を使用しているプログラムには会話を介してTPEV-SVCERRイベントが送信されます。

関連項目

TPCALL(3cbl)TPCONNECT(3cbl)TPFORWAR(3cbl)

 


TPRMCLOSE(3cbl)

名前

TPRMCLOSE() - 複数のRMサーバー・グループで構成された特定のRMをクローズするルーチン。

概要

01 TPRMDEF-REC.
COPY TPRMDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPRMCLOSE" USING TPRMDEF-REC TPSTATUS-REC.

説明

TPCLOSERM()は、引数rmidによって指定されたリソース・マネージャをクローズします。現在のコンテキストがトランザクション・コンテキスト内にある場合、このルーチンは何も行わず、呼出し側に戻ります。

TPCLOSERM()は、TPOPENRM()ルーチンによってオープンされるリソース・マネージャのみをクローズできます。

戻り値

TPRMCLOSE()は正常終了時には、TP-STATUSに[TPOK]を設定します。

失敗時には、TPRMCLOSE()は呼出し側プロセスのコンテキストを変更せず、TP-STATUSにエラー条件を示す値を設定します。

エラー

次の条件が発生すると、TPRMOPEN()は失敗し、TP-STATUSに次の値を設定します。

[TPERMERR]

リソース・マネージャが正しくクローズできませんでした。より詳しい理由については、リソース・マネージャを独自の方法で調べることによって得ることができます。エラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれることに注意してください。

[TPEPROTO]

TPRMCLOSE()が不正なコンテキストで呼び出されました(たとえば、Oracle Tuxedoの複数のリソース・マネージャ・サーバー・グループに関連付けられていないクライアントによって呼び出されました。このクライアントは、複数のリソース・マネージャ・サーバー・グループ内にないサーバーによって呼び出されています。パラメータrmidによって指定されたリソース・マネージャがTPRMOPEN()ルーチンを介してオープンされていないか、現在のプロセスがbuildserverの-Mオプションを使用して構築されていません)。
TPRMCLOSE()は、実行中のトランザクション・コンテキストで実行されます。

[TPEINVAL]

無効なパラメータが指定されました(たとえば、フラグ値が0でないか、RMNAMEパラメータが、現在の複数のリソース・マネージャ・サーバー・グループで構成されている有効なリソース・マネージャ名ではありません)。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPOPEN(3cbl)TPCLOSE(3cbl)TPRMOPEN(3cbl)

 


TPRMEND(3cbl)

名前

TPRMEND() - 特定のRM内のトランザクション・ブランチのかわりに実行された現在の処理を終了するルーチン。

概要

01 TPRMDEF-REC.
COPY TPRMDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPRMEND" USING TPRMDEF-REC TPSTATUS-REC.

説明

TPRMEND()は、特定のRM内のトランザクション・ブランチのかわりに実行された現在の処理を終了します。このルーチンは、このトランザクション・ブランチとの関連付けを解除するようリソース・マネージャに指示します。現在のRMがまだオープンされていないか、現在のコンテンツがトランザクション状態でない場合、TPRMEND()は何もせず、TP-STATUSをエラーに設定します。

戻り値

正常終了時に、TPRMEND()TP-STATUSを[TPOK]に設定します。

失敗時には、TPRMEND()は呼出し側プロセスのコンテキストを変更せず、TP-STATUSにエラー条件を示す値を設定します。

エラー

次の条件が発生すると、TPRMEND()は失敗し、TP-STATUSに次の値を設定します。

[TPERMERR]

トランザクション・ブランチ操作の関連付け解除でエラーが発生しました。エラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれることに注意してください。

[TPEPROTO]

TPRMEND()が不正なコンテキストで呼び出されました(たとえば、Oracle Tuxedoの複数のリソース・マネージャ・サーバー・グループを関連付けていないクライアントによって呼び出されました。このクライアントは、複数のリソース・マネージャ・サーバー・グループ内にないサーバーによって呼び出されています。パラメータrmidによって指定されたリソース・マネージャがTMRMOPEN()ルーチンを介してオープンされていないか、現在のプロセスがbuildserverの-Mオプションを使用して構築されていないか、現在のコンテキストがトランザクション・モードではありません)。

[TPEINVAL]

無効なパラメータが指定されました(たとえば、フラグ値が0でないか、RMNAMEパラメータが、現在の複数のリソース・マネージャ・サーバー・グループで構成されている有効なリソース・マネージャの識別子ではありません)。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPRMOPEN(3cbl)TPRMCLOSE(3cbl)TPRMSTART(3cbl)

 


TPRMOPEN(3cbl)

名前

TPRMOPEN() - 複数のRMサーバー・グループで構成された特定のRMをオープンするルーチン。

概要

01 TPRMDEF-REC.
COPY TPRMDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPRMOPEN" USING TPRMDEF-REC TPSTATUS-REC.

説明

TPRMOPEN()は、複数のRMサーバー・グループで構成された特定のRMをオープンします。現在のコンテキストがトランザクション内にある場合、このルーチンは、トランザクション・ブランチのかわりにこのトランザクション処理単位にも参加するようオープンRMに指示します。現在のRMがすでにオープンされている場合、このルーチンは、オープン操作をスキップし、このルーチンがトランザクション・コンテキストで呼び出されたときにこのトランザクション処理単位に参加するようRMに指示しようとします。

戻り値

TPRMOPEN()は正常終了時には、TP-STATUSに[TPOK]を設定します。

失敗時には、TPRMOPEN()は呼出し側プロセスのコンテキストを変更せず、TP-STATUSにエラー条件を示す値を設定します。

エラー

次の条件が発生すると、TPRMOPEN()は失敗し、TP-STATUSに次の値を設定します。

[TPERMERR]

リソース・マネージャを正しくオープンできませんでした。より詳しい理由は、そのリソース・マネージャを独自の方法で調査することで得られます。エラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれることに注意してください。

[TPEPROTO]

TPRMOPEN()が不正なコンテキストで呼び出されました(たとえば、Oracle Tuxedoの複数のRMサーバー・グループに関連付けられていないクライアントによって呼び出されました。このクライアントは、複数のRMサーバー・グループ内にないサーバーによって呼び出されています。または、現在のプロセスがbuildserverの-Mオプションを使用して構築されていません)。

[TPEINVAL]

無効なパラメータが指定されました(たとえば、フラグ値が0でないか、RMNAMEが、複数のRMサーバー・グループで構成されている有効なリソース・マネージャの識別子ではありません)。
もう1つのケースとして、このRMがRMのCAE仕様でない場合があります。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPOPEN(3cbl)TPCLOSE(3cbl)TPRMCLOSE(3cbl)

 


TPRMSTART(3cbl)

名前

TPRMSTART() - 複数のRMサーバー・グループ内の特定のRMのトランザクション・ブランチのかわりに処理を開始するルーチン。

概要

01 TPRMDEF-REC.
COPY TPRMDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPRMSTART" USING TPRMDEF-REC TPSTATUS-REC.

説明

TPRMSTART()は、トランザクション・ブランチのかわりに現在のトランザクション処理単位にも参加するようオープンRMに指示します。現在のRMがすでに開始状態にある場合、このルーチンは、操作をスキップします。現在のRMがまだオープンされていない場合、TPRMSTART()>は何もせず、TP-STATUSをエラー条件に設定します。

戻り値

TPRMSTART()は正常終了時には、TP-STATUSに[TPOK]を設定します。

失敗時には、TPRMSTART()は呼出し側プロセスのコンテキストを変更せず、TP-STATUSにエラー条件を示す値を設定します。

エラー

次の条件が発生すると、TPRMOPEN()は失敗し、TP-STATUSに次の値を設定します。

[TPERMERR]

リソース・マネージャを正しくオープンできませんでした。より詳しい理由は、そのリソース・マネージャを独自の方法で調査することで得られます。エラーの正確な性質を判別するための呼出しを使用すると、移植性が損なわれることに注意してください。

[TPEPROTO]

TPRMSTART()が不正なコンテキストで呼び出されました(たとえば、Oracle Tuxedoの複数のRMサーバー・グループに関連付けられていないクライアントによって呼び出されました。このクライアントは、複数のRMサーバー・グループ内にないサーバーによって呼び出されています。または、現在のプロセスがbuildserverの-Mオプションを使用して構築されておらず、現在のRMがまだオープンされていません)。

[TPEINVAL]

無効なパラメータが指定されました(たとえば、フラグ値が0でないか、RMNAMEが、複数のRMサーバー・グループで構成されている有効なリソース・マネージャ名ではありません)。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPRMOPEN(3cbl)TPRMCLOSE(3cbl)TPRMEND(3cbl)

 


TPSBLKTIME(3cbl)

名前

TPSBLKTIME() - 次のサービス呼び出しまたはすべてのサービス呼出しのブロック・タイムを秒単位で設定するルーチン

形式

01 TPBLKDEF-REC.
COPY TPBLKDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.

CALL “TPSBLKTIME” USING TPBLKDEF-REC TPSTATUS-REC.

説明

TPSBLKTIME()は、潜在的なブロッキングAPIのブロック時間値を秒単位で設定するために使用します。潜在的なブロッキングAPIは、値としてフラグTBNOBLOCKを使用できるシステムAPIとして定義します。トランザクション・タイムアウト値には影響しません。

TPBLKDEF-RECBLKTIMEは、ブロック時間を秒単位で設定します。ブロック時間の範囲は0 - 32767です。ブロック時間値0は、以前に設定されたブロック時間フラグ値が取り消されており、別のブロック時間フラグ値で設定されたブロック時間が優先されることを示します。TPSBLKTIME()を呼び出さない場合は、UBBCONFIGファイルの*SERVICESセクションまたはデフォルトの*RESOURCESセクションのBLOCKTIME値が使用されます。

注意: TPSBLKTIME()で設定したブロッキング・タイムアウトは、UBBCONFIGファイルの*SERVICESセクションおよび*RESOURCESセクションに設定されたBLOCKTIMEパラメータよりも優先されます。ブロック時間チェックの優先順位は次のとおりです。
TPSBLKTIME(TPBLK-NEXT)TPSBLKTIME(TPBLK-ALL)*SERVICES*RESOURCES

TPBLKDEF-RECには、以下のいずれかの値を必ず1つ指定する必要があります。

TPBLK-NEXT

次の潜在的なブロッキングAPIのブロック時間値を秒単位で設定します。
呼び出されたAPIにTPNOBLOCKフラグが含まれている場合、TPSBLKTIME (TPBLK-NEXT)は影響せず、ブロッキングなしの状態が継続します。
TPBLK-NEXTブロック時間値は、その直後のAPI呼出しのTPBLK-ALLブロック時間値をオーバーライドします。 TPSBLKTIME(TPBLK-NEXT)スレッド単位で動作します。したがって、アプリケーションでTPSBLKTIME(TPBLK-NEXT)呼び出しや後続のAPI呼出しの周囲にミューテックスを使用する必要はありません。

TPBLK-ALL

同じコンテキスト内で次のTPSBLKTIME()が呼び出されるまでの間、後続のすべての潜在的なブロッキングAPIのブロック時間値(秒)を設定します。呼び出されたAPIにTPNOBLOCKフラグが含まれている場合、TPSBLKTIME(TPBLK-ALL)は影響せず、ブロッキングなしの状態が継続します。
TPSBLKTIME(TPBLK-ALL)コンテキスト単位で動作します。したがって、TPSBLKTIME(TPBLK-ALL)は、複数のスレッドで使用されるコンテキストのいずれか1つのスレッドで呼び出す必要があります。 TPSBLKTIME(TPBLK-ALL)は、TPTERM(3cbl)が呼び出された後のコンテキストには影響しません。
注意: スレッド・タイミングの依存関係に影響されないブロック時間値を実行するためには、TPINITIALIZE(3cbl)の直後、TPGETCTXT(3cbl)の戻り値がほかのスレッドで使用できるようになる前に、TP-MULT-ICONTEXTSフラグを使用してマルチスレッド・コンテキストでTPSBLKTIME(TPBLK-ALL)を呼び出すのが最適な方法です。
注意: マルチスレッド・サーバー上のサービスでTPSBLKTIME(TPBLK-ALL)を呼び出した場合は、その時点で実行されているスレッドにのみ影響します。すべてのサービスのブロック時間を設定する場合は、TPSBLKTIME(TPBLK-ALL)TPSVRINIT(3cbl)と一緒に使用することをお薦めします。

戻り値

TPSBLKTIME()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPSBLKTIMEは失敗し、TP-STATUSに次のいずれかの値を設定します。失敗しても、トランザクション・タイムアウト値には影響しません。

[TPEINVAL]

無効な引数が指定されました。TPBLKDEF-RECTPBLK-NEXTまたはTPBLK-ALL以外の値が指定されていることなどが考えられます。

[TPERELEASE]

以前のリリースのTuxedoで実行されているワークステーション・ハンドラにアタッチされたクライアントでTPSBLKTIME()が呼び出されました。

[TPESYSTEM]

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

関連項目

TPCALL(3cbl)TPCONNECT(3cbl)TPRECV(3cbl)TPGBLKTIME(3cbl)、UBBCONFIG(5)

 


TPSCMT(3cbl)

名前

TPSCMT() - TPCOMMITの終了時期の設定

形式

01 TPCMTDEF-REC.
COPY TPCMTDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPSCMT" USING
TPCMTDEF-REC TPSTATUS-REC.

説明

TPSCMT()TP-COMMIT-CONTROL特性をTPCMTDEF-RECに指定されている値に設定します。このTP-COMMIT-CONTROL特性は、制御をその呼出し側に戻す際のTPCOMMIT()の動作に影響します。プログラムがトランザクション・モードにあるかどうかに関係なく、プログラムからTPSCMT()を呼び出すことができます。他のプログラムがコミットしなければならないトランザクションに呼出し側が参加している場合は、TPSCMT()を呼び出してもそのトランザクションに影響を与えないことに注意してください。むしろ、呼出し側がコミットするその後のトランザクションに影響を与えます。

ほとんどの場合、トランザクションは、Oracle Tuxedo ATMIのプログラムがTPCOMMIT()を呼び出したときにのみコミットされます。ただし、例外が1つあります。UBBCONFIGファイルのSERVICESセクションでAUTOTRAN変数が使用可能になっているために、サービスがトランザクション・モードでディスパッチされる場合は、そのトランザクションはTPRETURN()の呼出し時点で完了します。TPFORWAR()が呼び出された場合、そのトランザクションは、サーバーが最終的にTPRETURN()を呼び出すことによって終了します。このため、TPRETURN()を呼び出すサービスにおけるTP-COMMIT-CONTROL特性の設定内容により、TPCOMMIT()がサーバー内からいつ制御を返すかが決まります。TPCOMMIT()がヒューリスティックなエラー・コードを返した場合、サーバーはメッセージをログ・ファイルに書き込みます。

クライアントがOracle Tuxedo ATMIアプリケーションに参加する場合は、この特性の初期設定は構成ファイルから取られます(「UBBCONFIG(5)」RESOURCESセクションのCMTRET変数を参照)。

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

TP-CMT-LOGGED

この設定は、コミット決定が2フェーズ・コミット・プロトコルの第1フェーズで記録された後、第2フェーズが完了する前にTPCOMMIT()を終了させることを示します。この設定により、TPCOMMIT()の呼出し側へのより迅速なレスポンスが得られるようになります。ただし、第2段階の処理が完了するまでに生じるタイミングのずれが原因で、トランザクションの参加リソースが、その作業の完了(つまり、中途終了)をヒューリスティックに判断してしまうというリスクが生じます。このような場合、TPCOMMIT()が終了していないため、呼出し側にこの状況を知らせる方法がありません(ただし、リソース・マネージャがヒューリスティックな判断を行った場合には、Oracle Tuxedoシステムによってメッセージがログ・ファイルに書き込まれてはいます)。正常な状態では、第1フェーズの間にコミットすることを約束している参加リソースは、第2フェーズでコミットします。一般に、ネットワークやサイトの障害が原因で問題が生じると、第2フェーズでヒューリスティックな判断がなされます。

TP-CMT-COMPLETE

この設定は、2フェーズ・コミット・プロトコルが完全に終了した後、TPCOMMIT()を終了させることを示します。この設定により、TPCOMMIT()は第2フェーズのコミット中にヒューリスティックな判断がなされたことを示すことができます。

戻り値

TPSCMT()は正常終了時には、TP-STATUSに[TPOK]を設定し、TP-COMMIT-CONTROL特性の以前の値を返します。

エラー

次の条件が発生すると、TPSCMT()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

TPCMTDEF-RECTP-CMT-LOGGEDまたはTP-CMT-COMPLETEでありません。

[TPEPROTO]

TPSCMT()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

注意事項

TPBEGIN()TPCOMMIT()、およびTPABORT()を使用してOracle Tuxedo ATMIのトランザクションを記述する際には、XAインタフェースに準拠した(および呼出し側に適切にリンクされている)リソース・マネージャの行う作業のみがトランザクションとしてのプロパティを備えていることを忘れないようにすることが重要です。トランザクションで行われるその他の処理内容は、TPCOMMIT()TPABORT()の影響を受けません。そのリソース・マネージャが行った処理がOracle Tuxedo ATMIのトランザクションの一部となるよう、XAインタフェースを満たすリソース・マネージャをサーバーにリンクする方法については、「buildserver(1)」を参照してください。

関連項目

TPABORT(3cbl)TPBEGIN(3cbl)TPCOMMIT(3cbl)TPGETLEV(3cbl)

 


TPSEND(3cbl)

名前

TPSEND() - 会話接続でメッセージを送信するルーチン

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

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

説明

TPSEND()は、別のプログラムにオープン接続を介してデータを送信するときに使用します。このとき、呼出し側がこの接続の制御権をもたなければなりません。COMM-HANDLEは、データを送信するオープン接続を指定するものです。COMM-HANDLEは、TPCONNECT()またはTPSVCSTART()から戻される通信ハンドルです。

DATA-RECは、送信するデータであり、LENは、送信するデータの大きさを指定します。ただし、DATA-RECが長さの指定を必要としないタイプのレコードである場合LENは無視されます(0でかまいません)。REC-TYPESPACESの場合は、DATA-RECおよびLENは無視され、メッセージはデータなしで送信されます(これは、たとえば、データの送信なしに接続の制御権だけを与えるときなどに使用されます)。

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

TPRECVONLY

この設定は、呼出し側のデータが送信された後、呼出し側が接続の制御を放棄することを指示します。つまり、呼出し側はそれ以降、TPSEND()呼出しを発行できなくなります。接続の他方の側のプログラムがTPSEND()によって送られたデータを受け取る場合、それが接続の制御を得たことを示すイベント(TPEV-SENDONLY)も受け取ります(そして、それ以降、TPRECV()呼出しは発行できません)。TPRECVONLYまたはTPSENDONLYのいずれかを指定しなければなりません。

TPSENDONLY

この設定は、呼出し側が接続の制御権を保持することを示します。TPRECVONLYまたはTPSENDONLYのいずれかを指定しなければなりません。

TPNOBLOCK

ブロッキング条件が存在する場合、データおよびどのイベントも送信されません(たとえば、メッセージの送信に使用されるデータ・バッファがいっぱいのときなど)。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

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

COMM-HANDLEに対してイベントが存在する場合、TPSEND()は呼出し側のデータを送信せずに終了します。イベントのタイプは、TPEVENT()に戻されます。TPSEND()の有効なイベントを次に示します。

TPEV-DISCONIMM

会話の従属側が受け取るこのイベントは、その会話の起動元がTPDISCON()により即時切断要求を出したことを、あるいは接続の起動元が従属側のオープン接続を持ってTPRETURN()を出したことを示します。このイベントは、通信エラー(サーバー、マシン、ネットワークの障害など)により接続が切断されたときにも起動元またはその従属側に返されます。

TPEV-SVCFAIL

会話の起動元が受け取るこのイベントは、その接続の従属側が会話の制御権をもたずにTPRETURN()を出したことを示します。さらに、TPRETURN()は、TPFAIL()を設定してデータ・レコードなしで発行されました(つまり、TPRETURN()に渡されるREC-TYPESPACESに設定されました)。

TPEV-SVCERR

会話の起動元が受け取るこのイベントは、その接続の従属側が会話の制御権をもたずにTPRETURN()を出したことを示します。さらに、TPEV-SVCFAILに記述されている以外の形で、TPRETURN()が出されました。

これらのイベントはそれぞれ、即時切断通知(つまり、正常ではなく中断)を示すので、処理途中のデータは失われます。この接続に使用された通信ハンドルは無効になります。2つのプログラムが同じトランザクションに参加していた場合には、そのトランザクションに中断のみマークが付けられます。

戻り値

TPSEND()は正常終了時には、TP-STATUSに[TPOK]を設定します。イベントが存在し、エラーが発生しなかった場合は、TPSEND()TP-STATUSに[TPEEVENT]を設定します。TP-STATUSに[TPEEVENT]が設定され、TP-EVENTTPEV-SVCSUCCまたはTPEV-SVCFAILの場合、APPL-RETURN-CODEには、TPRETURN()の一部として送信されたアプリケーション定義の値が入ります。

エラー

次の条件が発生すると、TPSEND()は失敗し、TP-STATUSに次の値を設定します。特に説明がなければ、この失敗は呼出し側のトランザクションには影響しません。

[TPEINVAL]

無効な引数が指定されました。

[TPEBADDESC]

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

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPSEND()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 トランザクションATMI呼出しがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPEEVENT]

イベントが発生し、そのタイプがTPEVENT()に記録されます。このエラーが発生すると、DATA-RECは送られません。

[TPEBLOCK]

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

[TPGOTSIG]

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

[TPEPROTO]

TPSEND()が不正なコンテキストで呼び出されました(たとえば、呼出し側がデータの受信しかできないように接続が確立された場合など)。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPCONNECT(3cbl)TPDISCON(3cbl)TPRECV(3cbl)

 


TPSETCTXT(3cbl)

名前

TPSETCTXT() - 現在のアプリケーション関連のコンテキスト識別子を設定する

形式

01 TPCONTEXTDEF-REC.
COPY TPCONTEXTDEF.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPSETCTXT" USING TPCONTEXTDEF-REC TPSTATUS-REC.

説明

TPSETCTXT()は、現在のプログラムが動作するコンテキストを定義します。(マルチスレッドCOBOLアプリケーションは現在サポートされていません。)これ以降のOracle Tuxedoの呼出しは、TPCONTEXTDEF-RECCONTEXTで示されるアプリケーションを参照します。TPCONTEXTDEF-RECCONTEXTの値は、事前のTPGETCTXT()呼出しで提供されます。CONTEXTの値がTPNULLCONTEXTの場合、プログラムはどのOracle Tuxedoコンテキストとも関連しません。入力時にTPCONTEXTDEF-RECCONTEXTTPINVALIDCONTEXTを設定すると無効になります。

戻り値

TPSETCTXT()は正常終了時には、TP-STATUSに[TPOK]を設定します。

異常終了時には、TPSETCTXT()は呼出し側プロセスのコンテキストを変更せず、TP-STATUSにエラー条件を示す値を設定します。

エラー

TPSETCTXT()は異常終了時には、TP-STATUSに次のいずれかの値を設定します。

[TPEINVAL]

無効な引数が指定されました。

[TPENOENT]

TPCONTEXTDEF-RECCONTEXTの値が有効なコンテキストではありません。

[TPEPROTO]

TPSETCTXT()の呼出し方法が不適切です。たとえば、TPINITIALIZE()を呼び出していないプロセスやTP-MULTI-CONTEXTSを設定せずにTPINITIALIZE()を呼び出したプロセスで、それが呼び出されていた場合です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

「COBOLアプリケーション・トランザクション・モニター・インタフェースの紹介」TPGETCTXT(3cbl)

 


TPSETUNSOL(3cbl)

名前

TPSETUNSOL() - 非請求メッセージの処理方法の設定

形式

01 CURR-ROUTINE  PIC S9(9) COMP-5. 

01
PREV-ROUTINE PIC S9(9) COMP-5.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPSETUNSOL" USING
CURR-ROUTINE PREV-ROUTINE TPSTATUS-REC.

説明

TPSETUNSOL()は、非請求メッセージがOracle Tuxedoシステムのライブラリによって受け取られる際に呼び出すルーチンをクライアントが指定できるようにします。TPSETUNSOL()の最初の呼出しの前に、Oracle Tuxedo ATMIライブラリがクライアントのために受け取った非請求メッセージは記録されますが、無視されます。関数番号CURR-ROUTINE0を設定してTPSETUNSOL()を呼び出した場合も、同じ結果になります。システムが通知や検出のために使用する方法は、アプリケーションのデフォルトの設定で決まります。このデフォルトは、クライアントごとに変更できます(「TPINITIALIZE(3cbl)」を参照)。

TPSETUNSOL()の呼出し時にCURR-ROUTINEに渡されるルーチン番号には、定義済みの16のルーチンから1つを選択します。ルーチン名は、非請求メッセージを処理するCのルーチンの場合は、_tm_dispatch1から_tm_dispatch8まで、同じメッセージを処理するCOBOLのルーチンの場合は、TMDISPATCH9からTMDISPATCH16まででなければなりません。Cの関数(_tm_dispatch1から_tm_dispatch8まで)は、tpsetunsol(3c)に記述されているパラメータ定義に準拠していなければなりません。COBOLのルーチン(TMDISPATCH9からTMDISPATCH16まで)は、データの受信にTPGETUNSOL()を使用しなければなりません。

Cアプリケーションの非請求メッセージ処理ルーチン内での処理は、Oracle Tuxedo関数tpalloc()tpfree()tpgetctxt()tpgetlev()tprealloc()、およびtptypes()に限定されています。

COBOLアプリケーションの非請求メッセージ処理ルーチン内での処理は、Oracle Tuxedo関数TPGETLEV()およびTPGETCTXT()に限定されています。

戻り値

TPSETUNSOL()は正常終了時には、TP-STATUSに[TPOK]を設定し、非請求メッセージ処理ルーチンの以前の設定条件を返します。PREV-ROUTINE0の場合、以前に非請求メッセージ処理ルーチンが設定されていないことを示し、正常終了です。

エラー

次の条件が発生すると、TPSETUNSOL()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました(たとえば、CURR-ROUTINEが有効なルーチンの値ではない場合など)。

[TPEPROTO]

TPSETUNSOL()が不正なコンテキストで(たとえば、サーバー内から)呼び出されました。

[TPESYSTEM]

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

[TPEOS]

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

移植性

TPNOTIFY()に記述されているインタフェースはすべて、ネイティブ・サイトのUNIXシステム・ベースのプロセッサ上で利用できます。さらに、ルーチンTPBROADCAST()TPCHKUNSOL()およびルーチンTPSETUNSOL()は、UNIXおよびMS-DOSワークステーション・プロセッサ上で利用できます。

TPSETUNSOL()はWindowsでは利用できません。ダイナミック・リンク・ライブラリと共有ライブラリの動作方法がこの環境では異なるためです。TPEPROTO()が返されます。C言語のインタフェースtpsetunsol()を使用してハンドラ関数を設定します。

関連項目

TPGETCTXT(3cbl)TPGETUNSOL(3cbl)TPINITIALIZE(3cbl)TPTERM(3cbl)

 


TPSPRIO(3cbl)

名前

TPSPRIO() - サービス・リクエストの優先度の設定

形式

01 TPPRIDEF-REC.
COPY TPPRIDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPSPRIO" USING
TPPRIDEF-REC TPSTATUS-REC.

説明

TPSPRIO()は、次に送信または転送されるリクエストの優先度を設定します。設定された優先度は、次に送信されるリクエストに対してのみ有効です。キュー機能がインストールされている場合、優先度は、TPENQUEUE()またはTPDEQUEUE()によってキューに登録されるメッセージまたはキューから取り出されるメッセージについても設定できます。デフォルトでは、TPPRIDEF-RECPRIORITYに正または負の値を設定することにより、サービスの優先度が、そのデフォルト値を基準として設定値の分だけ上下します。上限は100、下限は1で、100が最も高い優先度を表します。リクエストのデフォルトの優先度は、そのリクエストの送信先となるサービスによって決まります。このデフォルトの設定は、管理時に指定してもよいですし(「UBBCONFIG(5)」を参照)、システムの省略時値50を使用してもかまいません。TPSPRIO()は、TPCONNECT()またはTPSEND()を介して送られるメッセージには影響しません。

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

TPABSOLUTE

次のリクエストの優先度は、PRIORITYの絶対値で送信されます。PRIORITYの絶対値は1から100までの範囲内の数値とします(最も高い優先度は100です)。この範囲外の値を指定すると、デフォルトの値が使用されます。

TPRELATIVE

次のリクエストの優先度は、PRIORITYの相対値で送信されます。

戻り値

TPSPRIO()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPSPRIO()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

TPPRIDEF-RECの設定が無効です。

[TPEPROTO]

TPSPRIO()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPACALL(3cbl)TPCALL(3cbl)TPDEQUEUE(3cbl)TPENQUEUE(3cbl)TPGPRIO(3cbl)

 


TPSUBSCRIBE(3cbl)

名前

TPSUBSCRIBE() - イベントのサブスクライブ

形式

01 TPEVTDEF-REC.
COPY TPEVTDEF.

01
TPQUEDEF-REC.
COPY TPQUEDEF.

01
TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPSUBSCRIBE" USING
TPEVTDEF-REC TPQUEDEF-REC TPSTATUS-REC.

説明

呼出し側は、TPEVTDEF-RECEVENT-EXPRで指定されたイベントまたはイベント・セットをサブスクライブする際にTPSUBSCRIBE()を使用します。サブスクリプションはOracle Tuxedoのイベント・ブローカ、TMUSREVT()によって管理され、イベントがTPPOST()を介して通知されるときサブスクライバに知らせるために使用されます。それぞれのサブスクリプションには、通知メソッドを指定します。通知メソッドは、クライアント通知、サービス呼び出し、または安定ストレージ内のキューへのメッセージ登録の3つの内いずれかの形式をとります。通知方法は、サブスクライバのプロセス・タイプおよびTPEVTDEF-RECTPEV-METHOD-FLAGによって決定されます。

サブスクライブするイベントまたはイベント・セットの名前は、正規表現、つまりTPEVTDEF-RECEVENT-EXPRによって指定されますが、EVENT-EXPRフィールドがSPACESであってはなりません。正規表現は、tpsubscribe(3c)で指定される形式です。たとえば、EVENT-EXPR"¥e¥e..*"のとき、呼出し側はシステムが生成したすべてのイベントをサブスクライブし、EVENT-EXPR"¥e¥e.SysServer.*"であれば、システムが生成したサーバー関連のイベントをサブスクライブします。また、EVENT-EXPR"[A-Z].*"であれば、呼出し側はアルファベットのAからZの文字で始まるすべてのユーザー・イベントをサブスクライブし、EVENT-EXPR".*(ERR|err).*"であれば、"ERR"または"err"という文字列を含むすべてのユーザー・イベントをサブスクライブします。たとえば、"account_error"や"ERROR_STATE"というイベントはどちらもその対象となります。

TPEVTDEF-RECEVENT-FILTERは、論理型フィルタ規則を含む文字列で、イベント・ブローカがイベントを通知する前に、有効であることが評価されなければなりません。ポストするイベントを受け取ると、EventBrokerはそのイベントのデータにフィルタ規則(存在する場合)を適用します。データがフィルタ・ルールのチェックにパスした場合、イベント・ブローカは通知メソッドを呼び出します。データがフィルタ・ルールを通過しない場合は、イベント・ブローカは対応する通知メソッドを呼び出しません。呼出し側は、異なるフィルタ・ルールを利用して同じイベントを何度でもサブスクライブすることができます。

フィルタ・ルールは、フィルタ・ルールの適用対象となる型付きレコードによって異なります。FMLレコードやVIEWレコードの場合、フィルタ規則は文字列であり、それぞれの論理式コンパイラに渡すことができ(「Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)」を参照)、通知されるレコードに対して評価されます(「Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)」を参照)。STRINGレコードの場合、フィルタ規則はtpsubscribe(3c)で指定される形式の正規表現です。その他のタイプのレコードについては、それぞれカスタマイズされた独自のフィルタ評価機構が必要になります(カスタマイズされたフィルタ評価機構の追加に関しては、「buffer(3c)」および「typesw(5)」を参照)。EVENT-EXPRに該当するフィルタ・ルールが存在しない場合は、EVENT-FILTERSPACESにセットする必要があります。

サブスクライバがOracle Tuxedo ATMIのクライアント・プロセスであり、TPEVTDEF-RECTPEVNOTIFYが設定されている場合、サブスクライブしたイベントが通知されると、イベント・ブローカはサブスクライバに非請求メッセージを送出します。つまり、EVENT-EXPRに対して有効であると評価されるイベント名が通知されると、イベント・ブローカは、EVENT-EXPRに関連するフィルタ規則を使用して、通知されるデータをチェックします。データがフィルタ・ルールによるチェックにパスした場合、あるいはそのイベントに対して適用すべきフィルタ・ルールが存在しない場合は、サブスクライバはイベントとそのデータ、および非請求メッセージを受け取ることになります。非請求メッセージを受け取るためには、クライアントは非請求処理ルーチンを(TPSETUNSOL()を利用して)登録しておく必要があります。Oracle Tuxedo ATMIのサーバー・プロセスがTPEVNOTIFYを設定してTPSUBSCRIBE()を呼び出すと、TPSUBSCRIBE()は失敗し、TPSTATUS-RECTP-STATUSに[TPEPROTO]が設定されます。

非請求メッセージを介してイベント通知を受け取るクライアントは、終了する前に、イベント・ブローカのアクティブなサブスクリプションのリストから、それぞれのサブスクリプションを削除する必要があります(詳細は「TPUNSUBSCRIBE()」を参照)。クライアントは、TPUNSUBSCRIB()のワイルドカード・ハンドル、-1を使用することにより、非請求通知メソッドに関連するサブスクリプションを含むあらゆる「非永続的」サブスクリプションを削除することができます。プロセス終了後も存続するサブスクリプションおよびそれらに関連する通知メソッドについては、以下のTPEVPERSISTの説明を参照してください。クライアントが非持続型のサブスクリプションを削除せずに終了した場合は、イベント・ブローカはクライアントにアクセスできなくなったことを検出すると、そのクライアントのサブスクリプションを削除します。

TPEVNOTIFYが設定される場合は、TPEVNOTRANTPEVNOPERSISTも設定される必要があります。そうでない場合、TPSUBSCRIBE()は異常終了し、TP-STATUSに[TPEINVAL]が設定されます。つまり、非請求の通知メソッドを持つクライアントによるサブスクリプションは、トランザクション・モードにも持続型にもなりません。

サブスクライバ(プロセスのタイプとは無関係)がTPEVTDEF-RECTPEVSERVICE()を設定すると、イベント通知はTPEVTDEF-RECNAME-1で指定されたOracle Tuxedo ATMIのサービス・ルーチンに送信されます。つまり、EVENT-EXPRに対して有効であると評価されるイベント名が通知されると、イベント・ブローカは、EVENT-EXPRに関連するフィルタ規則を使用して、通知されるデータをチェックします。データがフィルタ・ルールによるチェックにパスした場合、あるいはそのイベントに適用すべきフィルタ・ルールが存在しない場合は、サービス・リクエストはそのイベントに付随するデータとともにNAME-1に渡されます。NAME-1にはOracle Tuxedo ATMIの有効なあらゆるサービス名をセットすることができ、また、サブスクリプションが行われた時点でアクティブであってもアクティブでなくてもかまいません。イベント・ブローカによって呼び出されたサービス・ルーチンは、応答データなしで戻ります。つまり、これらのサービス・ルーチンは、TPRETURN()を呼び出す際にはTPTYPE-RECREC-TYPEをSPACESに設定する必要があります。TPRETURN()に渡されるデータは、すべて切り捨てられます。

TPEVTDEF-RECTPEVTRANも設定され、TPPOST()を呼び出すプロセスがトランザクション・モードの場合、イベント・ブローカは、サブスクライブされるサービス・ルーチンをポスト元のトランザクションの一部として呼び出します。イベント・ブローカTMUSREVT()とサブスクライブされるサービス・ルーチンは両方とも、トランザクションをサポートするサーバー・グループに属している必要があります(詳細は「UBBCONFIG(5)」を参照)。TPEVNOTRANが設定されている場合、イベント・ブローカは、サブスクライブされるサービス・ルーチンをポスト元のトランザクションとは別に呼び出します。

サブスクライバ(プロセスのタイプは無関係)がTPEVTDEF-RECTPEVQUEUE()を設定すると、イベント通知はTPEVTDEF-RECNAME-1で指定されたキュー・スペースの、TPEVTDEF-RECNAME-2で指定されたキューに登録されます。つまり、EVENT-EXPRに対して有効であると評価されるイベント名が通知されると、イベント・ブローカは、EVENT-EXPRに関連するフィルタ規則を使用して、通知されるデータをチェックします。データがフィルタ規則によるチェックにパスした場合、あるいはそのイベントに適用すべきフィルタ規則が存在しない場合、イベント・ブローカは、イベントとともに通知されるあらゆるデータとメッセージを、NAME-1で指定されたキュー・スペースのNAME-2で指定されたキューに登録します。キュー・スペースとキューは、Oracle Tuxedo ATMIで使用できるあらゆるキュー・スペースおよびキューを指定でき、どちらもサブスクリプションの時点で存在していても存在していなくてもかまいません。

TPQUEDEF-RECには、通知されるイベントをイベント・ブローカがキューに登録する際の手順をさらに詳しく指示するためのオプションを含めることができます。呼出し側で指定すべきオプションがない場合は、TPQUEDEF-RECLOW-VALUEに設定します。一方、指定すべきオプションがある場合は、TPENQUEUE()の項の「制御パラメータ」のセクションで説明した方法でオプションを指定します(特にTPENQUEUE()の入力データ制御の有効なフラグ設定について説明した箇所を参照のこと)。

TPEVTDEF-RECTPEVTRANも設定され、TPPOST()を呼び出すプロセスがトランザクション・モードの場合、イベント・ブローカは、通知されるイベントとそのデータをポスト元のトランザクションの一部としてキューに登録します。イベント・ブローカTMUSREVT()は、トランザクションをサポートするサーバー・グループに属している必要があります(詳細は「UBBCONFIG(5)」を参照)。TPEVNOTRANが設定されている場合、イベント・ブローカは、通知されるイベントとそのデータをポスト元のトランザクションとは別にキューに登録します。

デフォルトでは、Oracle Tuxedoのイベント・ブローカは、通知先のリソースが使用不可能である場合はサブスクリプションを削除します。たとえば、イベントのサブスクリプションに関連するサービス・ルーチン、またはキュー・スペースとキューにイベント・ブローカがアクセスできない場合などです。TPEVTDEF-RECTPEVPERSISTは、サブスクライバがこのようなエラーに遭遇したあとも(将来リソースが再度使用可能になった場合に備えて)引き続きサブスクリプションを維持したい場合にセットします。永続的なサブスクリプションは、TPEVSERVICE()およびTPEVQUEUE()の通知メソッドでしか利用できません。TPEVNOTIFYが設定されるときにTPEVPERSISTを使用することはできません。使用した場合、関数は異常終了し、TP-STATUSに[TPEINVAL]が設定されます。TPEVNOPERSISTを設定した場合、サブスクリプションで指定されたクライアント、サービス名、またはキュー・スペースとキュー名にアクセスする際にエラーが発生すると、イベント・ブローカはこのサブスクリプションを削除します。

TPEVPERSISTTPEVTRANがともに設定されて、イベント通知時にリソースが使用できなかった場合、イベント・ブローカはポスト元に戻り、トランザクションが中断されるようにします。つまり、サブスクリプションが保持されている場合でも、リソースが使用できなければポスト元のトランザクションは失敗します。

TPSUBSCRIBE()でリクエストされるサブスクリプションと一致するものがイベント・ブローカのアクティブなサブスクリプションのリストにすでに存在する場合、関数は失敗し、TP-STATUSに[TPEMATCH]が設定されます。サブスクリプションが既存のサブスクリプションと一致すると判断されるには、EVENT-EXPREVENT-FILTERの両方が、イベント・ブローカのアクティブなサブスクリプションのリストにすでに存在するサブスクリプションのものと一致することが条件です。また、通知メソッドによっては、サブスクリプションの一致を判断する際にこれ以外の基準も使用されます。

TPEVNOTIFYが設定されていると、呼出し側のCLIENTID (システムが定義したクライアント識別子)もサブスクリプションの一致を検出する際の判断材料に加えられます。つまり、EVENT-EXPREVENT-FILTER、および呼出し側のCLIENTIDがイベント・ブローカのリストにすでに存在するサブスクリプションのデータと一致する場合、TPSUBSCRIBE()は失敗します。

TPEVSERVICE()が設定されている場合は、EVENT-EXPREVENT-FILTER、およびNAME-1で指定されるサービス名がイベント・ブローカのリストにすでに存在するサブスクリプションのそれと一致すると、TPSUBSCRIBE()は異常終了します。

TPEVQUEUE()が設定されている場合は、イベント・ブローカはサブスクリプションの一致を判断する際に、EVENT-EXPREVENT-FILTERのほか、キュー・スペース、キュー名、および相関識別子を使用します。相関識別子を利用することにより、同じ送信先の、同じイベント式やフィルタ・ルールに対する複数のサブスクリプションを区別することができます。したがって、呼出し側がTPEVQUEUE()TPQNOCOORID()の両方を設定した場合は、EVENT-EXPREVENT-FILTERNAME-1で指定されるキュー・スペースの名前、およびNAME-2で指定されるキューの名前が、イベント・ブローカのリストにすでに存在するサブスクリプション(相関識別子は指定されていない)のデータと一致すると、TPSUBSCRIBE()は失敗します。さらに、TPQCOORID()が設定されている場合、EVENT-EXPREVENT-FILTERNAME-1NAME-2、およびTPQUEDEF-RECCORRIDがイベント・ブローカのリストにすでに存在するサブスクリプション(同じ相関識別子を持つ)のデータと一致すると、TPSUBSCRIBE()は失敗します。

次に、TPEVTDEF-RECの設定の一覧を示します。

TPNOBLOCK

ブロッキング条件が存在する場合は、サブスクリプションは行なわれません。このような条件が発生すると、呼出しは失敗し、TP-STATUSは[TPEBLOCK]に設定されます。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

ルーチン内部のシステム・コールがシグナルによって中断された場合、そのシステム・コールは再度実行されることはなく、呼出しは異常終了し、TP-STATUSは[TPGOTSIG]にセットされます。TPNOSIGRSTRTまたはTPSIGRSTRTのいずれかが設定されていなければなりません。

戻り値

TPSUBSCRIBE()は正常終了時には、TP-STATUSに[TPOK]を設定します。また、TPSUBSCRIBE()は、TPEVTDEF-RECSUBSCRIPTION-HANDLEにこのサブスクリプションのハンドルを設定します。SUBSCRIPTION-HANDLEは、イベント・ブローカのアクティブなサブスクリプションのリストからこのサブスクリプションを削除するためにTPUNSUBSCRIBE()を呼び出す際に利用できます。サブスクライバやその他のプロセスは、いずれも戻されたハンドルを利用してこのサブスクリプションを削除することができます。

エラー

次の条件が発生すると、TPSUBSCRIBE()は異常終了し、TP-STATUSに次のいずれかの値を設定します(特に記述した場合を除いては、エラーが呼出し側のトランザクションに影響を及ぼすことはありません)。

[TPEINVAL]

無効な引数が渡されました(EVENT-EXPRSPACESである場合など)。

[TPENOENT]

Oracle Tuxedoイベント・ブローカにアクセスできません。

[TPELIMIT]

イベント・ブローカの最大サブスクリプション数に達したため、サブスクリプションが失敗しました。

[TPEMATCH]

イベント・ブローカのリストにすでに存在するサブスクリプションと一致するため、サブスクリプションが異常終了しました。

[TPEPERM]

クライアントはtpsysadmとしてアタッチされず、サブスクリプションのアクションは、サービスの呼出しか、メッセージのキューへの登録になります。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPSUBSCRIBE()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 トランザクションATMI呼出しがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPEBLOCK]

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

[TPGOTSIG]

シグナルが受信され、TPNOSIGRSTRTがセットされました。

[TPEPROTO]

TPSUBSCRIBE()が不正なコンテキストで呼ばれました。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

buffer(3c)tpsubscribe(3c)TPENQUEUE(3cbl)TPPOST(3cbl)TPSETUNSOL(3cbl)TPUNSUBSCRIBE(3cbl)Fboolco、Fboolco32、Fvboolco、Fvboolco32(3fml)Fboolev、Fboolev32、Fvboolev、Fvboolev32(3fml)EVENTS(5)EVENT_MIB(5)TMSYSEVT(5)TMUSREVT(5)tuxtypes(5)typesw(5)UBBCONFIG(5)

 


TPSUSPEND(3cbl)

名前

TPSUSPEND() - グローバル・トランザクションの一時停止

形式

01 TPTRXDEF-REC.
COPY TPTRXDEF.

01 TPSTATUS-REC.
COPY TPSTATUS.

CALL "TPSUSPEND" USING TPTRXDEF-REC TPSTATUS-REC.

説明

TPSUSPEND()は、呼出し側のプログラムでアクティブなトランザクションを一時停止するために使用されます。TPBEGIN()で始めたトランザクションは、TPSUSPEND()で一時停止できます。中断しているプログラム、あるいはその他のプログラムは、中断しているトランザクション上でTPRESUME()を利用して作業を再開することができます。TPSUSPEND()が復帰すると、呼出し側はトランザクション・モードではなくなります。ただし、トランザクションが中断されている間は、そのトランザクションに関係のあるリソース(データベース・ロックなど)はすべてアクティブな状態に保たれます。アクティブなトランザクションと同様、中断されたトランザクションにもトランザクションを最初にスタートする際に割り当てたトランザクション・タイムアウトの値が適用されます。

トランザクションを別のプロセスで再開するには、TPSUSPEND()の呼出し側が明示的にTPBEGIN()を呼び出すことによってトランザクションを起動している必要があります。TPSUSPEND()は、トランザクションの開始元以外のプロセスから呼び出すこともできます(たとえば、トランザクション・モードでリクエストを受信するサーバーなど)。後者の場合、TPSUSPEND()の呼出し側のみTPRESUME()を呼び出してトランザクションを再開することができます。このような方法が認められているのは、プロセスがトランザクションのスタートを一時中断し、そのトランザクションを終了する前に別のトランザクションをスタートさせ、作業を行えるようにするためです(エラーを記録するトランザクションを実行してから最初のトランザクションをロールバックする場合など)。

TPSUSPEND()は、一時停止するトランザクションの識別子をTRANIDに設定します。

正常終了するためには、呼出し側はTPSUSPEND()を実行する前に、サーバーとの未終了のコミュニケーションをすべて完了していなければなりません。つまり、呼出し側は、呼出し側のトランザクションに関連のあるTPACALL()で送出したリクエストに対する応答を、すべて受け取っていなければなりません。また、呼出し側では、呼出し側のトランザクションに関連のある会話サービスとの接続をすべてクローズしておくことも必要です(つまり、TPRECV()はTPEV-SVCSUCCイベントを戻していなければなりません)。いずれかの規則に従わない場合、TPSUSPEND()は失敗し、呼出し側の現在のトランザクションは一時停止せず、トランザクション通信ハンドルはすべて有効なままです。呼出し側のトランザクションとは関連のない通信ハンドルは、TPSUSPEND()の結果に関係なく、有効なままです。

戻り値

TPSUSPEND()は正常終了時には、[TPOK]を設定します。

エラー

次の条件が発生すると、TPSUSPEND()は異常終了し、TP-STATUSに次の値を設定します。

[TPEABORT]

呼出し側のアクティブなトランザクションが中断されました。トランザクションに関連するすべての通信ハンドルは、もはや有効ではありません。

[TPEPROTO]

TPSUSPEND()が不正なコンテキストで呼ばれました(たとえば、呼出し側がトランザクション・モードではない場合)。トランザクション・モードに関する呼出し側の状態は変更されません。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPACALL(3cbl)TPBEGIN(3cbl)TPRECV(3cbl)TPRESUME(3cbl)

 


TPSVCSTART(3cbl)

名前

TPSVCSTART() - Oracle Tuxedo ATMIのサービスの開始

形式

01 TPSVCDEF-REC.
COPY TPSVCDEF.

01
TPTYPE-REC.
COPY TPTYPE.

01
DATA-REC.
COPY User data.

01
TPSTATUS-REC.
COPY TPSTATUS.

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

説明

TPSVCSTART()は、サービス・ルーチンをコーディングする際に最初に呼び出すOracle Tuxedo ATMIのルーチンです。実際、サービス・ルーチン内でTPSVCSTART()より先にほかの呼出しを行うと、エラーになります。TPVCSTART()は、サービスのパラメータおよびデータを取り出すために使用されます。このルーチンは、ルーチンTPCALL()またはTPACALL()を介してリクエストを受け取るサービス、およびルーチンTPCONNECT()TPSEND()およびTPRECV()を介して通信を行う会話サービスの両方に使用できます。

ルーチンTPCALL()TPACALL()またはTPFORWAR()によるリクエストを処理するサービス・ルーチンは、最大1つの着信メッセージを受け取り(TPSVCSTARTが正常に終了したとき)、最大1つの応答を送ります(TPRETURN()によってサービス・ルーチンを終了したとき)。

一方、会話サービスは、最大1つの着信メッセージとオープン接続の参照手段とともに、接続リクエストにより呼び出されます。TPSVCSTART()が正常終了すると、接続元プログラムあるいは会話型サービスはアプリケーション側で定義されたようにデータの送信および受信を行うことができます。この接続は半二重方式で確立されます。つまり、接続の一方の側は、他方から明示的に制御を渡されるまで、会話を制御することはできません(データを送信できません)。

トランザクションとの関連で言えば、サービス・ルーチンはトランザクション・モードで呼び出されると、1つのトランザクションにしか参加できません。サービス・ルーチン作成者側から見るかぎり、トランザクションはサービス・ルーチンから戻った時点で終了します。サービス・ルーチンは、トランザクション・モードで呼び出されなかった場合、TPBEGIN()TPCOMMIT()およびTPABORT()を使用して必要な回数だけトランザクションを起動できます。ただし、トランザクションの終了にはTPRETURN()を使用しません。したがって、サービス・ルーチン内から起動された未終了のトランザクションについて、TPRETURN()を呼び出すと、エラーになります。

DATA-RECは、サービスのデータが読み込まれる場所を指定し、TPTYPE-REC内のLENは、DATA-RECに移動される最大バイト数を示します。TPSVCSTARTの正常終了時には、DATA-RECに移動された実際のバイト数がLENに入ります。TPTYPE-REC内のREC-TYPEおよびSUB-TYPEにはそれぞれデータのタイプおよびサブタイプが入ります。メッセージがDATA-RECより大きい場合は、DATA-RECにはこのレコードに入るバイト数分のみが入ります。メッセージの残りは破棄され、TPSVCSTART()TPTRUNCATE()を設定します。

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

正常終了時には、TPSVCDEF-REC内のSERVICE-NAMEは、リクエスト元のプログラムがサービスの起動に使用したサービス名が入ります。

TPSVCSTART()の終了時のTPSVCDEF-REC設定は、次のようになります。

TPREQRSP

サービスは、TPCALL()またはTPACALL()を使用して起動されました。この設定は、TPCONVと相互に排他的です。

TPCONV

サービスは、TPCONNECT()を使用して起動されました。この会話用の通信ハンドルは、TPSVCDEF-REC内のCOMM-HANDLEに入っています。この設定は、TPREQRSPと相互に排他的です。

TPNOTRAN

サービス・ルーチンはトランザクション・モードにありません。この設定は、TPTRANと相互に排他的です。

TPTRAN

サービス・ルーチンはトランザクション・モードにあります。この設定は、TPNOTRANと相互に排他的です。

TPNOREPLY

サービス・ルーチンの呼出し側プログラムは応答を期待していません。この設定は、TPREQRSPが設定されている場合のみ有効です。この設定は、TPREPLYと相互に排他的です。

TPREPLY

サービス・ルーチンの呼出し側プログラムは応答を期待しています。この設定は、TPREQRSPが設定されている場合のみ有効です。この設定は、TPNOREPLYと相互に排他的です。

TPSENDONLY

サービスは、接続を介してのデータの送信のみ可能で、接続の他方の側のプログラムはデータの受信しかできないよう呼び出されます。この設定は、TPCONVが設定されている場合のみ有効です。この設定は、TPRECVONLYと相互に排他的です。

TPRECVONLY

サービスは、接続を介してのデータの受信のみ可能で、接続の他方の側のプログラムはデータの送信しかできないよう呼び出されます。この設定は、TPCONVが設定されている場合のみ有効です。この設定は、TPSENDONLYと相互に排他的です。

TPSVCDEF-REC内のAPPKEYは、アプリケーション側で定義した認証サービスがリクエスト・クライアント・プログラムに割り当てるアプリケーション・キーに設定します。このキー値は、このサービス・ルーチンの今回の呼出し中になされたあらゆるサービス・リクエストとともに渡されます。アプリケーション認証サービスを通らないクライアントを起動する場合には、APPKEYの値は-1になります。このようなクライアントには、保護アプリケーションとの相互運用性を有する以前のリリース・レベルのクライアントがあります。

戻り値

TPSVCSTART()は正常終了時には、TP-STATUSに[TPOK]を設定します。着信メッセージの大きさが入力時にLENに指定されたより大きい場合、TPTRUNCATE()が設定され、LEN分のデータのみがDATA-RECに移動されて残りのデータは破棄されます。

エラー

次の条件が発生すると、TPSVCSTART()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

無効な引数が指定されました。

[TPEPROTO]

TPSVCSTART()が不正なコンテキストで呼ばれました。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

buildserver(1)TPBEGIN(3cbl)TPCALL(3cbl)TPCONNECT(3cbl)TPINITIALIZE(3cbl)TPOPEN(3cbl)TPSVRDONE(3cbl)TPSVRINIT(3cbl)

 


TPSVRDONE(3cbl)

名前

TPSVRDONE() - Oracle Tuxedo ATMIのサーバー終了ルーチン

形式

01 TPSTATUS-REC.
COPY TPSTATUS.
PROCEDURE DIVISION.
* User code
EXIT PROGRAM.

説明

Oracle Tuxedo ATMIのサーバー用ルーチンは、サービス・リクエストの処理完了後、ルーチンを終了する前にTPSVRDONE()を呼び出します。このルーチンを呼び出した時点では、サーバーはまだシステムの一部のままですが、それ独自のサービスは宣言から外されています。このため、このルーチンで、Oracle Tuxedo ATMIのコミュニケーションを実行してトランザクションを定義できます。ただし、オープンされたままの接続がある場合、保留中の非同期応答がある場合、あるいはまだトランザクション・モードにある場合にTPSVRDONE()が終了すると、Oracle Tuxedoシステムはその接続をクローズし、保留中の応答を無視し、トランザクションをロールバックします。

アプリケーションがサーバーにこのルーチンを提供していない場合、Oracle Tuxedoシステムが提供するデフォルトのバージョンがかわりに呼び出されます。デフォルトのTPSVRDONE()TPCLOSE()USERLOG()を呼び出し、サーバーが終了することを通知します。

使用方法

TPRETURN()またはTPFORWAR()TPSVRDONE()において呼び出されても、これらのルーチンは何も影響を及ぼさず終了するだけです。

関連項目

TPCLOSE(3cbl)TPSVRINIT(3cbl)

 


TPSVRINIT(3cbl)

名前

TPSVRINIT() - Oracle Tuxedo ATMIのサーバー初期化ルーチン

形式

LINKAGE SECTION. 

01
CMD-LINE.
05 ARGC PIC 9(4) COMP-5.
05 ARGV.
10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC
.
01
TPSTATUS-REC.
COPY TPSTATUS.
PROCEDURE DIVISION USING
CMD-LINE TPSTATUS-REC.
* User code
EXIT PROGRAM

説明

Oracle Tuxedo ATMIのサーバー用ルーチンは、その初期化処理中にTPSVRINIT()を呼び出します。このルーチンは、プログラムがサーバーになった後で、サービス・リクエストを処理する前に呼び出されます。このため、Oracle Tuxedo ATMIのコミュニケーションの実行とトランザクションの定義をこのルーチンで行うことができます。ただし、接続がオープン状態にあるとき、保留中の非同期応答があるとき、あるいはまだトランザクション・モードにあるときにTPSVRINIT()が戻った場合、Oracle Tuxedoシステムは接続をクローズし、保留中の応答を無視し、トランザクションを中途終了させます。

アプリケーションがサーバーにこのルーチンを提供していない場合、Oracle Tuxedoシステムが提供するデフォルトのバージョンがかわりに呼び出されます。デフォルトのTPSVRINIT()は、TPOPEN()USERLOG()を呼び出して、サーバーが正常に起動されたことを通知します。

アプリケーション固有のオプションをサーバーに渡し、TPSVRINIT()で処理させることができます(詳細は、「servopts(5)」を参照)。このオプションはARGCARGVを使用して渡します。ARGCには、渡された引数の数が入り、ARGVには引数が入ります。引数は文字形式で指定し、引数が複数ある場合は1つのスペースで区切ります。getopt()がOracle Tuxedoシステムでは使用されます。

TPSVRINIT()が正常終了すると、TP-STATUSに[TPOK]が返され、サービスはリクエストの受け付けを開始できるようになります。TPSVRINITでエラーが生じた場合、アプリケーションからTP-STATUSに[TPOK]以外の値を返して(サービス・リクエストをとらずに)正常にサーバーを終了させることができます。

TPSVRINIT()が[TPOK]以外の値を返した場合、サーバーはシステムによって再起動されません。かわりに、管理者がtmbootを実行してサーバーを再起動する必要があります。

戻り値

TPRETURN()またはTPFORWAR()がサービス・ルーチンとは別に(たとえば、クライアント、TPSVRINIT()TPSVRDONE()などから)使用されても、ルーチンは何も影響を及ぼさず終了します。

使用方法

TPRETURN()またはTPFORWAR()ルーチンがTPSVRINIT()で呼び出されても、これらは何も影響を及ぼさずに終了します。

関連項目

TPOPEN(3cbl)TPSVRDONE(3cbl)

 


TPTERM(3cbl)

名前

TPTERM() - アプリケーションを抜け出る

形式

01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPTERM" USING
TPSTATUS-REC.

説明

TPTERM()は、Oracle Tuxedo ATMIアプリケーションからクライアントを削除します。クライアントがトランザクション・モードであると、トランザクションはロールバックされます。TPTERM()が正常に終了すると、呼出し側はOracle Tuxedoクライアント操作を実行できません。未終了の会話はただちに切断されます。

TPTERM()を2回以上呼び出した場合(つまり、呼出し側がアプリケーションから抜け出た後でTPTERM()を呼び出した場合)、処理は何も行われず、正常終了を示す値が返されます。

マルチコンテキストに関する留意事項

TPTERM()が呼び出されると、プログラムはTPNULLCONTEXTコンテキストに置かれます。TPNULLCONTEXTコンテキストのプログラムによって呼び出されるATMI関数のほとんどは、暗黙的TPINITIALIZE()を実行します。TPINITIALIZE()の呼出しが正常終了するかどうかは、通常の決定要因に依存し、コンテキスト固有の事柄とは無関係です。

戻り値

TPTERM()は正常終了時には、TP-STATUSに[TPOK]を設定します。マルチコンテキストのアプリケーションで正常終了すると、アプリケーションの現在のコンテキストはTPNULLCONTEXTに変更されます。その後、TPSETCTXT()を使用してコンテキストをリクエストに応じて変更するのは、ユーザーの責任になります。

異常終了時には、TPTERM()は -1を返し、TP-STATUSにエラー条件を示す値を設定します。

エラー

TPTERM()は異常終了時には、TP-STATUSを次のいずれかの値に設定します。

[TPEPROTO]

TPTERM()が不正なコンテキストで呼び出されました(たとえば、呼出し側がサーバーである場合)。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPINITIALIZE(3cbl)

 


TPUNADVERTISE(3cbl)

名前

TPUNADVERTISE() - サービス名の公開を取り消すルーチン

形式

01 SVC-NAME PIC X(127). 
01
TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPUNADVERTISE" USING
SVC-NAME TPSTATUS-REC.

説明

TPUNADVERTISE()を使用すると、サーバーは、公開したサービスの公開解除を行うことができます。デフォルトの設定では、サーバーのサービスは、サーバーのブート時に公開され、サーバーの停止時にその公開が解除されます。

複数サーバー単一キュー(MSSQ)セットに属するすべてのサーバーは、同じサービス・セットを提供しなければなりません。これらのルーチンは、MSSQセットを共有する全サーバーを公開することによってこの規則を適用します。

TPUNADVERTISE()は、該当サーバー(または、呼出し側のMSSQセットを共有するサーバー・セット)に対して宣言されたサービスとしてSVC-NAMEを削除します。SVC-NAMESPACESを使用することはできません。また、SVC-NAMEは127文字以下で指定する必要があります。(「UBBCONFIG(5)」SERVICESの項を参照)。これ以上の長さの名前でも受け付けられますが、127文字に切り詰められます。このため、切り詰められた名前が他のサービス名と同じにならないよう、注意が必要です。

戻り値

TPUNADVERTISE()は正常終了時には、TP-STATUSに[TPOK]を設定します。

エラー

次の条件が発生すると、TPUNADVERTISE()は異常終了し、TP-STATUSに次の値を設定します。

[TPEINVAL]

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

[TPENOENT]

SVC-NAMEがサーバーによって公開されていない場合。

[TPEPROTO]

TPUNADVERTISE()が不正なコンテキストで(たとえば、クライアントによって)呼び出された場合。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPADVERTISE(3cbl)

 


TPUNSUBSCRIBE(3cbl)

名前

TPUNSUBSCRIBE() - イベントのサブスクリプションの削除

形式

01 TPEVTDEF-REC.
COPY TPEVTDEF.
01
TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPUNSUBSCRIBE" USING
TPEVTDEF-REC TPSTATUS-REC.

説明

呼出し側はTPUNSUBSCRIBE()を使用して、Oracle Tuxedoのイベント・ブローカのアクティブなサブスクリプションのリストから、イベントのサブスクリプションまたはイベント・サブスクリプションのセットを削除します。TPEVTDEF-RECSUBSCRIPTION-HANDLEは、TPSUBSCRIBE()から戻されたイベントのサブスクリプション・ハンドルです。SUBSCRIPTION-HANDLEをワイルドカード値-1に設定すると、呼出し側プロセスが以前に行った非永続的サブスクリプションをすべて削除するようTPUNSUBSCRIBE()に指示されます。非持続タイプのサブスクリプションとは、TPSUBSCRIBE()を呼び出す際にTPEVNOPERSISTを設定した状態で行ったサブスクリプションを指します。持続タイプのサブスクリプションは、TPSUBSCRIBE()から戻されたハンドルを使用することによってのみ削除できます。

「-1」ハンドルでは、呼出し側の直前のインスタンスによってなされたサブスクリプションではなく、この機能を呼び出しているプロセスによってなされたサブスクリプションだけが削除される点に注意する必要があります(たとえば、いったんダウンして再起動したサーバーは、最初のサーバーによってなされたサブスクリプションをワイルドカードを利用して削除することはできません)。

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

TPNOBLOCK

ブロッキング条件が存在する場合は、サブスクリプションは削除されません。このような条件が発生すると、呼出しは失敗し、TP-STATUSは[TPEBLOCK]に設定されます。TPNOBLOCKまたはTPBLOCKのいずれかが設定されていなければなりません。

TPBLOCK

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

TPNOTIME

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

TPTIME

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

TPSIGRSTRT

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

TPNOSIGRSTRT

ルーチン内部のシステム・コールがシグナルによって中断された場合、そのシステム・コールは再度実行されることはなく、呼出しは異常終了し、TP-STATUSは[TPGOTSIG]にセットされます。TPNOSIGRSTRTまたはTPSIGRSTRTのいずれかが設定されていなければなりません。

戻り値

TPUNSUBSCRIBE()は正常終了時には、TP-STATUSに[TPOK]を設定します。また、TPUNSUBSCRIBE()は、TPEVTDEF-RECEVENT-COUNTに、イベント・ブローカのアクティブなサブスクリプションのリストから削除したサブスクリプションの数(値は0以上)を設定します。EVENT-COUNTに1より大きい値がセットされるのは、ワイルドカードの"-1"というハンドルを使用した場合に限られます。また、EVENT-COUNTには、TPUNSUBSCRIBE()が異常終了した場合でも0より大きい値が設定されることがあります。つまり、ワイルドカード・ハンドルを使用した場合、イベント・ブローカがいくつかのサブスクリプションを正しく削除した後でエラーが発生した可能性があります。

エラー

次の条件が発生すると、TPUNSUBSCRIBE()は異常終了し、TP-STATUSに次のいずれかの値を設定します(特に記述した場合を除いては、エラーが呼出し側のトランザクションに影響を及ぼすことはありません)。

[TPEINVAL]

無効な引数が渡されました(SUBSCRIPTION-HANDLEが無効なサブスクリプション・ハンドルである場合など)。

[TPENOENT]

Oracle Tuxedoイベント・ブローカにアクセスできません。

[TPETIME]

このエラー・コードは、タイムアウトが発生したか、または現在のトランザクションがすでに「ロールバックのみ」とマークされているにもかかわらずTPUNSUBSCRIBE()が試行されたことを示します。
呼出し側がトランザクション・モードの場合、トランザクションはすでにロールバックのみであるか、またはトランザクション・タイムアウトが発生しました。このトランザクションは、「中断のみ」とマークされます。呼出し側がトランザクション・モードでない場合、ブロッキング・タイムアウトが発生しています。(ブロッキング・タイムアウトは、TPBLOCKTPTIMEの両方が指定された場合にのみ発生します。) トランザクション・タイムアウトが発生した場合、トランザクションがアボートされない限り、新しいリクエストの送信や未処理の応答の受信はできず、TPETIMEが発生します。例外は、ブロックされず、応答を期待せず、かつ呼出し側のトランザクションのために送信されないリクエスト(つまり、TPNOTRANTPNOBLOCK、およびTPNOREPLYが設定された状態でTPACALL()が呼び出される場合)です。 トランザクションATMI呼出しがトランザクション内部で失敗すると、そのトランザクションはTX_ROLLBACK_ONLY状態になります。ほとんどの場合、この状態はタイムアウトと同じものとして扱われます。このトランザクションの以降のATMI呼出しは、TPETIMEで異常終了します(前の段落で説明した例外を除く)。

[TPEBLOCK]

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

[TPGOTSIG]

シグナルが受信され、TPNOSIGRSTRTがセットされました。

[TPEPROTO]

TPUNSUBSCRIBE()の呼出し方法が不適切です。

[TPESYSTEM]

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

[TPEOS]

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

関連項目

TPPOST(3cbl)TPSUBSCRIBE(3cbl)EVENTS(5)EVENT_MIB(5), TMSYSEVT(5)TMUSREVT(5)

 


TXBEGIN(3cbl)

名前

TXBEGIN() - グローバル・トランザクションの開始

形式

01 TX-RETURN-STATUS.
COPY TXSTATUS.
CALL "TXBEGIN" USING
TX-RETURN-STATUS.

説明

TXBEGIN()は、呼出し側の制御スレッドをトランザクション・モードにする際に使用します。呼出し側のスレッドは、トランザクションを開始する前に、リンクされているリソース・マネージャが(TXOPEN()を介して)オープンされていることを、まず第1に確実にしなければなりません。呼出し側がすでにトランザクション・モードにある場合、またはTXOPEN()が呼び出されていない場合、TXBEGINは異常終了します(TX-STATUSに値[TX-PROTOCOL-ERROR]が設定されます)。

トランザクション・モードに入ると、呼出し側のスレッドは、現在のトランザクションを完了させるために、TXCOMMIT()またはTXROLLBACK()を呼び出さなければなりません。トランザクションの連鎖に関連する条件によっては、トランザクションを開始する際にTXBEGIN()を明示的に呼び出す必要がないこともあります。詳細はTXCOMMIT()およびTXROLLBACK()を参照してください。戻り値に使用されるレコードは、TX-RETURN-STATUSです。

選択可能なセットアップ

TXSETTIMEOUT()

戻り値

TXBEGIN()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXBEGIN()は異常終了し、次のいずれかの負の値を返します。

[TX-OUTSIDE]

呼出し側の制御スレッドが、1つ以上のリソース・マネージャを利用して、グローバル・トランザクションの外部で現在作業中であるため、トランザクション・マネージャは、グローバル・トランザクションを開始できません。このような作業がすべて完了してからでなければ、グローバル・トランザクションは開始できません。ローカル・トランザクションについての呼出し側の状態は、変更されません。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がすでにトランザクション・モードにある場合)。トランザクション・モードに関する呼出し側の状態は変更されません。

[TX-ERROR]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、新しいトランザクションの開始において一時的エラーを検出しました。このエラーが返された場合は、呼出し側はトランザクション・モードにありません。エラーの正確な性質がログ・ファイルに書き込まれます。

[TX-FAIL]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、致命的エラーを検出しました。このエラーでは、トランザクション・マネージャまたは1つ以上のリソース・マネージャ、あるいはその両方は、アプリケーションのために作業を行うことができなくなります。このエラーが返された場合は、呼出し側はトランザクション・モードにありません。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXCOMMIT(3cbl)TXOPEN(3cbl)TXROLLBACK(3cbl)TXSETTIMEOUT(3cbl)

警告

XA準拠のリソース・マネージャがグローバル・トランザクションに含まれるようにするには、そのリソース・マネージャが正常にオープンされている必要があります(詳細は、TXOPENを参照)。

 


TXCLOSE(3cbl)

名前

TXCLOSE() - リソース・マネージャ・セットのクローズ

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
PROCEDURE DIVISION.
CALL "TXCLOSE" USING
TX-RETURN-STATUS.

説明

TXCLOSE()は、移植性の高い方法でリソース・マネージャ・セットをクローズします。これにより、トランザクション・マネージャが呼び出されて、リソース・マネージャ固有の情報がトランザクション・マネージャ固有の方法で読み取られ、この情報が呼出し側にリンクされているリソース・マネージャに渡されます。

TXCLOSE()は、呼出し側がリンクしているリソース・マネージャをすべてクローズします。この関数は、リソース・マネージャ固有の「クローズ」呼出しのかわりに使用されるので、アプリケーション・プログラムは、移植性を損なう危険性のある呼出しを使用することがなくなります。リソース・マネージャは終了の内容がそれぞれで異なるため、個々のリソース・マネージャを「クローズ」するために必要な情報をリソース・マネージャごとに通知しなければなりません。

TXCLOSE()は、アプリケーションの制御スレッドがグローバル・トランザクションに関与する必要がなくなったときに呼び出す必要があります。呼出し側がトランザクション・モードにあると、TXCLOSE()は失敗します([TX-PROTOCOL-ERROR]が戻されます)。したがって、現在のトランザクションに関与しない制御スレッドがあっても、リソース・マネージャは一切クローズされません。

TXCLOSE()が正常終了すると(TX-OK)、呼出し側のスレッドにリンクしているリソース・マネージャはすべてクローズされます。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

戻り値

TXCLOSE()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXCLOSE()は異常終了し、次のいずれかの負の値を返します。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がトランザクション・モードにある場合)。リソース・マネージャは一切クローズされません。

[TX-ERROR]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、一時的エラーを検出しました。エラーの正確な性質がログ・ファイルに書き込まれます。クローズ可能なリソース・マネージャはすべてクローズされます。

[TX-FAIL]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、致命的エラーを検出しました。このエラーでは、トランザクション・マネージャまたは1つ以上のリソース・マネージャ、あるいはその両方は、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXOPEN(3cbl)

 


TXCOMMIT(3cbl)

名前

TXCOMMIT() - トランザクションのコミット

形式

DATA DIVISION. 
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
PROCEDURE DIVISION.
CALL "TXCOMMIT" USING
TX-RETURN-STATUS.

説明

TXCOMMIT()は、呼出し側の制御スレッドでアクティブなトランザクションの作業をコミットします。

transaction_control特性(TXSETTRANCTL()を参照)がTX-UNCHAINEDの場合、TXCOMMIT()が終了すると、呼出し側はトランザクション・モードでなくなります。一方、transaction_control特性がTX-CHAINEDの場合は、TXCOMMIT()が終了したとき、呼出し側は新しいトランザクションのためにトランザクション・モードのままになります(以下の「戻り値」と「エラー」の項を参照してください)。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

選択可能なセットアップ

戻り値

TXCOMMIT()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXCOMMIT()は異常終了し、次のいずれかの負の値を返します。

[TX-NO-BEGIN]

現在のトランザクションは、正常にコミットされました。ただし、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値は、transaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-ROLLBACK]

現在のトランザクションはコミットできず、ロールバックされました。また、transaction_control特性がTX-CHAINEDである場合には、新しいトランザクションが開始されます。

[TX-ROLLBACK-NO-BEGIN]

現在のトランザクションはコミットできず、ロールバックされました。また、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値はtransaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-MIXED]

トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされました。また、transaction_control特性がTX-CHAINEDである場合には、新しいトランザクションが開始されます。

[TX-MIXED-NO-BEGIN]

トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされました。また、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値はtransaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-HAZARD]

障害が原因で、トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされた可能性があります。また、transaction_control特性がTX-CHAINEDである場合には、新しいトランザクションが開始されます。

[TX-HAZARD-NO-BEGIN]

障害が原因で、トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされた可能性があります。また、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値はtransaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がトランザクション・モードにない場合)。トランザクション・モードについての呼出し側の状態は、変更されません。

[TX-FAIL]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、致命的エラーを検出しました。このエラーでは、トランザクション・マネージャまたは1つ以上のリソース・マネージャ、あるいはその両方は、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。トランザクションについての呼出し側の状態は、不明です。

関連項目

TXBEGIN(3cbl)TXSETCOMMITRET(3cbl)TXSETTIMEOUT(3cbl)TXSETTRANCTL(3cbl)

 


TXINFORM(3cbl)

名前

TXINFORM() - グローバル・トランザクション情報を返す

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
01
TX-INFO-AREA.
COPY TXINFDEF.
PROCEDURE DIVISION.
CALL "TXINFORM" USING
TX-INFO-AREA, TX-RETURN-STATUS.

説明

TXINFORM()は、グローバル・トランザクション情報をTX-INFO-AREAに戻します。また、この関数は、呼出し側が現在トランザクション・モードにあるかどうかを示す値も戻します。

TXINFORM()は、TX-INFO-AREAレコードにグローバル・トランザクション情報を入れます。TX-INFO-AREAレコードの内容はINTRO()で説明しています。

TXINFORMがトランザクション・モードにおいて呼び出されると、TX-IN-TRANが設定され、XID-RECに現在のトランザクションのブランチ識別子が、TRANSACTION-STATEに現在のトランザクションの状態が入ります。呼出し側がトランザクション・モードにない場合は、TX-NOT-IN-TRANが設定され、XID-RECにNULL XIDが入ります(詳細は、TXINTROを参照)。呼出し側がトランザクション・モードにあるかどうかに関係なく、COMMIT-RETURNTRANSACTION-CONTROLおよびTRANSACTION-TIMEOUTcommit_returnおよびtransaction_control特性の現在の設定、および秒単位のトランザクション・タイムアウト値が入ります。

返されるトランザクション・タイムアウト値は、次のトランザクション開始時に使用される設定を反映しています。したがって、この値は、呼出し側の現在のグローバル・トランザクションのタイムアウト値を反映しているわけではありません。現在のトランザクション開始後に行われたTXSETTIMEOUT()の呼出しによって、この値が変更されていることがあるからです。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

戻り値

TXINFORM()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXINFORM()は異常終了し、次のいずれかの負の値を返します。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がまだTXOPEN()を呼び出していない場合)。

[TX-FAIL]

トランザクション・マネージャが致命的エラーを検出しました。このエラーでは、トランザクション・マネージャは、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXOPEN(3cbl)TXSETCOMMITRET(3cbl)TXSETTIMEOUT(3cbl)TXSETTRANCTL(3cbl)

警告

同一のグローバル・トランザクション内では、TXINFORMの後の呼出しは、XIDに同一のgtrid構成要素を指定することが保証されますが、同一のbqual構成要素の指定は必ずしも保証されません。

 


TXOPEN(3cbl)

名前

TXOPEN() - リソース・マネージャ・セットのオープン

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
PROCEDURE DIVISION.
CALL "TXOPEN" USING
TX-RETURN-STATUS.

説明

TXOPEN()は、移植性の高い方法でリソース・マネージャ・セットをオープンします。これにより、トランザクション・マネージャが呼び出されて、リソース・マネージャ固有の情報がトランザクション・マネージャ固有の方法で読み取られ、この情報が呼出し側にリンクされているリソース・マネージャに渡されます。

TXOPEN()はアプリケーションにリンクされているすべてのリソース・マネージャのオープンを試行します。この関数は、リソース・マネージャ固有の「オープン」呼出しのかわりに使用されるので、アプリケーション・プログラムは、移植性を損なう可能性のある呼出しを使用することがなくなります。リソース・マネージャは開始の内容がそれぞれで異なるため、個々のリソース・マネージャを「オープン」するために必要な情報をリソース・マネージャごとに通知しなければなりません。

TXOPEN()TX-ERRORを戻した場合、リソース・マネージャは一切オープンされません。TXOPEN()TX-OKを戻した場合は、リソース・マネージャの一部または全部がオープンされています。オープンされなかったリソース・マネージャは、アプリケーションによってアクセスされるときに、リソース・マネージャ固有のエラーを戻します。TXOPEN()は、制御スレッドがグローバル・トランザクションに関与する前に、正常に終了しなければなりません。

TXOPEN()が正常終了した後で(TXCLOSE()を呼び出す前に)、TXOPENを呼び出すことは可能です。このような後続の呼出しは、正常終了しますが、トランザクション・マネージャは、リソース・マネージャの再オープンは一切行いません。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

戻り値

TXOPEN()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXOPEN()は異常終了し、次のいずれかの負の値を返します。

[TX-ERROR]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、一時的エラーを検出しました。リソース・マネージャは一切オープンされません。エラーの正確な性質がログ・ファイルに書き込まれます。

[TX-FAIL]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、致命的エラーを検出しました。このエラーでは、トランザクション・マネージャまたは1つ以上のリソース・マネージャ、あるいはその両方は、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXCLOSE(3cbl)

 


TXROLLBACK(3cbl)

名前

TXROLLBACK() - トランザクションのロールバック

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
PROCEDURE DIVISION.
CALL "TXROLLBACK" USING
TX-RETURN-STATUS.

説明

TXROLLBACK()は、呼出し側の制御スレッドでアクティブなトランザクションの作業をロールバックします。

transaction_control特性(TXSETTRANCTL()を参照)がTX-UNCHAINEDの場合、TXROLLBACK()が終了すると、呼出し側はトランザクション・モードでなくなります。一方、transaction_control特性がTX-CHAINEDの場合は、TXROLLBACK()が終了したとき、呼出し側は新しいトランザクションのためにトランザクション・モードのままになります(以下の「戻り値」と「エラー」の項を参照してください)。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

選択可能なセットアップ

戻り値

TXROLLBACK()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXROLLBACK()は異常終了し、次のいずれかの負の値を返します。

[TX-NO-BEGIN]

現在のトランザクションはロールバックしました。ただし、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値は、transaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-MIXED]

トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされました。また、transaction_control特性がTX-CHAINEDである場合には、新しいトランザクションが開始されます。

[TX-MIXED-NO-BEGIN]

トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされました。また、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値はtransaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-HAZARD]

障害が原因で、トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされた可能性があります。また、transaction_control特性がTX-CHAINEDである場合には、新しいトランザクションが開始されます。

[TX-HAZARD-NO-BEGIN]

障害が原因で、トランザクションのために行われた作業は、部分的にコミットされ、部分的にロールバックされた可能性があります。また、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値はtransaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-COMMITTED]

トランザクションのために行われた作業は、ヒューリスティックにコミットされました。また、transaction_control特性がTX-CHAINEDである場合には、新しいトランザクションが開始されます。

[TX-COMMITTED-NO-BEGIN]

トランザクションのために行われた作業は、ヒューリスティックにコミットされました。また、新しいトランザクションを開始できなかったので、呼出し側はトランザクション・モードではなくなりました。この戻り値はtransaction_control特性がTX-CHAINEDである場合のみ発生します。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がトランザクション・モードにない場合)。

[TX-FAIL]

トランザクション・マネージャまたは1つ以上のリソース・マネージャが、致命的エラーを検出しました。このエラーでは、トランザクション・マネージャまたは1つ以上のリソース・マネージャ、あるいはその両方は、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。トランザクションについての呼出し側の状態は、不明です。

関連項目

TXBEGIN(3cbl)TXSETTIMEOUT(3cbl)TXSETTRANCTL(3cbl)

 


TXSETCOMMITRET(3cbl)

名前

TXSETCOMMITRET() - commit_return特性の設定

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
*
01
TX-INFO-AREA.
COPY TXINFDEF.
PROCEDURE DIVISION.
CALL "TXSETCOMMITRET" USING
TX-INFO-AREA TX-RETURN-STATUS.

説明

TXSETCOMMITRET()は、COMMIT-RETURNで指定されている値をcommit_return特性に設定します。この特性は、TXCOMMIT()が呼出し側に制御を返す際の動作方法に影響します。TXSETCOMMITRET()は、呼出し側がトランザクション・モードにあるかどうかに関係なく、呼び出すことが可能です。この設定は、TXSETCOMMITRET()がこの後で呼び出されて変更されるまで、有効です。

この特性の初期設定はTX-COMMIT-COMPLETEDです。

COMMIT-RETURNの有効な設定を次に示します。

TX-COMMIT-DECISION-LOGGED

このフラグは、2フェーズ・コミット・プロトコルの第1フェーズによってコミットの決定が記録された後、第2フェーズが終了する前に、TXCOMMIT()が終了することを示します。このフラグを設定すると、TXCOMMIT()の呼出し側に高速で応答することができます。しかし、トランザクションがヒューリスティックな結果を得る危険があります。この場合、TXCOMMIT()の戻りコードから呼出し側がこの状況を知ることはできません。正常な状態では、第1フェーズの間にコミットすることを約束している参加リソースは、第2フェーズでコミットします。ただし、特殊な状況(たとえば、長時間継続するネットワークまたはノードの障害)では、フェーズ2が完了できない可能性があり、ヒューリスティックな結果が生成されることがあります。

TX-COMMIT-COMPLETED

このフラグは、2フェーズ・コミット・プロトコルが完全に終了した後、TXCOMMIT()が終了することを示します。このフラグを設定すると、TXCOMMIT()の呼出し側は、トランザクションがヒューリスティックな結果を得たこと、または得ていた可能性があることを戻りモードから知ることができます。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

戻り値

TXSETCOMMITRET()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXSETCOMMITRET()commit_return特性の設定を変更せずに次のいずれかの負の値を返します。

[TX-EINVAL]

COMMIT-RETURNが、TX-COMMIT-DECISION-LOGGEDTX-COMMIT-COMPLETEDのいずれでもありません。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がまだTXOPEN()を呼び出していない場合)。

[TX-FAIL]

トランザクション・マネージャが致命的エラーを検出しました。このエラーでは、トランザクション・マネージャは、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXBEGIN(3cbl)TXCOMMIT(3cbl)TXINFORM(3cbl)TXOPEN(3cbl)TXROLLBACK(3cbl)

 


TXSETTRANCTL(3cbl)

名前

TXSETTRANCTL() - transaction_control特性の設定

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
01
TX-INFO-AREA.
COPY TXINFDEF.
PROCEDURE DIVISION.
CALL "TXSETTRANCTL" USING
TX-INFO-AREA TX-RETURN-STATUS.

説明

TXSETTRANCTL()は、TRANSACTION-CONTROLで指定されている値をtransaction_control特性に設定します。この特性は、TXCOMMIT()およびTXROLLBACK()が、呼出し側に制御を返す前に新しいトランザクションを開始するかどうかを決定します。TXSETTRANCTL()は、アプリケーション・プログラムがトランザクション・モードであるかどうかに関係なく、呼び出すことができます。この設定は、TXSETTRANCTL()がこの後で呼び出されて変更されるまで、有効です。

この特性の初期設定はTX-UNCHAINEDです。

TRANSACTION-CONTROLの有効な設定を次に示します。

TX-UNCHAINED

このフラグは、TXCOMMIT()およびTXROLLBACK()が、呼出し側に制御を返す前に新しいトランザクションを開始しないことを示します。呼出し側は、新しいトランザクションを開始するには、TXBEGIN()を発行しなければなりません。

TX-CHAINED

このフラグは、TXCOMMIT()およびTXROLLBACK()が、呼出し側に制御を返す前に新しいトランザクションを開始することを示します。 戻り値に使用されるレコードは、TX-RETURN-STATUSです。

戻り値

TXSETTRANCTL()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXSETTRANCTL()transaction_control特性の設定を変更せずに次のいずれかの負の値を返します。

[TX-EINVAL]

TRANSACTION-CONTROLが、TX-UNCHAINEDTX-CHAINEDのいずれでもありません。

[TX-PROTOCOL-ERROR]

この関数が不正なコンテキストで呼び出されました(たとえば、呼出し側がまだTXOPEN()を呼び出していない場合)。

[TX-FAIL]

トランザクション・マネージャが致命的エラーを検出しました。このエラーでは、トランザクション・マネージャは、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXBEGIN(3cbl)TXCOMMIT(3cbl)TXOPEN(3cbl)TXROLLBACK(3cbl)TXINFORM(3cbl)

 


TXSETTIMEOUT(3cbl)

名前

TXSETTIMEOUT() - transaction_timeout特性の設定

形式

DATA DIVISION.
* Include TX definitions.
01
TX-RETURN-STATUS.
COPY TXSTATUS.
*
01
TX-INFO-AREA.
COPY TXINFDEF.
PROCEDURE DIVISION.
CALL "TXSETTIMEOUT" USING
TX-INFO-AREA TX-RETURN-STATUS.

説明

TXSETTIMEOUT()は、TRANSACTION-TIMEOUTで指定されている値をtransaction_timeout特性に設定します。この値は、トランザクションがトランザクション・タイムアウトの対象になる前に完了しなければならない制限時間を指定します。この時間は、AP呼出しTXBEGIN()TXCOMMIT()またはTXROLLBACK()の間の時間になります。TXSETTIMEOUT()は、呼出し側がトランザクション・モードであるかどうかに関係なく呼び出すことができます。TXSETTIMEOUT()がトランザクション・モードで呼び出された場合、新しいタイムアウト値は、次のトランザクションまでは無効です。

transaction_timeoutの初期値は0 (タイムアウトなし)です。

TRANSACTION-TIMEOUTは、トランザクションがトランザクション・タイムアウトの対象となるまでの秒数を指定します。この値には、S9(9) COMP-5にシステムで定義されている最大値までの任意の値を設定できます。TRANSACTION-TIMEOUT値ゼロの場合、タイムアウト機能はオフになります。

戻り値に使用されるレコードは、TX-RETURN-STATUSです。

戻り値

TXSETTIMEOUT()は正常終了時には、負数でない値TX-OKを返します。

エラー

次の条件が発生すると、TXSETTIMEOUT()transaction_timeout特性の設定を変更せずに次のいずれかの負の値を返します。

[TX-EINVAL]

指定したタイムアウト値が無効です。

[TX-PROTOCOL-ERROR]

関数の呼出し方法が不適切です。たとえば、TXOPEN()より前に呼び出されました。

[TX-FAIL]

トランザクション・マネージャが致命的エラーを検出しました。このエラーでは、トランザクション・マネージャは、アプリケーションのために作業を行うことができなくなります。エラーの正確な性質がログ・ファイルに書き込まれます。

関連項目

TXBEGIN(3cbl)TXCOMMIT(3cbl)TXINFORM(3cbl)TXOPEN(3cbl)TXROLLBACK(3cbl)

 


USERLOG(3cbl)

名前

USERLOG() - Oracle Tuxedo ATMIの中央イベント・ログへのメッセージの書込み

形式

01 LOG-REC.
COPY User data.
01
LOGREC-LEN PIC S9(9) COMP-5.
01
TPSTATUS-REC.
COPY TPSTATUS.
CALL "USERLOG" USING
LOG-REC LOGREC-LEN TPSTATUS-REC.

説明

USERLOG()は、固定出力ファイル(Oracle Tuxedo ATMIの中央イベント・ログ)にLOG-RECを書き込みます。

中央のイベント・ログは通常のUNIXシステム・ファイルで、そのパス名は次のように構成されています。

このあと、メッセージがそのファイルに追加されます。この方法の場合、それ以降の日にUSERLOG()をプロセスを呼び出すと、メッセージは別のファイルに書き込まれます。

移植性

USERLOGインタフェースは、UNIXおよびMS-DOSオペレーティング・システムで利用できます。ログ・メッセージの一部として生成されるシステム名は、MS-DOSシステムでは利用できません。このため、MS-DOSシステムのシステム名としては、値PCを使用します。

サンプル

変数ULOGPFX/application/logs/logに設定されている場合、およびUSERLOG()の最初の呼出しが9/7/90に行われた場合、作成されるログ・ファイルには/application/logs/log.090790という名前が付けられます。たとえば、

01 LOG-REC PIC X(15) VALUE “UNKNOWN USER”.
01
LOGREC-LEN PIC S9(9) VALUES IS 13.
CALL “USERLOG” USING
LOG-REC LOGREC-LEN TPSTATUS-REC.

上記のような呼出しが、プロセスIDが23431であるプログラムによりUNIXシステムが指定したlogsys上で4:22:14pmに出された場合は、ログ・ファイルには次のような行が書き込まれます。

162214.logsys!security.23431: UNKNOWN USER

プロセスがトランザクション・モードのときにメッセージが中央イベント・ログに送られた場合、ユーザー・ログ・エントリのタグに追加の要素が加わります。これらの要素は、リテラルgtridと、それに続く3桁のPIC S9(9) COMP-5型の16進値で構成されます。これらの値はグローバル・トランザクションを一意に識別し、グローバル・トランザクション識別子と呼ばれます。この識別子は主に管理上の目的で使用されますが、中央イベント・ログでメッセージの先頭に付けられるタグの中に付けられます。前述のメッセージがトランザクション・モードで中央イベント・ログに書き出される場合、結果として得られるログ・エントリは次のようになります。

162214.logsys!security.23431: gtrid x2 x24e1b803 x239: UNKNOWN USER

シェル変数ULOGDEBUGの値がyであると、ログ・メッセージはプログラムsecurityの標準エラー出力にも書き出されます。

エラー

USERLOG()は、送信されるメッセージがstdio.hで定義されているBUFSIZより大きい場合はハングします。

診断

USERLOG()が返す値には、現在のログ・ファイルのオープンや書込みができないことを示す値も含まれます。ULOGDEBUGが設定されている場合、標準エラー出力への書込みができない場合は、エラーとはみなされません。

注意事項

アプリケーションでUSERLOGメッセージを使用する場合には、アプリケーション・エラーをデバッグするのに有用なものだけを使用することをお薦めします。ログが情報であふれてしまうと、本来のエラーを検出するのが難しくなります。


  先頭に戻る       前  次