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

Tuxedo COBOL リファレンス

 Previous Next Contents View as PDF  

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

BEA Tuxedo ATMI COBOL 関数

名前

機能説明

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

COBOL ATMI について紹介する

FINIT、FINIT32(3cbl)

フィールド化バッファの初期化

FVFTOS、FVFTOS32(3cbl)

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

FVSTOF(3cbl)

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

TPABORT(3cbl)

現在の BEA Tuxedo ATMI のトランザクションのアボート

TPACALL(3cbl)

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

TPADVERTISE(3cbl)

サービス名の宣言を行うルーチン

TPBEGIN(3cbl)

BEA Tuxedo ATMI のトランザクションを開始するルーチン

TPBROADCAST(3cbl)

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

TPCALL(3cbl)

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

TPCANCEL(3cbl)

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

TPCHKAUTH(3cbl)

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

TPCHKUNSOL(3cbl)

任意通知型メッセージをチェックする

TPCLOSE(3cbl)

BEA Tuxedo ATMI のリソース・マネージャのクローズ

TPCOMMIT(3cbl)

現在の BEA Tuxedo ATMI のトランザクションのコミット

TPCONNECT(3cbl)

会話接続の確立

TPDEQUEUE(3cbl)

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

TPDISCON(3cbl)

会話接続の切断

TPENQUEUE(3cbl)

メッセージをキューに登録するルーチン

TPFORWAR(3cbl)

BEA Tuxedo ATMI のサービス要求を別のルーチンに転送

TPGETCTXT(3cbl)

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

TPGETLEV(3cbl)

BEA Tuxedo ATMI のトランザクションの進行状況のチェック

TPGETRPLY(3cbl)

非同期メッセージからの応答の獲得

TPGETUNSOL(3cbl)

任意通知型メッセージの獲得

TPGPRIO(3cbl)

サービス要求の優先順位を獲得

TPINITIALIZE(3cbl)

BEA Tuxedo ATMI アプリケーションに結合する

TPKEYCLOSE(3cbl)

前にオープンされたキー・ハンドルをクローズ

TPKEYGETINFO(3cbl)

キー・ハンドルに関連付する情報を獲得

TPKEYOPEN(3cbl)

デジタル署名生成、メッセージの暗号化、またはメッセージの暗号解読のためのキー・ハンドルをオープン

TPKEYSETINFO(3cbl)

キー・ハンドルに関連付けられているオプションの属性パラメータを設定

TPNOTIFY(3cbl)

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

TPOPEN(3cbl)

BEA Tuxedo ATMI のリソース・マネージャのオープン

TPPOST(3cbl)

イベントを通知

TPRECV(3cbl)

会話接続でメッセージを受信する

TPRESUME(3cbl)

グローバル・トランザクションを再開

TPRETURN(3cbl)

BEA Tuxedo ATMI のサービス・ルーチンからのリターン

TPSCMT(3cbl)

TPCOMMIT の終了時期の設定

TPSEND(3cbl)

会話接続でメッセージを送信するルーチン

TPSETCTXT(3cbl)

現在のアプリケーション関連にコンテキスト識別子を設定

TPSETUNSOL(3cbl)

任意通知型メッセージの処理方法の設定

TPSPRIO(3cbl)

サービス要求の優先順位の設定

TPSUBSCRIBE(3cbl)

イベントにサブスクライブ

TPSUSPEND(3cbl)

グローバル・トランザクションを一時停止

TPSVCSTART(3cbl)

BEA Tuxedo ATMI のサービスの開始

TPSVRDONE(3cbl)

BEA Tuxedo ATMI のサーバを終了するルーチン

TPSVRINIT(3cbl)

BEA Tuxedo ATMI のサーバを初期化するルーチン

TPTERM(3cbl)

アプリケーションを分離

TPUNADVERTISE(3cbl)

サービス名の宣言を取り消すルーチン

TPUNSUBSCRIBE(3cbl)

イベントへのサブスクライブを取り消す

TXBEGIN(3cbl)

グローバル・トランザクションを開始

TXCLOSE(3cbl)

リソース・マネージャ・セットをクローズ

TXCOMMIT(3cbl)

トランザクションのコミット

