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

COBOL を使用した Tuxedo アプリケーションのプログラミング

 Previous Next Contents View as PDF  

クライアントのコーディング

ここでは、次の内容について説明します。

 


アプリケーションへの参加

クライアントがサービスを要求する場合、BEA Tuxedo アプリケーションに明示的または暗黙的に参加している必要があります。アプリケーションに参加すると、クライアントは要求を送り、その応答を受け取ることができるようになります。

クライアントが明示的にアプリケーションに参加するには、次の文法を指定して TPINITIALIZE(3cbl) を呼び出します。

01 TPINFDEF-REC.
COPY TPINFDEF.
01 USER-DATA-REC PIC X(any-length).
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPINITIALIZE" USING TPINFDEF-REC USER-DATA-REC TPSTATUS-REC.

クライアントが TPINITIALIZE を呼び出す前にサービス要求 (または ATMI 呼び出し) を行うと、暗黙的にアプリケーションに参加したことになります。その場合、SPACES パラメータを使用して、TPINITIALIZE がクライアントではなく BEA Tuxedo システムによって呼び出されます。TPINFDEF-REC レコードは BEA Tuxedo システムの特別な型付きレコードであり、クライアントがアプリケーションに参加するときに、クライアントの ID と認証の情報をシステムに渡すためにクライアント・プログラムによって使用されます。このレコードは、次のように COBOL の COPY ファイルに定義されています。

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 DATALEN PIC S9(9) COMP-5.

次の表は、COBOL の COPY ファイルに定義されているフィールドを示しています。

表 4-1 COBOL の COPY ファイルのフィールド

フィールド

説明

USRNAME

呼び出し元を表す名前。このフィールドには、UNIX コマンドの getuid(2) の戻り値を指定することもできます。USRNAME には、MAXTIDENT で指定された文字数 (30 文字) までの値を指定できます。

CLTNAME

アプリケーション定義のセマンティクスに従ったクライアント名。CLTNAME には、MAXTIDENT で指定された文字数 (30 文字) までの値を指定できます。

PASSWD

非暗号化形式のアプリケーション・パスワード。TUXCONFIG ファイルに格納されたアプリケーション・パスワードとの認証で、TPINITIALIZE によって使用されます。PASSWD には、MAXTIDENT の値までの文字列を指定します。

GRPNAME

クライアントを対応付けるリソース・マネージャ・グループの名前。クライアントは、グローバル・トランザクションの一部として、XA 準拠のリソース・マネージャにアクセスできるようになります。GRPNAME には、MAXTIDENT で指定された文字数 (30 文字) までの値を指定できます。ただし、現在のところ、GRPNAMESPACES として渡す必要があります。その場合、クライアントはリソース・マネージャ・グループに対応付けられず、デフォルトのクライアント・グループに属することを指定します。

NOTIFICATION-FLAG

使用する通知メカニズム、およびシステム・アクセス・モード。有効な値については、任意通知型通知の処理を参照してください。

ACCESS-FLAG

使用するシステム・アクセス・モード。使用できる値については、システム・アクセス・モードを参照してください。

DATALEN

認証サービスに送信されるアプリケーション固有データの長さ。ネイティブ・クライアントの場合、このデータはシステムによって符号化されずに、クライアントによって提供される認証サービスに渡されます。ワークステーション・クライアントの場合、クライアント認証はシステムによって行われ、暗号化形式でネットワークを介して渡されます。

TPINITIALIZE が呼び出されると、USRNAMECLTNAME フィールドはクライアント・プロセスに対応付けられます。この 2 つのフィールドは、ブロードキャスト通知と管理統計情報の取得に使用されます。

関連項目

 


TPINFDEF-REC レコードの機能

次の TPINFDEF-REC レコードの機能を ATMI クライアントで利用するには、TPINITIALIZE を明示的に呼び出す必要があります。

クライアント命名

クライアントがアプリケーションに参加すると、BEA Tuxedo システムによって一意なクライアント識別子が割り当てられます。識別子は、クライアントによって呼び出される各サービスに渡されます。識別子は、任意通知型通知に使用することもできます。

一意なクライアント名とユーザ名をそれぞれ 30 文字以内で割り当てることもできます。その場合、TPINFDEF-REC レコードを使用して名前を TPINITIALIZE に渡します。BEA Tuxedo システムでは、各プロセスに対応付けられているクライアント名とユーザ名、およびプロセスが実行されているマシンの論理マシン ID (LMID) を組み合わせることにより、そのプロセスに対して一意な識別子が使用されます。これらのフィールド値を取得する方法は選択することができます。

注記 プロセスがアプリケーションの管理ドメイン以外で実行されている場合 (つまり、管理ドメインに接続されたワークステーション上で実行されている場合)、アプリケーションにアクセスするためにワークステーション・クライアントで使用されているマシンの LMID が割り当てられます。

