ATMIクライアントがサービスをリクエストする場合、Oracle Tuxedo ATMIアプリケーションに明示的または暗黙的に参加している必要があります。アプリケーションに参加すると、クライアントはリクエストを送り、その応答を受け取ることができるようになります。
クライアントが明示的にアプリケーションに参加するには、次のシグネチャを指定して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呼出し)を発行すると、暗黙的にアプリケーションに参加したことになります。このケースでは、TPINITIALIZE
がOracle TuxedoシステムによってクライアントのためにSPACES
パラメータを使用して呼び出されます。TPINFDEF-REC
レコードは、Oracle Tuxedoシステムの特殊な型付きレコードです。これは、クライアントがアプリケーションに参加しようとするとき、クライアント・プログラムがクライアントの識別と認証の情報をシステムに渡すために使用します。これは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.
表4-1は、COBOLのCOPY
ファイルに定義されているフィールドを示しています。
使用する通知メカニズム、およびシステム・アクセス・モード。有効な値のリストについては、「非請求通知の処理」を参照してください。
|
|
使用するシステム・アクセス・モード。値のリストについては、「システム・アクセス・モード」を参照してください。
|
|
TPINITIALIZE
が呼び出されると、USRNAME
とCLTNAME
フィールドはクライアント・プロセスに関連付けられます。この2つのフィールドは、ブロードキャスト通知と管理統計情報の取得に使用されます。
次のTPINFDEF-REC
レコードの機能をATMIクライアントで利用するには、TPINITIALIZE
を明示的に呼び出す必要があります。
ATMIクライアントがアプリケーションに参加すると、Oracle Tuxedoシステムによって一意なATMIクライアント識別子が割り当てられます。識別子は、クライアントによって呼び出される各サービスに渡されます。識別子は、非請求通知に使用することもできます。
一意のクライアント名とユーザー名をそれぞれ30文字以内で割り当てることもできますが、その場合は、TPINFDEF-REC
レコードを使用して名前をTPINITIALIZE
に渡します。Oracle Tuxedoシステムでは、各プロセスに関連付けられているクライアント名とユーザー名、およびプロセスが実行されているマシンの論理マシンID (LMID)を組み合せることにより、そのプロセスに対して一意な識別子が使用されます。これらのフィールド値を取得する方法は選択することができます。
注: | プロセスがアプリケーションの管理ドメイン以外で実行されている場合(つまり、管理ドメインに接続されたワークステーション上で実行されている場合)、アプリケーションにアクセスするためにワークステーション・クライアントで使用されているマシンのLMIDが割り当てられます。 |
クライアント・プロセスに対して一意な識別子が作成されると、次の操作を行うことができます。
TPNOTIFY
とTPBROADCAST
を使用して、特定のクライアントまたはクライアントのグループに非請求メッセージを送信できます。非請求メッセージの送受信の詳細は、「イベント・ベースのクライアントおよびサーバーのコーディング」、tmadmin(1)の詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』を参照してください。
図4-1は、アプリケーションにアクセスするクライアントに名前を割り当てる方法を示しています。この例では、ジョブ関数を示すcltname
フィールドがアプリケーションで使用されています。
非請求通知とは、ATMIクライアントが予期していないサービス・リクエストに対するレスポンス(またはエラー・コード)を受け取る通信です。たとえば、管理者が5分後にシステムをシャットダウンすることを通知するメッセージをブロードキャストした場合などです。
クライアントに非請求メッセージを通知する方法は数多くあります。たとえば、オペレーティング・システムがクライアントにシグナルを送って、クライアントの現在の処理を中断させる方法があります。Oracle Tuxedoシステムでは、ATMI呼出しが起動されるたびに非請求メッセージが到着していないかどうかがデフォルトで確認されます。これはディップ・インと呼ばれる方法で、次の利点があります。
ディップ・インでは、メッセージの到着を確認するまでの間隔が長い場合があるため、アプリケーションでTPCHKUNSOL
呼出しを実行して、すでに到着している非請求メッセージがないかどうかを確認できます。TPCHKUNSOL
呼出しの詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「イベント・ベースのクライアントおよびサーバーのコーディング」を参照してください。
クライアントがTPINITIALIZE
を使用してアプリケーションに参加する場合、フラグを定義して非請求メッセージの処理方法を指定できます。クライアントへの通知では、表4-2に定義される値をNOTIFICATION-FLAG
に指定できます。
シグナルによる任意通知を選択します。このフラグは、シングル・スレッドでシングル・コンテキストのアプリケーションのみで使用します。このモードの利点は、直ちに通知できることです。このモードには、次のような不都合があります。
|
|
TPINFDEF-REC
フラグの詳細は、『Oracle Tuxedo ATMI COBOL関数リファレンス』の「TPINITIALIZE(3cbl)」を参照してください。
アプリケーションは、protectedまたはfastpathのいずれかのモードでOracle Tuxedoシステムにアクセスできます。ATMIクライアントは、TPINITIALIZE
を使用してアプリケーションに参加するときに、モードをリクエストできます。モードを指定するには、TPINFDEF-REC
レコードのACCESS-FLAG
フィールドに次のいずれかのモードを指定して、その値をTPINITIALIZE
に渡します。
アプリケーション管理者は、リソース・マネージャに関連付けられたサーバー(トランザクションを調整するための管理プロセスを提供するサーバーを含む)をグループ化できます。グループの定義については、『Oracle Tuxedoアプリケーションの設定』を参照してください。
アプリケーションに参加している場合、クライアントはTPINFDEF-REC
のgrpname
フィールドにグループ名を指定して、特定のグループに参加できます。
Oracle Tuxedoシステムでは、オペレーティング・システムのセキュリティ、アプリケーション・パスワード、ユーザー認証、省略可能なアクセス制御リスト、必須のアクセス制御リスト、リンク・レベルの暗号化などのセキュリティ・レベルを設定できます。セキュリティ・レベル設定の詳細は、『Oracle Tuxedoアプリケーションの設定』を参照してください。
セキュリティ・レベルとしてアプリケーション・パスワードが設定されている場合、アプリケーションに参加するときに、すべてのクライアントがアプリケーション・パスワードを入力する必要があります。管理者はアプリケーション・パスワードを設定したり変更できます。また、そのパスワードを有効なユーザーに提供する必要があります。
このレベルのセキュリティが設定されていると、Oracle Tuxedoシステムで提供されるud()
などのクライアント・プログラムでは、アプリケーション・パスワードの入力が求められます。(ud、wud (1)の詳細については、『Oracle Tuxedoアプリケーション実行時の管理』を参照してください。)アプリケーション固有のクライアント・プログラムには、ユーザーからパスワードを取得するコードが記述されていることが必要です。クライアントがアプリケーションに参加するためにTPINITIALIZE
を呼び出すと、非暗号化パスワードがTPINFDEF-REC
レコードに格納されて評価されます。
注: | パスワードは画面には表示されません。 |
TPCHK AUTH(3cbl)を使用すると、次の内容を確認できます。
通常、クライアントはTPINITIALIZE
より先にTPCHKAUTH
を呼び出して、初期化時に指定する必要のある追加のセキュリティ情報を確認します。
セキュリティのプログラミング手法の詳細は、『Oracle CORBAアプリケーションにおけるセキュリティの使用』を参照してください。
ATMIクライアントがすべてのサービスをリクエストして、それに対する応答を受信したら、TPT ERM(3cbl)を使用してアプリケーションから分離できます。TPTERM
の呼出しには、次のシグネチャを使用します。
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPTERM" USING TPSTATUS-REC.
実行可能ATMIクライアントをビルドするには、buildclient(1)コマンドを実行して、Oracle Tuxedoシステム・ライブラリとその他のすべての参照ファイルを使用してアプリケーションをコンパイルします。COBOLプログラムをコンパイルするには、-C
オプションを指定します。buildclient
コマンドでは、次の構文を使用します。
buildclient -Cfilename.
cbl
-ofilename
-ffilenames
-lfilenames
表4-4は、buildclient
コマンドのオプションを示しています。
注: | Oracle Tuxedoライブラリは自動的にリンクされます。コマンド行にOracle Tuxedoライブラリを指定する必要はありません。 |
注: | リンクの編集はbuildclient コマンドを実行して行う必要があります。 |
リンクするライブラリ・ファイルの指定順序は重要です。関数を呼び出す順序と、それらの関数への参照を含むライブラリによって、この順序が決定されます。
デフォルトでは、buildclient
コマンドはUNIXのcc
コマンドを呼び出します。環境変数ALTCC
を指定して別のコンパイル・コマンドを指定したり、ALTCFLAGS
を指定してコンパイル・フェーズやリンク・フェーズにフラグを設定することができます。ALTCC
は、デフォルトでは、MicroFocus Net Expressコンパイラを使用するcobcc
に設定されます。Fujitsu NetCOBOLを使用するには、WindowsシステムでもALTCC
を設定する必要があります。NetCOBOL用にALTCC=cobcc85
を設定する必要があります。詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「環境変数の設定」を参照してください。
注: | Windowsシステムでは、ALTCC およびALTCFLAGS 環境変数は使用できません。これらの変数を設定すると、予想外の結果が生じます。まずCOBOLコンパイラを使用し、次に生成されたオブジェクト・ファイルをbuildclient コマンドに渡して、アプリケーションをコンパイルする必要があります。例: |
注: | buildclient -C -o audit -f audit.o |
注: | 次のコマンド行の例では、COBOLプログラムaudit.cbl をコンパイルして、実行可能ファイルaudit を生成しています。 |
注: | buildclient -C – o audit – f audit.cbl |
リスト4-1に示す次の擬似コードは、通常のATMIクライアント・プロセスがアプリケーションに参加してから分離するまでの処理を示しています。
. . .
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つの引数を取ります。
TPINITIALIZE
とTPTERM
は、成功すると、TP-STATUS IN TPSTATUS-REC
に[TPOK
]を戻します。いずれのコマンドでもエラーが検出されると、コマンドは失敗し、エラーの原因を示す値がTP-STATUS
に設定されます。TPSTATUS-REC
は、COBOLのCOPY
ファイルに定義されています。TP-STATUS
の値については、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「エラーの管理」を参照してください。各ATMI呼出しで戻される全エラー・コードのリストについては、『Oracle Tuxedo ATMI COBOL関数リファレンス』のCOBOLアプリケーション・トランザクション・モニター・インタフェースの紹介に関する項を参照してください。
次の例は、TPINITIALIZE
とTPTERM
ルーチンの使用方法を示しています。このサンプル・コードは、Oracle Tuxedoソフトウェアに提供されている銀行業務のサンプル・アプリケーションbankapp
から引用したものです。
IDENTIFICATION DIVISION.
PROGRAM-ID. FIG1-3.
AUTHOR. TUXEDO DEVELOPMENT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
*
WORKING-STORAGE SECTION.
*****************************************************
* Tuxedo definitions
*****************************************************
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPINFDEF-REC.
COPY TPINFDEF.
*****************************************************
* Log messages definitions
*****************************************************
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.
*****************************************************
* Now register the client with the system.
*****************************************************
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.
*****************************************************
* Application specific code
*****************************************************
. . .
*****************************************************
*Leave Application
*****************************************************
CALL "TPTERM" USING TPSTATUS-REC.
IF NOT TPOK
MOVE "TPTERM FAILED" TO LOGMSG-TEXT
PERFORM DO-USERLOG.
EXIT-PROGRAM.
STOP RUN.
*****************************************************
* Log messages to the userlog
*****************************************************
DO-USERLOG.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.
この例は、TPINITIALIZE
を呼び出すことによって、アプリケーションに参加しようとしているクライアント・プロセスを示しています。エラーが発生すると、USERLOG
を呼び出して、中央イベント・ログにメッセージを書き込みます。