ATMIクライアントがサービスをリクエストする場合、Oracle Tuxedo ATMIアプリケーションに明示的または暗黙的に参加している必要があります。アプリケーションに参加すると、クライアントはリクエストを送り、その応答を受け取ることができるようになります。クライアントがTPINITIALIZEを呼び出す前にサービス・リクエスト(またはATMI呼出し)を発行すると、暗黙的にアプリケーションに参加したことになります。このケースでは、TPINITIALIZEがOracle TuxedoシステムによってクライアントのためにSPACESパラメータを使用して呼び出されます。TPINFDEF-RECレコードは、Oracle Tuxedoシステムの特殊な型付きレコードです。これは、クライアントがアプリケーションに参加しようとするとき、クライアント・プログラムがクライアントの識別と認証の情報をシステムに渡すために使用します。これはCOBOLのCOPYファイルで次のように定義されます。表4-1は、COBOLのCOPYファイルに定義されているフィールドを示しています。
使用する通知メカニズム、およびシステム・アクセス・モード。有効な値のリストについては、4-5ページの「非請求通知の処理」を参照してください。 使用するシステム・アクセス・モード。値のリストについては、4-6ページの「システム・アクセス・モード」を参照してください。 TPINITIALIZEが呼び出されると、USRNAMEとCLTNAMEフィールドはクライアント・プロセスに関連付けられます。この2つのフィールドは、ブロードキャスト通知と管理統計情報の取得に使用されます。
•
• ATMIクライアントがアプリケーションに参加すると、Oracle Tuxedoシステムによって一意なATMIクライアント識別子が割り当てられます。識別子は、クライアントによって呼び出される各サービスに渡されます。識別子は、非請求通知に使用することもできます。一意のクライアント名とユーザー名をそれぞれ30文字以内で割り当てることもできますが、その場合は、TPINFDEF-RECレコードを使用して名前をTPINITIALIZEに渡します。Oracle Tuxedoシステムでは、各プロセスに関連付けられているクライアント名とユーザー名、およびプロセスが実行されているマシンの論理マシンID (LMID)を組み合せることにより、そのプロセスに対して一意な識別子が使用されます。これらのフィールド値を取得する方法は選択することができます。
注意:
• tmadmin(1)を使用して、詳細な統計情報を収集できます。非請求メッセージの送受信の詳細は「イベント・ベースのクライアントおよびサーバーのコーディング」を参照し、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に指定できます。
アプリケーションは、protectedまたはfastpathのいずれかのモードでOracle Tuxedoシステムにアクセスできます。ATMIクライアントは、TPINITIALIZEを使用してアプリケーションに参加するときに、モードをリクエストできます。モードを指定するには、TPINFDEF-RECレコードのACCESS-FLAGフィールドに次のいずれかのモードを指定して、その値をTPINITIALIZEに渡します。
アプリケーション管理者は、リソース・マネージャに関連付けられたサーバー(トランザクションを調整するための管理プロセスを提供するサーバーを含む)をグループ化できます。グループの定義については、『Oracle Tuxedoアプリケーションの設定』を参照してください。Oracle Tuxedoシステムでは、オペレーティング・システムのセキュリティ、アプリケーション・パスワード、ユーザー認証、省略可能なアクセス制御リスト、必須のアクセス制御リスト、リンク・レベルの暗号化などのセキュリティ・レベルを設定できます。セキュリティ・レベル設定の詳細は、『Oracle Tuxedoアプリケーションの設定』を参照してください。セキュリティ・レベルとしてアプリケーション・パスワードが設定されている場合、アプリケーションに参加するときに、すべてのクライアントがアプリケーション・パスワードを入力する必要があります。管理者はアプリケーション・パスワードを設定したり変更できます。また、そのパスワードを有効なユーザーに提供する必要があります。このレベルのセキュリティが設定されていると、Oracle Tuxedoシステムで提供されるud()などのクライアント・プログラムでは、アプリケーション・パスワードの入力が求められます。(ud, wud(1)の詳細は、『Oracle Tuxedoアプリケーション実行時の管理』を参照してください。)アプリケーション固有のクライアント・プログラムには、ユーザーからパスワードを取得するコードが記述されていることが必要です。クライアントがアプリケーションに参加するためにTPINITIALIZEを呼び出すと、非暗号化パスワードがTPINFDEF-RECレコードに格納されて評価されます。ATMIクライアントがすべてのサービスをリクエストして、それに対する応答を受信したら、TPTERM(3cbl)を使用してアプリケーションから分離できます。TPTERMの呼出しには、次のシグネチャを使用します。実行可能ATMIクライアントをビルドするには、buildclient(1)コマンドを実行して、Oracle Tuxedoシステム・ライブラリとその他のすべての参照ファイルを使用してアプリケーションをコンパイルします。COBOLプログラムをコンパイルするには、-Cオプションを指定します。buildclientコマンドでは、次の構文を使用します。表4-4は、buildclientコマンドのオプションを示しています。
デフォルトでは、buildclientコマンドはUNIXのccコマンドを呼び出します。環境変数ALTCCを指定して別のコンパイル・コマンドを指定したり、ALTCFLAGSを指定してコンパイル・フェーズやリンク・フェーズにフラグを設定することができます。ALTCCは、デフォルトでは、MicroFocus Net Expressコンパイラを使用するcobccに設定されます。Fujitsu NetCOBOLを使用するには、WindowsシステムでもALTCCを設定する必要があります。NetCOBOL用にALTCC=cobcc85を設定する必要があります。詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「環境変数の設定」を参照してください。
注意:
• 『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』の「サーバーのビルド」リスト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と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.