クライアント・プロセスに対して一意な識別子が作成されると、次の操作を行うことができます。

任意通知型メッセージの送受信の詳細については、「イベント・ベースのクライアントおよびサーバのコーディング」を参照してください。tmadmin(1) の詳細については、『BEA Tuxedo C リファレンス』を参照してください。

次の図は、アプリケーションにアクセスするクライアントに名前を割り当てる方法を示しています。この例では、ジョブ関数を示す cltname フィールドがアプリケーションで使用されています。

図 4-1 クライアントの名前付け


 

任意通知型通知の処理

任意通知型通知とは、クライアントが予期していないサービス要求に対する応答 (またはエラー・コード) を受け取る通信です。たとえば、管理者が 5 分後にシステムをシャットダウンすることを通知するメッセージをブロードキャストした場合などです。

クライアントに任意通知型メッセージを通知する方法は数多くあります。たとえば、オペレーティング・システムがクライアントにシグナルを送って、クライアントの現在の処理を中断させる方法があります。BEA Tuxedo システムでは、ATMI 呼び出しが行われるたびに任意通知型メッセージが到着していないかどうかがデフォルトで確認されます。これはディップ・インと呼ばれる方法で、次の利点があります。

「ディップ・イン」では、メッセージの到着を確認するまでの間隔が長い場合があります。そのため、アプリケーションで TPCHKUNSOL を呼び出して、既に到着している任意通知型メッセージがないかどうかを確認できます。TPCHKUNSOL 呼び出しの詳細については、8-1 ページの「イベント・ベースのクライアントおよびサーバのコーディング」を参照してください。

クライアントが TPINITIALIZE を使用してアプリケーションに参加する場合、フラグを定義して任意通知型メッセージの処理方法を指定できます。クライアントへの通知では、次の表に示す値を NOTIFICATION-FLAG に指定できます。

表 4-2 TPINFDEF-REC レコードのクライアント通知でのフラグ

フラグ

説明

TPU_SIG

シグナルによる任意通知を選択します。このフラグは、シングル・スレッドでシングル・コンテキストのアプリケーションのみで使用します。このモードの利点は、直ちに通知できることです。このモードには、次のような不都合があります。

システムや環境の要件を満たしていない場合にこのフラグを指定すると、フラグに TPU_DIP が設定され、ログにイベントが記録されます。

TPU_DIP (デフォルト)

ディップ・インを使用した任意通知型メッセージを指定します。クライアントは TPSETUNSOL 呼び出しを使用してメッセージ処理ルーチンの名前を指定し、TPCHKUNSOL 呼び出しを使用して待機中の任意通知型メッセージを確認できます。

TPU_THREAD

別のスレッド内の THREAD 通知を指定します。このフラグは、マルチスレッドをサポートするプラットフォーム専用です。マルチスレッドがサポートされていないプラットフォームで TPU_THREAD を指定すると、無効な引数として処理されます。その結果、エラーが返されて、TP-STATUSTPEINVAL が設定されます。

TPU_IGN

任意通知を無視します。

TPINFDEF-REC フラグの詳細については、『BEA Tuxedo COBOL リファレンス』の TPINITIALIZE(3cbl) を参照してください。

システム・アクセス・モード

アプリケーションは、protected または fastpath のいずれかのモードで BEA Tuxedo システムにアクセスできます。クライアントは、TPINITIALIZE を使用してアプリケーションに参加するときに、モードを要求できます。モードを指定するには、TPINFDEF-REC レコードの ACCESS-FLAG フィールドに次のいずれかのモードを指定して、その値を TPINITIALIZE に渡します。

表 4-3 TPINFDEF-REC レコードのシステム・アクセス・フラグ

モード

説明

TPSA-PROTECTED

アプリケーション内で ATMI 関数を呼び出し、共用メモリを使用して BEA Tuxedo システムの内部テーブルにアクセスします。BEA Tuxedo システム・ライブラリ外のアプリケーション・コードからのアクセスに対して、共用メモリを保護します。この値は、NO_OVERRIDE が指定されている場合を除き、UBBCONFIG の値に優先します。UBBCONFIG の詳細については、『BEA Tuxedo アプリケーションの設定』を参照してください。

TPSA-FASTPATH (デフォルト)

アプリケーション・コード内で ATMI 関数を呼び出し、共用メモリを使用して BEA Tuxedo システム内部にアクセスします。BEA Tuxedo システム・ライブラリ外のアプリケーション・コードからのアクセスに対して、共用メモリを保護しません。この値は、NO_OVERRIDE が指定されている場合を除き、UBBCONFIG の値に優先します。UBBCONFIG の詳細については、『BEA Tuxedo アプリケーションの設定』を参照してください。