TXINFORM(3cbl)

グローバル・トランザクション情報を返す

TXOPEN(3cbl)

リソース・マネージャ・セットをオープン

TXROLLBACK(3cbl)

トランザクションのロールバック

TXSETCOMMITRET(3cbl)

commit_return 特性を設定

TXSETTRANCTL(3cbl)

transaction_control 特性を設定

TXSETTIMEOUT(3cbl)

transaction_timeout 特性を設定

USERLOG(3cbl)

BEA Tuxedo ATMI の中央イベント・ログへのメッセージの書き込み


 

 


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

機能説明

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

コミュニケーション・パラダイム

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

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

なお、プログラムは要求/応答と会話によるコミュニケーションのいずれも行うことができますが、両方のサービス要求を受け付けることはできません。以下の節では、これら 2 種類のコミュニケーション・パラダイムについてその概要を説明します。

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

クライアントおよびサーバに対する BEA Tuxedo の要求/応答パラダイム

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

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

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

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

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

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

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

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

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

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

このため、会話サーバによって実行される会話サービスは、要求を受け取った時点で開始され、TPRETURN() を介して最終的な応答が送信された時点で終了します。メッセージは、アプリケーション側の規定に従って送受信することができます。要求メッセージ応答メッセージとの間には本質的な相違はなく、またメッセージの優先順位に関する規定もありません。

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

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

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

ATMI トランザクション

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

BEA 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 関数によって定義されるトランザクションと実質的に同じです。アプリケーションの開発者は、クライアント・ルーチンおよびサービス・ルーチンを作成するにあたり、どちらの関数でも使用できます。実際、BEA 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() ルーチンを使用する必要があります。省略時に BEA Tuxedo システムが提供する TPSVRINIT() は、TPOPEN() を呼び出します。TPSVRDONE() についても同じことがあてはまります。TX インターフェイスを使用している場合は、サービス・ルーチン開発者は、TXCLOSE() を呼び出す独自の TPSVRDONE() を使用しなければなりません。

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

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

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

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

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

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

トランザクション特性

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

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

タイムアウト

BEA Tuxedo ATMI システムには 3 種類のタイムアウトがあります。1 つはトランザクションの開始から終了までの期間に関連するもの、2 つめはブロッキング・コールで呼び出し元が制御権を再度入手するまでブロック状態を維持する最大時間に関連するものです。3 つめはサービスのタイムアウトです。これは呼び出しの秒数がコンフィギュレーション・ファイルの SERVICES セクションにおける SVCTIMEOUT パラメータで指定された秒数を越えた時に発生します。

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

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

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

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

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

動的サービス宣言

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

型付きレコード

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

アプリケーション・プログラマは、サポートされる 6 つの型付きレコードの中から 1 つを選択できます。BEA Tuxedo システムでは、ユーザ固有の型付きレコードを追加することもできます。詳細については、『BEA Tuxedo 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 で指定されたデータ長分のみがデータ領域に移動され、残りのデータは破棄されます。

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

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

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

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

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

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

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

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

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

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

プロセスごとのコンテキスト・モード

関数

状態

非初期化 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 データ構造体は、BEA 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(15).

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(15).
05 QSPACE-NAME PIC X(15).
05 REPLYQUEUE PIC X(15).
05 FAILUREQUEUE PIC X(15).
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(3) がコミット・レベル特性を設定する際に、使用されます。

*
* 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(3) が認証の必要性を調べる際に、使用されます。

* 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(3) がトランザクション・レベル設定を取り出す際に使用されます。

*
* 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(3) および TPBROADCAST(3) が通知を送る際に、使用されます。

*
* 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(31).
05 NAME-2 PIC X(31).
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.
* 正常実行
88 TX-OK VALUE 0.
* 正常実行
88 TX-OUTSIDE VALUE -1.
* アプリケーションが RM ローカル・トランザクションにある。
88 TX-ROLLBACK VALUE -2.
* トランザクションがロールバックされた。
88 TX-MIXED VALUE -3.
* トランザクションが部分的にコミットされ、部分的に
* ロールバックされた。
88 TX-HAZARD VALUE -4.
* トランザクションが部分的にコミットされ、部分的に
* ロールバックされた可能性がある。
88 TX-PROTOCOL-ERROR VALUE -5.
* ルーチンが不適切なコンテキストで呼び出された。
88 TX-ERROR VALUE -6.
* 一時的なエラー
88 TX-FAIL VALUE -7.
* 致命的なエラー
88 TX-EINVAL VALUE -8.
* 無効な引数が指定された。
88 TX-COMMITTED VALUE -9.
* トランザクションがヒューリスティックにコミットされた。
88 TX-NO-BEGIN VALUE -100.
* トランザクションはコミットされ、新しいトランザクションは
* 開始できなかった。
88 TX-ROLLBACK-NO-BEGIN VALUE -102.
* トランザクションはロールバックされ、新しいトランザクションは
* 開始できなかった。
88 TX-MIXED-NO-BEGIN VALUE -103.
* 混合条件が発生し、新しいトランザクションが開始できなかった。
88 TX-HAZARD-NO-BEGIN VALUE -104.
* ハザードがあり、新しいトランザクションが開始できなかった。
88 TX-COMMITTED-NO-BEGIN VALUE -109.
* ヒューリスティックにコミットされ、トランザクションが
* 開始できなかった。

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

*
* TXINFDEF.cbl
*
05 XID-REC.
* XID レコード
10 FORMAT-ID PIC S9(9) COMP-5.
* FORMAT-ID に値 -1 が入っている場合、XID は 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.
* トランザクション・モード設定
88 TX-NOT-IN-TRAN VALUE 0.
88 TX-IN-TRAN VALUE 1.
05 COMMIT-RETURN PIC S9(9) COMP-5.
* Commit_return 設定
88 TX-COMMIT-COMPLETED VALUE 0.
88 TX-COMMIT-DECISION-LOGGED VALUE 1.
05 TRANSACTION-CONTROL PIC S9(9) COMP-5.
* Transaction_control 設定
88 TX-UNCHAINED VALUE 0.
88 TX-CHAINED VALUE 1.
05 TRANSACTION-TIMEOUT PIC S9(9) COMP-5.
* Transaction_timeout 値
88 NO-TIMEOUT VALUE 0.
05 TRANSACTION-STATE PIC S9(9) COMP-5.
* Transaction_state 情報
88 TX-ACTIVE VALUE 0.
88 TX-TIMEOUT-ROLLBACK-ONLY VALUE 1.
88 TX-ROLLBACK-ONLY VALUE 2.

ATMI の状態遷移

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

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

使用可能な関数

関数

プロセス・タイプ

要求/応答型
サーバ

会話型
サーバ

クライアント

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

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

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())、以下の状態遷移のなかには、両方のプログラム・タイプには適用できないものもあります。上記の表を参照して、目的のプログラムから特定の関数を呼び出すことができるかどうかを判断するようにしてください。

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

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

初期化状態

関数

状態

非初期化
I0

初期化
I1

TPCHKAUTH()

I0

I1

TPGETCTXT()

I0

I1

TPINITIALIZE()

I1

I1

TPSETCTXT()
ヌル以外のコンテキストに設定

I1

I1

TPNULLCONTEXT 設定の TPSETCTXT()

I0

I0

TPSETUNSOL()

I0

I1

TPTERM()

I0

I0

ほかのすべての ATMI 関数


I1


 

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

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

リソース・マネージャの状態

関数

状態

クローズ
R0

オープン
R1

TPOPEN()

R1

R1

TPCLOSE()

R0

R0

TPBEGIN()


R1

TPCOMMIT()


R1

TPABORT()


R1

TPSUSPEND()


R1

TPRESUME()


R1

TPTRAN 設定の TPSVCSTART()


R1

ほかのすべての ATMI 関数

R0

R1


 

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

アプリケーション関連のトランザクション状態

関数

状態

トランザクション内ではない
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


 

次の表は、TPACALL() が返す 1 つの要求ハンドルの状態を示すものです。

非同期要求記述子の状態

関数

状態

記述子なし
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() はプロトコル・エラーを返します。

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

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

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

接続要求ハンドルの状態

関数/イベント

状態

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 の状態遷移

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


 

関連項目

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)

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy