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

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

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

このトピックには次の項が含まれます:

 


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

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ファイルに定義されているフィールドを示しています。

表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を明示的に呼び出す必要があります。

クライアントの名前付け

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

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

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

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

非請求メッセージの送受信の詳細は、「イベント・ベースのクライアントおよびサーバーのコーディング」、tmadmin(1)の詳細は、『Oracle Tuxedo ATMI C言語関数リファレンス』を参照してください。

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

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

クライアントの名前付け

非請求通知の処理

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

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

ディップ・インでは、メッセージの到着を確認するまでの間隔が長い場合があるため、アプリケーションでTPCHKUNSOL呼出しを実行して、すでに到着している非請求メッセージがないかどうかを確認できます。TPCHKUNSOL呼出しの詳細は、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』「イベント・ベースのクライアントおよびサーバーのコーディング」を参照してください。

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

表4-2 TPINFDEF-RECレコードのクライアント通知でのフラグ
Flag
説明
TPU_SIG
シグナルによる任意通知を選択します。このフラグは、シングル・スレッドでシングル・コンテキストのアプリケーションのみで使用します。このモードの利点は、直ちに通知できることです。このモードには、次のような不都合があります。
  • ネイティブ・クライアントを実行している場合、呼出し側プロセスで送信元プロセスと同じUIDを使用する必要があります。(ワークステーション・クライアントには、この制約はありません。)
  • すべてのプラットフォーム上でTPU_SIGが使用できるわけではありません。特に、MS-DOSワークステーションでは使用できません。
システムや環境の要件を満たしていない場合にこのフラグを指定すると、フラグにTPU_DIPが設定され、ログにイベントが記録されます。
TPU_DIP (デフォルト)
ディップ・インによる任意通知を選択します。この場合、クライアントはTPSETUNSOL呼出しを使用してメッセージ処理ルーチンの名前を指定し、TPCHKUNSOL呼出しを使用して待機中の非請求メッセージを確認できます。
TPU_THREAD
別のスレッド内のTHREAD通知を指定します。このフラグは、マルチスレッドをサポートするプラットフォーム専用です。マルチスレッドがサポートされていないプラットフォームでTPU_THREADを指定すると、無効な引数として処理されます。その結果、エラーが戻されて、TP-STATUSTPEINVALが設定されます。
TPU_IGN
任意通知を無視します。

TPINFDEF-RECフラグの詳細は、『Oracle Tuxedo ATMI COBOL関数リファレンス』「TPINITIALIZE(3cbl)」を参照してください。

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

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

表4-3 TPINFDEF-RECレコードのシステム・アクセス・フラグ
モード
説明
TPSA-PROTECTED
アプリケーション内でATMI関数を呼び出し、共用メモリーを使用してOracle Tuxedoシステムの内部表にアクセスします。Oracle Tuxedoシステム・ライブラリ外のアプリケーション・コードからのアクセスに対して、共用メモリーを保護します。この値は、NO_OVERRIDEが指定されている場合を除き、UBBCONFIGの値に優先します。UBBCONFIGの詳細は、『Oracle Tuxedoアプリケーションの設定』を参照してください。
TPSA-FASTPATH(デフォルト)
アプリケーション・コード内でATMI関数を呼び出し、共用メモリーを使用してOracle Tuxedoシステム内部にアクセスします。Oracle Tuxedoシステム・ライブラリ外のアプリケーション・コードからのアクセスに対して、共用メモリーを保護しません。この値は、NO_OVERRIDEが指定されている場合を除き、UBBCONFIGの値に優先します。UBBCONFIGの詳細は、『Oracle Tuxedoアプリケーションの設定』を参照してください。

リソース・マネージャとの関連付け

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

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

クライアント認証

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 -C filename.cbl -o filename -f filenames -l filenames

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

表4-4 buildclientのオプション
オプションまたは引数
説明
filename.cbl
コンパイルするCOBOLアプリケーション。
-o filename
実行可能な出力ファイル。出力ファイルのデフォルト名はa.outです。
-f filenames
Oracle Tuxedoシステムのライブラリより先にリンクされるファイルのリスト。-fオプションは、コマンド行で複数回指定したり、各-fに複数のファイル名を指定できます。COBOLプログラム・ファイル(file.cbl)を指定すると、リンクされる前にコンパイルが行われます。他のオブジェクト・ファイル(file.o)を個別に指定したり、アーカイブ・ファイル(file.a)にまとめて指定することもできます。
-l filenames
Oracle Tuxedoシステム・ライブラリの後にリンクされるファイルのリスト。-lオプションは、コマンド行で複数回指定したり、各-lに複数のファイル名を指定できます。COBOLプログラム・ファイル(file.cbl)を指定すると、リンクされる前にコンパイルが行われます。他のオブジェクト・ファイル(file.o)を個別に指定したり、アーカイブ・ファイル(file.a)にまとめて指定することもできます。
-r
実行可能サーバーにリンクされるリソース・マネージャのアクセス・ライブラリ。アプリケーション管理者は、buildtms(1)コマンドを使用して、すべての有効なリソース・マネージャ情報を$TUXDIR/updataobj/RMファイルに事前に定義しておく必要があります。指定できるリソース・マネージャは1つだけです。詳細は、『Oracle Tuxedoアプリケーションの設定』を参照してください。

注: 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クライアント・プロセスがアプリケーションに参加してから分離するまでの処理を示しています。

リスト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の値については、『C言語を使用したOracle Tuxedo ATMIアプリケーションのプログラミング』「エラーの管理」を参照してください。各ATMI呼出しで戻される全エラー・コードのリストについては、『Oracle Tuxedo ATMI COBOL関数リファレンス』COBOLアプリケーション・トランザクション・モニター・インタフェースの紹介に関する項を参照してください。

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

リスト4-2 アプリケーションへの参加と分離
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を呼び出して、中央イベント・ログにメッセージを書き込みます。


  先頭に戻る       前  次