リソース・マネージャとの対応付け

アプリケーション管理者は、リソース・マネージャに対応付けられたサーバ (トランザクションを調整するための管理プロセスを提供するサーバを含む) をグループ化できます。グループの定義については、『BEA Tuxedo アプリケーションの設定』を参照してください。

アプリケーションに参加している場合、クライアントは TPINFDEF-RECgrpname フィールドにグループ名を指定して、特定のグループに参加できます。

クライアント認証

BEA Tuxedo システムでは、オペレーティング・システムのセキュリティ、アプリケーション・パスワード、ユーザ認証、省略可能なアクセス制御リスト、必須のアクセス制御リスト、リンク・レベルの暗号化などのセキュリティ・レベルを設定できます。セキュリティ・レベル設定の詳細については、『BEA Tuxedo アプリケーションの設定』を参照してください。

セキュリティ・レベルとしてアプリケーション・パスワードが設定されている場合、アプリケーションに参加するときに、すべてのクライアントがアプリケーション・パスワードを入力する必要があります。管理者はアプリケーション・パスワードを設定したり変更できます。また、そのパスワードを有効なユーザに提供する必要があります。

このレベルのセキュリティが設定されていると、BEA Tuxedo システムで提供される ud(1) などのクライアント・プログラムでは、アプリケーション・パスワードの入力が求められます。ud、wud(1) の詳細については、『BEA Tuxedo アプリケーション実行時の管理』を参照してください。アプリケーション固有のクライアント・プログラムには、ユーザからパスワードを取得するコードが記述されていることが必要です。クライアントがアプリケーションに参加するために TPINITIALIZE を呼び出すと、非暗号化パスワードが TPINFDEF-REC レコードに格納されて評価されます。

注記 パスワードは画面には表示しません。

TPCHKAUTH(3cbl) を使用すると、次の内容を確認できます。

通常、クライアントは TPINITIALIZE より先に TPCHKAUTH を呼び出して、初期化時に指定する必要のあるセキュリティ情報を確認します。

セキュリティのプログラミング手法の詳細については、『BEA Tuxedo CORBA アプリケーションのセキュリティ機能』を参照してください。

 


アプリケーションからの分離

クライアントがすべてのサービスを要求して、それに対する応答を受信したら、TPTERM(3cbl) を使用してアプリケーションから分離できます。TPTERM の呼び出しには、次の文法を使用します。

01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPTERM" USING TPSTATUS-REC.

 


クライアントのビルド

実行可能クラアイントをビルドするには、buildclient(1) コマンドを実行して、BEA Tuxedo システム・ライブラリとそのほかのすべての参照ファイルを使用してアプリケーションをコンパイルします。COBOL プログラムをコンパイルするには、-C オプションを指定します。次は、buildclient コマンドの構文です。

buildclient -C filename.cbl -o filename -f filenames -l filenames

次の表は、buildclient コマンドのオプションを示しています。

表 4-4 buildclient のオプション

オプションまたは引数 . .

説明 . .

filename.cbl

コンパイルする COBOL 言語のアプリケーション。

-o filename

実行可能な出力ファイル。出力ファイルのデフォルト名は a.out です。

-f filenames

BEA Tuxedo システムのライブラリより先にリンクされるファイルのリスト。-f オプションは、コマンド行で複数回指定できます。また、各 -f に複数のファイル名を指定できます。COBOL プログラム・ファイル (file.cbl) を指定すると、リンクされる前にコンパイルが行われます。ほかのオブジェクト・ファイル (file.o) を個別に、またはアーカイブ・ファイル (file.a) にまとめて指定することもできます。

-l filenames

BEA Tuxedo システム・ライブラリの後にリンクされるファイルのリスト。-l オプションは、コマンド行で複数回指定できます。また、各 -l に複数のファイル名を指定できます。COBOL プログラム・ファイル (file.cbl) を指定すると、リンクされる前にコンパイルが行われます。ほかのオブジェクト・ファイル (file.o) を個別に、またはアーカイブ・ファイル (file.a) にまとめて指定することもできます。

-r

実行可能サーバにリンクされるリソース・マネージャのアクセス・ライブラリ。アプリケーション管理者は、buildtms(1) コマンドを使用して、すべての有効なリソース・マネージャ情報を $TUXDIR/updataobj/RM ファイルに事前に定義しておく必要があります。指定できるリソース・マネージャは 1 つだけです。詳細については、『BEA Tuxedo アプリケーションの設定』を参照してください。

注記 BEA Tuxedo ライブラリは自動的にリンクされます。コマンド行に BEA Tuxedo ライブラリを指定する必要はありません。

リンクするライブラリ・ファイルの指定順序は重要です。関数を呼び出す順序と、それらの関数への参照を含むライブラリによって、この順序が決定されます。

デフォルトでは、buildclient コマンドは UNIX の cc コマンドを呼び出します。環境変数 ALTCC を指定して別のコンパイル・コマンドを指定したり、ALTCFLAGS を指定してコンパイル・フェーズやリンク・フェーズにフラグを設定することができます。デフォルトでは、ALTCCcobcc に設定されます。詳細については、2-7 ページの「環境変数の設定」を参照してください。

注記 Windows 2000 システムでは、環境変数 ALTCCALTCFLAGS は使用できません。これらを設定すると、予想しない結果が生じます。アプリケーションをコンパイルするには、最初に COBOL コンパイラを使用し、次に生成されたオブジェクト・ファイルを buildclient コマンドに渡す必要があります。次に例を示します。

buildclient -C -o audit -f audit.o

次のコマンド行の例では、COBOL プログラム audit.cbl をコンパイルして、実行可能ファイル audit を生成しています。

buildclient -C -o audit -f audit.cbl

関連項目

 


クライアント・プロセスの例

次の擬似コードは、通常のクライアント・プロセスがアプリケーションに参加してから分離するまでの処理を示しています。

コード リスト 4-1 クライアント・プロセスのパラダイム

. . .
Check level of security
CALL TPSETUNSOL to name your handler routine for TPU-DIP
get USRNAME, CLTNAME
prompt for application PASSWD
SET TPU-DIP TO TRUE.
CALL "TPINITIALIZE" USING TPINFDEF-REC
USER-DATA-REC
TPSTATUS-REC.
IF NOT TPOK
error processing
. . .
make service call
receive the reply
check for unsolicited messages
. . .
CALL "TPTERM" USING TPSTATUS-REC.
IF NOT TPOK
error processing
.. .
EXIT PROGRAM.

この例では、TPINITIALIZE は 次の 3 つの引数を取ります。

TPINITIALIZETPTERM は、呼び出しが成功すると、TP-STATUS IN TPSTATUS-REC に [TPOK] を返します。いずれのコマンドでもエラーが検出されると、コマンドは失敗し、エラーの原因を示す値が TP-STATUS に設定されます。TPSTATUS-REC は、COBOL の COPY ファイルに定義されています。TP-STATUS の値については、11-1 ページの「エラーの管理」を参照してください。各 ATMI 呼び出しで返される全エラー・コードのリストについては、『BEA Tuxedo COBOL リファレンス』の「COBOL アプリケーション・トランザクション・モニタ・インターフェイスの紹介」を参照してください。

次の例は、TPINITIALIZETPTERM ルーチンの使用方法を示しています。このコード例は、BEA Tuxedo ソフトウェアに提供されている銀行業務のサンプル・アプリケーション bankapp から引用したものです。

コード リスト 4-2 アプリケーションへの参加と分離

IDENTIFICATION DIVISION.
PROGRAM-ID. FIG1-3.
AUTHOR. TUXEDO DEVELOPMENT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
*
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo の定義
*****************************************************
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPINFDEF-REC.
COPY TPINFDEF.
*****************************************************
* ログ・メッセージの定義
*****************************************************
01 LOGMSG.
05 FILLER PIC X(10) VALUE "FIG12-3 =>".
05 LOGMSG-TEXT PIC X(50).
01 LOGMSG-LEN PIC S9(9) COMP-5.
*
01 USER-DATA-REC PIC X(75).
******************************************************
PROCEDURE DIVISION.
START-HERE.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
*****************************************************
* システムへのクライアントの登録
*****************************************************
MOVE SPACES TO USRNAME.
MOVE SPACES TO CLTNAME.
MOVE SPACES TO PASSWD.
MOVE SPACES TO GRPNAME.
MOVE ZERO TO DATALEN.
SET TPU-DIP TO TRUE.
*
CALL "TPINITIALIZE" USING TPINFDEF-REC
USER-DATA-REC
TPSTATUS-REC.
IF NOT TPOK
MOVE "TPINITIALIZE FAILED" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM EXIT-PROGRAM.
*****************************************************
* アプリケーション固有のコード
*****************************************************
.. .
*****************************************************
* アプリケーションからの分離
*****************************************************
CALL "TPTERM" USING TPSTATUS-REC.
IF NOT TPOK
MOVE "TPTERM FAILED" TO LOGMSG-TEXT
PERFORM DO-USERLOG.
EXIT-PROGRAM.
STOP RUN.
*****************************************************
* ユーザ・ログにメッセージを記録
*****************************************************
DO-USERLOG.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.

この例は、TPINITIALIZE を呼び出すことによって、アプリケーションに参加しているクライアント・プロセスを示しています。エラーが発生すると、USERLOG を呼び出して、中央イベント・ログにメッセージを書き込みます。

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy