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

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

 Previous Next Contents View as PDF  

サーバのコーディング

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

 


BEA Tuxedo システムの制御プログラム

BEA Tuxedo システムには、サーバを簡単に開発できるように、サーバのロード・モジュール用に定義済み制御プログラムが提供されています。buildserver -C コマンドを実行すると、制御プログラムが自動的にサーバの一部として組み込まれます。

注記 制御プログラムはシステムで提供されたものなので、変更することはできません。

定義済み制御プログラムは、アプリケーションへの参加と終了のほかに、サーバに代わって次の操作を行います。

以上からわかるように、main() ルーチンは、アプリケーションへの参加と終了、レコードやトランザクションの管理、および通信に関する詳細を扱っています。

注記 システムで提供される制御プログラムは、アプリケーションへの参加と終了を行います。そのため、TPINITIALIZE または TPTERM ルーチンへの呼び出しをコードに記述しないでください。これらのルーチンを呼び出すとエラーが発生して、TP-STATUSTPEPROTO が返されます。TPINITIALIZE または TPTERM ルーチンの詳細については、4-1 ページの「クライアントのコーディング」を参照してください。

 


システムで提供されるサーバおよびサービス

制御プログラムは、システムで提供される 1 つのサーバ AUTHSVR、および 2 つのサブルーチン TPSVRINITTPSVRDONE を提供します。これらの 3 つのデフォルト・バージョンについては、以降の節で説明します。これらのサーバとサブルーチンは、ご使用のアプリケーションに合わせて変更することができます。

注記 TPSVRINITTPSVRDONE を独自にコーディングする場合、この 2 つのルーチンのデフォルト・バージョンが、それぞれ tx_open()tx_close() を呼び出すことに注意してください。tx_open() ではなく tpopen() を呼び出す TPSVRINIT の新しいバージョンをコーディングする場合は、tpclose() を呼び出す TPSVRDONE もコーディングする必要があります。つまり、この 2 つのルーチンが呼び出すオープンとクローズのルーチンは対になっていなければなりません。

システムで提供されるサーバ: AUTHSVR( )

AUTHSVR(5) を使用すると、アプリケーションで各クライアントの認証を行うことができます。このサーバは、アプリケーションのセキュリティ・レベルが TPAPPAUTHUSER_AUTHACL、または MANDATORY_ACL に設定されている場合に、TPINITIALIZE ルーチンによって呼び出されます。

AUTHSVR のサービスは、USER-DATA-REC レコードでユーザ・パスワードを確認します。このユーザ・パスワードは、TPINFDEF-REC レコードの PASSWD フィールドにあるアプリケーション・パスワードとは異なります。デフォルトでは、システムによって data から文字列が取得され、それと合致する文字列が /etc/passwd ファイルで検索されます。

TPINITIALIZE がネイティブ・サイトのクライアントから呼び出された場合、受信した USER-DATA-REC レコードはそのまま転送されます。そのため、アプリケーションでパスワードの暗号化が必要な場合、それに応じてクライアント・プログラムをコーディングする必要があります。

TPINITIALIZE がワークステーション・クライアントから呼び出された場合、データは暗号化されてからネットワークに送信されます。

システムで提供されるサービス : TPSVRINIT ルーチン

サーバの起動時に、BEA Tuxedo システムの制御プログラムはその初期化時、つまりサービス要求の処理を開始する前に、TPSVRINIT(3cbl) を呼び出します。

アプリケーションがこのルーチンのカスタム・バージョンをサーバに提供していない場合、制御プログラムで提供されるデフォルトのルーチンが呼び出されます。このルーチンは、リソース・マネージャをオープンし、エントリを中央イベント・ログに記録してサーバの起動が成功したことを示します。中央ユーザ・ログは自動的に生成されるファイルで、USERLOG(3cbl) ルーチンを呼び出して、プロセスがこのファイルにメッセージを書き込みます。中央イベント・ログの詳細については、11-1 ページの「エラーの管理」を参照してください。

TPSVRINIT ルーチンを使用すると、アプリケーションで要求される次のような初期化プロセスを行うことができます。

以降の節では、TPSVRINIT を呼び出すことによって、これらの初期化プロセスがどのように行われるのかをコード例で示します。以下のコード例では示していませんが、このルーチン内ではメッセージ交換を行うこともできます。ただし、非同期応答が未処理のままで TPSVRINIT ルーチンが制御を戻すと、このルーチンは失敗します。その場合、BEA Tuxedo システムでは応答は無視されて、サーバが正常に終了します。

また、TPSVRINIT ルーチンで、トランザクションを開始したり終了することができます。11-1 ページの「エラーの管理」を参照してください。

TPSVRINIT ルーチンの呼び出しには、次の文法を使用します。

LINKAGE SECTION.
01 CMD-LINE.
05 ARGC PIC 9(4) COMP-5.
05 ARGV.
10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC
.
01 TPSTATUS-REC.
COPY TPSTATUS.
PROCEDURE DIVISION USING CMD-LINE TPSTATUS-REC.
* ユーザ・コード
EXIT PROGRAM.

コマンド行オプションの取得

サーバは、起動時に最初の処理として、コンフィグレーション・ファイルに指定されているサーバ・オプションを読み取ります。これらのオプションは、引数の個数を格納する ARGC と、1 つの SPACE 文字で区切られた引数を格納する ARGV を使用して渡されます。その後、定義済み制御プログラムが TPSVRINIT を呼び出します。

次のコード例は、TPSVRINIT ルーチンでコマンド行オプションを取得する方法を示しています。

コード リスト 5-1 TPSVRINIT を使用したコマンド行オプションの取得

  IDENTIFICATION DIVISION.
PROGRAM-ID. TPSVRINIT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. USL-486.
OBJECT-COMPUTER. USL-486.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
*
LINKAGE SECTION.
*
01 CMD-LINE.
05 ARGC PIC 9(4) COMP-5.
05 ARGV.
10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC.
01 SERVER-INIT-STATUS.
COPY TPSTATUS.
*
PROCEDURE DIVISION USING CMD-LINE SERVER-INIT-STATUS.
**********************************************************
* ARGC は引数の個数を示し
* ARGV は 1 つの SPACE で区切られた引数を格納します。
**********************************************************
A-START.
*
. . . INSPECT the ARGV line and process arguments
IF arguments are invalid
SET TPEINVAL IN SERVER-INIT-STATUS TO TRUE.
ELSE arguments are OK continue
SET TPOK IN SERVER-INIT-STATUS TO TRUE.
*
EXIT PROGRAM.

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

TPSVRINIT のもう 1 つの使用法として、リソース・マネージャをオープンすることができます。以下のコード例は、その方法を示しています。■訳文不要■BEA Tuxedo システムには、リソース・マネージャをオープンするルーチンとして、TPOPEN(3cbl)TXOPEN(3cbl) があります。また、これらと対のルーチンとして、TPCLOSE(3cbl)TXCLOSE(3cbl) があります。これらのルーチンを呼び出してリソース・マネージャをオープンしたりクローズするアプリケーションは、その意味では移植性があります。これらのアプリケーションは、コンフィギュレーション・ファイルに設定されたリソース・マネージャのインスタンス固有の情報にアクセスすることによって動作します。

これらのルーチン呼び出しは省略可能です。また、リソース・マネージャがデータベースの場合、リソース・マネージャ固有の呼び出しがデータ操作言語 (DML) の一部であるときは、その呼び出しの代わりに使用できます。USERLOG(3cbl) ルーチンを使用して、中央イベント・ログに書き込んでいることに注目してください。

注記 コマンド行オプションを受け取り、データベースをオープンする初期化関数を作成するには、次のコード例と前述のコード例を組み合わせます。

コード リスト 5-2 TPSVRINIT を使用したリソース・マネージャのオープン

  IDENTIFICATION DIVISION.
PROGRAM-ID. TPSVRINIT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. USL-486.
OBJECT-COMPUTER. USL-486.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TPSTATUS-REC.
COPY TPSTATUS.
01 LOGMSG PIC X(50).
01 LOGMSG-LEN PIC S9(9) COMP-5.
*
LINKAGE SECTION.
01 CMD-LINE.
05 ARGC PIC 9(4) COMP-5.
05 ARGV.
10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC.
01 SERVER-INIT-STATUS.
COPY TPSTATUS.
*
PROCEDURE DIVISION USING CMD-LINE SERVER-INIT-STATUS.
A-START.
. . . INSPECT the ARGV line and process arguments
IF arguments are invalid
MOVE "Invalid Arguments Passed" TO LOGMSG
PERFORM EXIT-NOW.
ELSE arguments are OK continue

CALL "TPOPEN" USING TPSTATUS-REC.
IF NOT TPOK
MOVE "TPOPEN Failed" TO LOGMSG
ELSE IF TPESYSTEM
MOVE "System /T error has occurred" TO LOGMSG
ELSE IF TPEOS
MOVE "An Operating System error has occurred" TO LOGMSG
ELSE IF TPEPROTO
MOVE "TPOPEN was called in an improper Context" TO LOGMSG
ELSE IF TPERMERR
MOVE "Resource manager Failed to Open" TO LOGMSG
PERFORM EXIT-NOW.
SET TPOK IN SERVER-INIT-STATUS TO TRUE.
EXIT PROGRAM.
EXIT-NOW.
SET TPEINVAL IN SERVER-INIT-STATUS TO TRUE
MOVE 50 LOGMSG-LEN.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.
EXIT PROGRAM.

初期化時にエラーが発生しないように、サーバを終了してからサービス要求の処理を開始するように TPSVRINIT をコーディングできます。

システムで提供されるサービス : TPSVRDONE ルーチン

TPSVRINITTPOPEN を呼び出してリソース・マネージャをオープンするのと同じように、TPSVRDONE ルーチンは TPCLOSE を呼び出してリソース・マネージャをクローズします。

TPSVRDONE ルーチンの呼び出しには、次の文法を使用します。

  01 TPSTATUS-REC.
COPY TPSTATUS.
PROCEDURE DIVISION.
* ユーザ・コード
EXIT PROGRAM.

次のコード例は、TPSVRDONE ルーチンを使用して、リソース・マネージャをクローズして終了する方法を示しています。

コード リスト 5-3 TPSVRDONE を使用したリソース・マネージャのクローズ

  IDENTIFICATION DIVISION.
PROGRAM-ID. TPSVRDONE.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. USL-486.
OBJECT-COMPUTER. USL-486.
*
DATA DIVISION.
WORKING-STORAGE SECTION.
01 TPSTATUS-REC.
COPY TPSTATUS.
01 LOGMSG PIC X(50).
01 LOGMSG-LEN PIC S9(9) COMP-5.
01 SERVER-DONE-STATUS.
COPY TPSTATUS.
PROCEDURE DIVISION.
A-START.
CALL "TPCLOSE" USING TPSTATUS-REC.
IF NOT TPOK
MOVE "TPCLOSE Failed" TO LOGMSG
ELSE IF TPESYSTEM
MOVE "System /T error has occurred" TO LOGMSG
ELSE IF TPEOS
MOVE "An Operating System error has occurred" TO LOGMSG
ELSE IF TPEPROTO
MOVE "TPCLOSE was called in an improper Context" TO LOGMSG
ELSE IF TPERMERR
MOVE "Resource manager Failed to Open" TO LOGMSG
PERFORM EXIT-NOW.
SET TPOK IN SERVER-DONE-STATUS TO TRUE.
EXIT PROGRAM.
EXIT-NOW.
SET TPEINVAL IN SERVER-DONE-STATUS TO TRUE
MOVE 50 LOGMSG-LEN.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.
EXIT PROGRAM.

 


サーバのコーディングのためのガイドライン

通信の詳細は BEA Tuxedo システムの制御プログラムによって処理されるので、プログラマは通信のインプリメントよりもアプリケーション・サービスのロジックに集中できます。ただし、システムで提供される制御プログラムと互換性を保つために、アプリケーション・サービスが特定の規約に従っている必要があります。これらの規約は、サービス・ルーチンをコーディングするためのサービス・テンプレートと言えます。以下に、これらの規約についてまとめます。

 


サービスの定義

サービス・ルーチンをコーディングする場合、最初に TPSVCSTART(3cbl) ルーチンを呼び出す必要があります。このルーチンは、サービスのパラメータとデータを取得します。TPSVCSTART ルーチンの呼び出しには、次の文法を使用します。

01 TPSVCDEF-REC.
COPY TPSVCDEF.
01 TPTYPE-REC.
COPY TPTYPE.
01 DATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPSVCSTART" USING TPSVCDEF-REC TPTYPE-REC DATA-REC TPSTATUS-REC.

サービス情報のデータ構造体は、COBOL の COPY ファイルに TPSVCDEF として定義されます。このデータ構造体のメンバは、次のとおりです。

 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 0.
88 TPCONV VALUE 1.
*
05 APPKEY PIC S9(9) COMP-5.
05 CLIENTID OCCURS 4 TIMES PIC S9(9) COMP-5.
05 SERVICE-NAME PIC X(15).

次の表は、TPSVCDEF データ構造体のメンバを示しています。

表 5-1 TPSVCDEF データ構造体

フィールド

説明

COMM-HANDLE

要求元プロセスがサービスの呼び出しに使用した通信ハンドル。この通信ハンドルは、サービス・ルーチンに対して指定されます。

SETTINGS
(TPBLOCK-FLAG
TPTRAN-FLAG
など)

サーバの特性を制御するその他の設定。設定値の詳細については、『BEA Tuxedo COBOL リファレンス』を参照してください。

APPKEY

アプリケーションで使用するために予約された値。アプリケーション固有の認証が設計に含まれている場合、認証サーバによって認証の成功または失敗を示す値、およびクライアント認証キーが返される必要があります。認証サーバは、クライアントがアプリケーションに参加するときに呼び出されます。BEA Tuxedo システムは、APPKEY をクライアントのために保持し、このフィールドに格納して以降のサービス要求に渡します。APPKEY がサービスに渡されたときは、クライアントの認証は終了しています。ただし、サービス内で APPKEY フィールドを使用して、サービスを呼び出したユーザ、またはそのユーザに関するそのほかのパラメータを識別できます。

CLIENTID

要求元クライアントの識別子。

SERVICE-NAME

要求元プロセスがサービスの呼び出しに使用したサービス・ルーチンの名前。

TPTYPE-REC データ構造体については、型付きレコードの定義を参照してください。

DATA-REC に格納される要求データにサービスがアクセスする場合は、コンフィギュレーション・ファイルでそのサービスに定義されているレコード・タイプにデータが格納されるようにコーディングする必要があります。制御が正常に戻った場合、DATA-REC には受け取ったデータが格納され、LEN には移動した実際のバイト数が格納されます。

次のコード例は、一般的なサービス定義を示しています。

コード リスト 5-4 一般的なサービス定義

    IDENTIFICATION DIVISION.
PROGRAM-ID. BUYSR.
AUTHOR. TUXEDO DEVELOPMENT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. USL-486.
OBJECT-COMPUTER. USL-486.
*
INPUT-OUTPUT SECTION.
. . .
******************************************************
* Tuxedo の定義
******************************************************
01 TPSVCRET-REC.
COPY TPSVCRET.
*
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
******************************************************
* ログ・メッセージの定義
******************************************************
01 LOGMSG.
05 LOGMSG-TEXT PIC X(50).
*
01 LOGMSG-LEN PIC S9(9) COMP-5.
******************************************************
* ユーザ定義のデータ・レコード
******************************************************
01 CUST-REC.
COPY CUST.
*
LINKAGE SECTION.
*
PROCEDURE DIVISION.
*
START-BUYSR.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
OPEN files or DATABASE
******************************************************
* クライアントから送信されたデータの取得
******************************************************
MOVE "Server Started" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
MOVE LENGTH OF CUST-REC TO LEN IN TPTYPE-REC.
CALL "TPSVCSTART" USING TPSVCDEF-REC
TPTYPE-REC
CUST-REC
TPSTATUS-REC.
IF TPTRUNCATE
MOVE "Input data exceeded CUST-REC length" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM A-999-EXIT.
IF NOT TPOK
MOVE "TPSVCSTART Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM A-999-EXIT.
IF REC-TYPE NOT = "VIEW"
MOVE "REC-TYPE in not VIEW" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM A-999-EXIT.
IF SUB-TYPE NOT = "cust"
MOVE "SUB-TYPE in not cust" TO LOGMSG-TEXT
PERFORM DO-USERLOG
PERFORM A-999-EXIT.
. . .
set consistency level of the transaction
.. .
******************************************************
* 終了
******************************************************
A-999-EXIT.
MOVE "Exiting" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
SET TPFAIL TO TRUE.
COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC
TPTYPE-REC BY TPTYPE-REC
DATA-REC BY CUST-REC
TPSTATUS-REC BY TPSTATUS-REC.
******************************************************
* ユーザ・ログへの書き込み
******************************************************
DO-USERLOG.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.

この例では、クライアント側の要求レコードが最初に送られたときに、REC-TYPEVIEWSUB-TYPEcust が設定されています。BUYSR サービスは、VIEW 型レコードを認識するサービスとしてコンフィギュレーション・ファイルに定義されています。BUYSR サービスは、CUST-REC レコードにアクセスしてデータ・レコードを取得します。このレコードが取得された後、データベースへの最初のアクセスを行う前に、トランザクションの整合性レベルが指定されています。トランザクションの整合性レベルの詳細については、9-1 ページの「グローバル・トランザクションのコーディング」を参照してください。

注記 優先順位を取得する TPGPRIO、および優先順位を設定する TPSPRIO 関数の詳細については、6-17 ページの「メッセージの優先順位の設定および取得」を参照してください。

ここで示すコード例は、PRINTER サービスが TPGPRIO ルーチンを使用して、受信したばかりの要求の優先順位を確認する方法を示しています。その優先順位に基づいて、印刷ジョブが適切なプリンタ RNAME に送られます。

その後、INPUT-REC の内容がプリンタに送られます。アプリケーションは TPSVCDEF-REC を照会し、応答が必要かどうかを判定します。応答が必要な場合は、プリンタ名をクライアントに返します。TPRETURN ルーチンの詳細については、サービス・ルーチンの終了を参照してください。

コード リスト 5-5 受信した要求の優先順位の確認

    IDENTIFICATION DIVISION.
PROGRAM-ID. PRINTSR.
AUTHOR. TUXEDO DEVELOPMENT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. USL-486.
OBJECT-COMPUTER. USL-486.
*
INPUT-OUTPUT SECTION.
. . .
******************************************************
* Tuxedo の定義
******************************************************
01 TPSVCRET-REC.
COPY TPSVCRET.
*
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
*
01 TPPRIDEF-REC.
COPY TPPRIDEF.
******************************************************
* ログ・メッセージの定義
******************************************************
01 LOGMSG.
05 FILLER PIC S9(9) VALUE
"TP-STATUS=".
05 LOG-TP-STATUS PIC S9(9).
05 LOGMSG-TEXT PIC X(50).
*
01 LOGMSG-LEN PIC S9(9) COMP-5.
******************************************************
* ユーザ定義のデータ・レコード
******************************************************
01 INPUT-REC PIC X(1000).
01 PRNAME PIC X(20).
*
LINKAGE SECTION.
*
PROCEDURE DIVISION.
*
START-PRINTSR.
MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
OPEN files or DATABASE
******************************************************
* クライアントから送信されたデータの取得
******************************************************
MOVE ZERO to TP-STATUS.
MOVE "Server Started" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
MOVE LENGTH OF INPUT-REC TO LEN.
CALL "TPSVCSTART" USING TPSVCDEF-REC
TPTYPE-REC
INPUT-REC
                      TPSTATUS-REC.
IF NOT TPOK
MOVE "TPSVCSTART Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
SET TPFAIL TO TRUE.
PERFORM A-999-EXIT.
. . .
Check other parameters
CALL "TPGPRIO" USING TPPRIDEF-REC
TPSTATUS-REC.
IF NOT TPOK
MOVE "TPGPRIO Failed" TO LOGMSG-TEXT
PERFORM DO-USERLOG
SET TPFAIL TO TRUE.
PERFORM A-999-EXIT.
IF PRIORITY < 20
MOVE "BIGJOBS" TO RNAME
ELSE IF PRIORITY < 60
MOVE "MEDJOBS" TO RNAME
ELSE
MOVE "HIGHSPEED" TO RNAME.
. . .
Print INPUT-REC on RNAME printer
. . .
IF TPNOREPLY
MOVE SPACES TO REC-TYPE
MOVE 0 TO LEN
SET TPSUCCESS TO TRUE
PERFORM A-999-EXIT
IF TPREPLY
MOVE "STRING" TO REC-TYPE
MOVE LENGTH OF PRNAME TO LEN
SET TPSUCCESS TO TRUE
PERFORM A-999-EXIT.
******************************************************
* 終了
******************************************************
A-999-EXIT.
MOVE "Exiting" TO LOGMSG-TEXT.
PERFORM DO-USERLOG.
SET TPSUCCESS TO TRUE.
COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC
TPTYPE-REC buTPTYPE-REC
DATA-REC BY PRNAME
TPSTATUS-REC BY TPSTATUS-REC.
******************************************************
* ユーザ・ログへの書き込み
******************************************************
DO-USERLOG.
     MOVE TP-STATUS TO LOG-TP-STATUS.
CALL "USERLOG" USING LOGMSG
LOGMSG-LEN
TPSTATUS-REC.

 


サービス・ルーチンの終了

TPRETURN(3cbl)TPCANCEL(3cbl)、および TPFORWAR(3cbl) ルーチンは、サービス・ルーチンが完了したことをそれぞれ次の方法で通知します。

応答の送信

TPRETURN(3cbl) および TPFORWAR(3cbl) 呼び出しは、サービス・ルーチンの終了を示す EXIT 文を含んだ COBOL の copy ファイルです。これらの呼び出しは、それぞれ要求元にメッセージを送信するか、または別のサービスに要求を転送します。TPRETURN ルーチンの呼び出しには、次の文法を使用します。

 01 TPSVCRET-REC.
COPY TPSVCRET.
01 TPTYPE-REC.
COPY TPTYPE.
01 DATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC
TPTYPE-REC BY TPTYPE-REC
DATA-REC BY DATA-REC
TPSTATUS-REC BY TPSTATUS-REC.

注記 ここでは、CALL ではなく COPY を使用する必要があります。これにより、EXIT 文が正しく呼び出され、COBOL サービス・ルーチンが BEA Tuxedo システムに制御を戻します。

次のコードは、TPSVCRET-REC レコードの文法を示しています。

 05 TPRETURN-VAL    PIC S9(9) COMP-5.
88 TPSUCCESS VALUE 0.
88 TPFAIL VALUE 1.
88 TPFAIL VALUE 2.
05 APPL-CODE PIC S9(9) COMP-5.

次の表は、TPSVCRET-REC データ構造体のメンバを示しています。

表 5-2 TPSVCRET-REC データ構造体のメンバ

メンバ

説明

TP-RETURN-VAL

サービスが正常に終了したかどうかをアプリケーション・レベルで示す値。この値は、シンボリック名で表される整数値です。有効な設定は、次のとおりです。

この引数の値がグローバル・トランザクションに与える影響については、9-1 ページの「グローバル・トランザクションのコーディング」を参照してください。

APPLC-CODE

アプリケーション定義の戻りコードを呼び出し元に返します。クライアントは、APPL-RETURN-CODE IN TPSTATUS-REC を照会して、APPLC-CODE に返された値にアクセスできます。成功または失敗に関係なく、このコードはルーチンから返されます。

TPTYPE-REC レコードについては、サービスの定義を参照してください。

サービス・ルーチンの主なタスクは、要求を処理してクライアント・プロセスに応答を返すことです。ただし、要求されたタスクを行うために必要なすべての処理を 1 つのサービスで行う必要はありません。サービスは要求元として動作し、クライアントが元の要求を行ったときと同じように、TPCALL または TPACALL を呼び出して、要求呼び出しを別のサービスに渡すことができます。

注記 TPCALL および TPACALL ルーチンの詳細については、6-1 ページの「クライアントおよびサーバへの要求/応答のコーディング」を参照してください。

TPRETURN が呼び出された場合、常に制御プログラムに制御が戻ります。非同期応答でサービスが要求を送信している場合、制御プログラムに制御を戻す前にすべての応答を受信するか、または TPCANCEL を使用して既に送信した要求を無効にする必要があります。それ以外の場合、未処理の応答は BEA Tuxedo システムの制御プログラムで受信されると自動的に破棄され、呼び出し元にエラーが返されます。

クライアントが TPCALL を使用してサービスを呼び出した場合、TPRETURN の呼び出しが成功すると、O-DATA-REC レコードから応答メッセージを取得できます。TPACALL を使用して要求を送信し、TPRETURN から正常に制御が戻されると、TPGETRPLYDATA-REC レコードに応答メッセージが格納されます。

応答が必要な場合に、TPRETURN の引数の処理時にエラーが発生すると、呼び出し元プロセスに失敗を示すメッセージが送信されます。呼び出し元は、TP-STATUS に格納されている値を調べてエラーを検出します。失敗を示すメッセージが送信された場合、TP-STATUSTPESVCERR が設定されます。この値は、APPL-RETURN-CODE IN TPSTATUS-REC の値よりも優先されます。このようなエラーが発生した場合、応答データは返されず、呼び出し元の出力レコードの内容と長さは変更されません。

TPRETURN が不明なタイプのレコードにメッセージを返すか、または呼び出し元で使用できないレコードにメッセージを返した場合、つまり TPNOCHANGE が設定されて呼び出しが行われた場合、TP-STATUSTPEOTYPE が返されます。その場合、アプリケーションの成功また失敗は判定されず、呼び出し元の出力レコードの内容と長さは変更されません。

TPRETURN ルーチンが呼び出され、呼び出し元が応答を待っている間にタイムアウトが発生した場合、APPL-RETURN-CODE IN TPSTATUS-REC に返される値は意味を持ちません。この状況は、TP-STATUS に値が返されるどの状況よりも優先します。その場合、TP-STATUSTPETIME が設定され、応答データは送信されず、呼び出し元の応答レコードの内容と長さは変更されません。BEA Tuxedo システムにはブロッキング・タイムアウトとトランザクション・タイムアウトの 2 種類のタイムアウトがあります。詳細については、9-1 ページの「グローバル・トランザクションのコーディング」を参照してください。

ここで示すコード例は、XFER サーバの一部である TRANSFER サービスを示しています。基本的に、TRANSFER サービスは WITHDRAWAL および DEPOSIT サービスへの同期呼び出しを行います。このサービスでは、WITHDRAWALDEPOSIT の両サービスの呼び出しに同じ要求レコードを使用する必要があるので、応答メッセージ用に別のレコードが割り当てられます。WITHDRAWAL の呼び出しが失敗した場合、フォーム上のステータス行に「cannot withdraw」というメッセージが出力され、TPRETURN ルーチンの TP-RETURN-VAL IN TPSVCRET-RECTPFAIL が設定されます。呼び出しが成功した場合、振替元口座の残高が応答レコードから取得されます。

注記 次のコード例では、フィールド化レコード transf 内の ACCOUNT_ID フィールドのゼロ番目のオカレンスに、アプリケーションが cr_id 変数から取得した「振替先口座」の識別子を移動しています。このような移動が必要なのは、FML レコード内のフィールドのこのオカレンスが、データ依存型ルーティングに使用されるからです。詳細については、『BEA Tuxedo アプリケーションの設定』を参照してください。

withdrawal サービス呼び出しのシナリオは、DEPOSIT サービスへの呼び出しにも適用できます。呼び出しが成功すると、このサービスによって TP-RETURN-VAL IN TPSVCRET-RECTPSUCCESS が設定されて、適切な残高情報がステータス行に返されます。

コード リスト 5-6 TPRETURN ルーチン

   IDENTIFICATION DIVISION.
PROGRAM-ID. TRANSFER.
AUTHOR. TUXEDO DEVELOPMENT.
ENVIRONMENT DIVISION.
CONFIGURATION SECTION.
SOURCE-COMPUTER. USL-486.
OBJECT-COMPUTER. USL-486.
*
INPUT-OUTPUT SECTION.
. . .
******************************************************
* Tuxedo の定義
******************************************************
01 TPSVCRET-REC.
COPY TPSVCRET.
*
01 TPTYPE-REC.
COPY TPTYPE.
*
01 TPSTATUS-REC.
COPY TPSTATUS.
*
01 TPSVCDEF-REC.
COPY TPSVCDEF.
******************************************************
* ユーザ定義のデータ・レコード
******************************************************
01 TRANS-REC.
COPY TRANS-AMOUNT.
*
LINKAGE SECTION.
*
PROCEDURE DIVISION.
*
START-TRANSFER.
******************************************************
* クライアントから送信されたデータの取得
******************************************************
MOVE LENGTH OF TRANS-REC TO LEN.
CALL "TPSVCSTART" USING TPSVCDEF-REC
TPTYPE-REC
TRANS-REC
TPSTATUS-REC.
IF NOT TPOK
MOVE "Transaction Encountered An Error" TO STATUS-LINE
SET TPFAIL TO TRUE.
COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC
TPTYPE-REC BY TPTYPE-REC
DATA-REC BY TRANS-REC
TPSTATUS-REC BY TPSTATUS-REC.
ELSE
. . . Check other parameters
******************************************************
* 振替元と振替先の口座番号が有効かどうかを確認します。
******************************************************
CALL "FIND-ACCOUNT-FUNCTION" USING TRANS-DEBIT-ACCOUNT IN TRANS-REC.

IF TRANS-DEBIT-ACCOUNT is not valid
MOVE "Invalid Debit Account Number"
TO STATUS-LINE IN TRANS-REC
SET TPFAIL TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.

CALL "FIND-ACCOUNT-FUNCTION" USING TRANS-CREDIT-ACCOUNT IN TRANS-REC.

IF TRANS-CREDIT-ACCOUNT is not valid
MOVE "Invalid Credit Account Number"
TO STATUS-LINE IN TRANS-REC
SET TPFAIL TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.
******************************************************
* 振替金額を確認します。
******************************************************
IF TRANS-AMOUNT IN TRANS-REC < 0
             MOVE "Invalid Transfer Amount Requested"
TO STATUS-LINE IN TRANS-REC
SET TPFAIL TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.
******************************************************
* 別のサービスを使用して Withdrawal を実行します。
******************************************************
MOVE "WITHDRAWAL" TO SERVICE-NAME.
. . . set other TPCALL parameters
CALL "TPCALL" USING . . .
IF NOT TPOK
MOVE "Cannot withdraw from debit account"
TO STATUS-LINE IN TRANS-REC
SET TPFAIL TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.
******************************************************
* 別のサービスを使用して Deposit を実行します。
******************************************************
MOVE "DEPOSIT" TO SERVICE-NAME.
. . . set other TPCALL parameters
CALL "TPCALL" USING . . .
IF NOT TPOK
MOVE "Cannot Deposit into credit account"
TO STATUS-LINE IN TRANS-REC
SET TPFAIL TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.
. . .
MOVE "Transfer completed" TO STATUS-LINE IN TRANS-REC
. . . MOVE all the data into TRANS-REC needed by the client
SET TPSUCCESS TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.

記述子の無効化

TPGETRPLY を呼び出したサービス (6-1 ページの「クライアントおよびサーバへの要求/応答のコーディング」を参照) が TPETIME で失敗して要求を取り消す場合、TPCANCEL(3cbl) を呼び出して記述子を無効にできます。以降、応答が届いても自動的に破棄されます。

TPCANCEL はトランザクション応答、つまり TPNOTRAN フラグが設定されていない状態で呼び出された要求への応答には使用できません。トランザクション内では、TPABORT(3cbl) がトランザクションの呼び出し記述子を無効にします。

次のコード例は、タイムアウト後の応答を無効にする方法を示しています。

コード リスト 5-7 タイムアウト後の応答の無効化

. . .  Set up parameters to TPACALL
SET TPNOTRAN TO TRUE.
CALL "TPACALL" USING TPSVCDEF-REC
TPTYPE-REC
DEBIT-REC
TPSTATUS-REC.
IF NOT TPOK
error processing
. . .
CALL "TPGETRPLY" USING TPSVCDEF-REC
TPTYPE-REC
DEBIT-REC
TPSTATUS-REC.
IF NOT TPOK
error processing
IF TPETIME
CALL "TPCANCEL" TPSVCDEF-REC
TPSTATUS-REC.
. . .
SET TPSUCCESS TO TRUE.
COPY TPRETURN REPLACING TPSVCRET-REC BY TPSVCRET-REC
TPTYPE-REC BY TPTYPE-REC
DATA-REC BY DEBIT-REC
TPSTATUS-REC BY TPSTATUS-REC.

要求の転送

TPFORWAR(3cbl) ルーチンを使用すると、サービス要求をほかのサービスに転送して、別の処理を行うことができます。

TPFORWAR ルーチンの呼び出しには、次の文法を使用します。

01 TPSVCDEF-REC.
COPY TPSVCDEF.
01 TPTYPE-REC.
COPY TPTYPE.
01 DATA-REC.
COPY User Data.
01 TPSTATUS-REC.
COPY TPSTATUS.
COPY TPFORWAR REPLACING TPSVCDEF-REC BY TPSVCDEF-REC
TPTYPE-REC BY TPTYPE-REC
DATA-REC BY DATA-REC
TPSTATUS-REC BY TPSTATUS-REC.

TPSVCDEF-REC および TPTYPE-REC レコードについては、サービスの定義を参照してください。

TPFORWAR は、サービス呼び出しとは異なります。つまり、要求の転送元サービスでは、応答は要求されていません。応答を返すのは、要求の転送先サービスです。このサービスを転送されたサービスが、要求の発信元プロセスに応答を返します。転送が連鎖的に行われる場合、最後のサーバが TPRETURN を呼び出して、要求の発信元であるクライアントに応答を返します。

次の図は、あるサーバから別のサーバに要求を転送したときのイベントの流れを示しています。この例では、クライアントは TPCALL ルーチンを使用して要求を開始し、連鎖の最後のサービス (サービス_C) が TPRETURN ルーチンを使用して応答を返しています。

図 5-1 要求の転送


 

サービス・ルーチンは TPSPRIO ルーチンを使用して、クライアント・プロセスが要求を送るのと同じように、指定された優先順位に従って要求を転送できます。

プロセスが TPFORWAR を呼び出すと、システムで提供された制御プログラムに制御が戻り、サーバ・プロセスは別の要求を処理できるようになります。

注記 クライアントとして動作するサーバ・プロセスが応答を要求する場合、このサーバが自分自身からサービスを要求することはできません。つまり、必要なサービスの唯一のインスタンスが要求を行っているサーバ・プロセスからのみ提供される場合、その呼び出しは失敗して再帰呼び出しができないことが示されます。ただし、TPNOREPLY 通信フラグが設定された状態でサービス・ルーチンが自分宛てに要求を送信または転送した場合、サービスは自分からの応答を待機しないので、呼び出しは失敗しません。

TPFORWAR 呼び出しを使用して、その呼び出しを行った時点まで要求の処理が成功していたことを示すことができます。アプリケーション・エラーが検出されなかった場合、TPFORWAR を呼び出します。エラーが検出された場合、TP-RETURN-VAL IN TPSVCRET-RECTPFAIL を設定して TPRETURN を呼び出します。

次のコード例は、TPFORWAR を呼び出して、サービスがそのデータ・レコードを DEPOSIT サービスに送る方法を示しています。新規口座の追加が成功した場合、支店レコードが更新されてその口座が反映され、データ・レコードが DEPOSIT サービスに転送されます。失敗した場合、TP-RETURN-VAL IN TPSVCRET-RECTPFAIL が設定されて TPRETURN が呼び出され、失敗を示すメッセージがフォーム上のステータス行に出力されます。

コード リスト 5-8 TPFORWAR の使用方法

    . . .
******************************************************
* クライアントから送信されたデータの取得
******************************************************
MOVE LENGTH OF TRANS-REC TO LEN.
CALL "TPSVCSTART" USING TPSVCDEF-REC
TPTYPE-REC
TRANS-REC
TPSTATUS-REC.
IF NOT TPOK
MOVE "Transaction Encountered An Error" TO STATUS-LINE
SET TPFAIL TO TRUE.
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.
ELSE
. . . Check other parameters
******************************************************
* 新規の口座レコードの挿入
******************************************************
CALL "ADD-NEW-ACCOUNT-FUNCTION" USING TRANS-ACCOUNT IN TRANS-REC.
IF Adding New Account Failed
MOVE "Account not added" TO STATUS-LINE IN TRANS-REC
SET TPFAIL TO TRUE
COPY TPRETURN REPLACING
DATA-REC BY TRANS-REC.
******************************************************
* レコードを DEPOSIT サービスに転送して、
* 初期残高を口座に追加
******************************************************
MOVE "DEPOSIT" TO SERVICE-NAME.
. . . set other TPFORWAR parameters
COPY TPFORWAR REPLACING
DATA-REC BY TRANS-REC.

 


サービスの宣言と宣言の取り消し

サーバは起動時に、コンフィギュレーション・ファイルの CLOPT パラメータに指定された値に基づいて、提供するサービスを宣言します。

注記 サーバが宣言するサービスは、buildserver コマンドの実行時に最初に定義されます。-s オプションを使用すると、複数のサービスをカンマ区切りで指定できます。また、宣言されたサービスと異なる名前のルーチンを呼び出して、サービス要求を処理できます。詳細については、『BEA Tuxedo コマンド・リファレンス』の buildserver(1) を参照してください。

デフォルトでは、サーバに組み込まれたすべてのサービスをそのサーバが宣言します。詳細については、『BEA Tuxedo のファイル形式とデータ記述方法』の UBBCONFIG(5) または servopts(5) リファレンス・ページを参照してください。

宣言されたサービスでは掲示板のサービス・テーブル・エントリが使用されるので、リソースが消費される場合があります。そのため、サーバの起動時には、提供されるサービスのサブセットだけを利用できるようにします。アプリケーションで利用できるサービスを制限するには、コンフィギュレーション・ファイルの SERVERS セクションで該当するエントリに CLOPT パラメータを定義し、-s オプションの後に必要なサービスをカンマで区切って指定します。また、-s オプションを使用すると、サービス要求を処理するために呼び出される宣言済みのサービスと異なる名前のルーチンを呼び出すこともできます。詳細については、『BEA Tuxedo のファイル形式とデータ記述方法』の servopts(5) リファレンス・ページを参照してください。

BEA Tuxedo アプリケーションの管理者は、tmadmin(1)advertise および unadvertise コマンドを使用して、サーバで提供されるサービスを管理できます。TPADVERTISE および TPUNADVERTISE ルーチンを使用すると、要求/応答型サーバまたは会話型サーバでのサービスの宣言を動的に制御できます。ただし、宣言されるサービス、または宣言を取り消すサービスは、要求を行うサービスと同じサーバ内になければなりません。

サービスの宣言

TPADVERTISE(3cbl) 関数の呼び出しには、次の文法を使用します。

01 SERVICE-NAME           PIC X(15).
01 PROGRAM-NAME PIC X(32).
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPADVERTISE" USING SERVICE-NAME PROGRAM-NAME TPSTATUS-REC.

次の表は、TPADVERTISE データ構造体のメンバを示しています。

表 5-3 TPADVERTISE データ構造体のメンバ

メンバ

説明

SERVICE-NAME

宣言するサービスの名前。サービス名は 15 文字以下の文字列で指定します。15 文字を超える名前は切り捨てられます。SPACES 文字列は指定できません。NULL 文字列が指定されると、エラー (TPEINVAL) になります。

PROGRAM-NAME

サービスを実行するために呼び出される BEA Tuxedo システム・ルーチン。通常、この名前とサービス名は同じです。SPACES 文字列は指定できません。NULL 文字列が指定されると、エラーになります。

サービス宣言の取り消し

TPUNADVERTISE(3cbl) ルーチンは、掲示板のサービス・テーブルからサービス名を削除します。サービス名が削除されたサービスは、宣言されていない状態になります。

TPUNADVERTISE ルーチンの呼び出しには、次の文法を使用します。

01 SERVICE-NAME           PIC X(15).
01 TPSTATUS-REC.
COPY TPSTATUS.
CALL "TPUNADVERTISE" USING SERVICE-NAME TPSTATUS-REC.

TPUNADVERTISE データ構造体のメンバは、次の表で説明する SERVICE-NAME だけです。

表 5-4 TPUNADVERTISE データ構造体のメンバ

メンバ

説明

SERVICE-NAME

宣言するサービスの名前。サービス名は 15 文字以下の文字列で指定します。15 文字を超える名前は切り捨てられます。SPACES 文字列は指定できません。NULL 文字列が指定されると、エラー (TPEINVAL) になります。

例: サービスの動的な宣言と宣言の取り消し

次のコード例は、TPADVERTISE ルーチンの使用方法を示しています。このコードでは、サーバ TLR が起動時に TLRINIT サービスだけを提供するようにコーディングされています。初期化後、TLRINITDEPOSITWITHDRAW という 2 つのサービスを宣言します。両サービスとも TLRFUNCS ルーチンによって実行され、サーバ TLR に組み込まれています。

DEPOSITWITHDRAW を宣言した後、TLRINIT は自分自身で宣言を取り消します。

コード リスト 5-9 動的な宣言と宣言の取り消し

    . . .
**************************************************
* TLRFUNCS ルーチンで処理する
* DEPOSIT サービスの宣言
**************************************************
MOVE "DEPOSIT" TO SERVICE-NAME.
MOVE "TLRFUNCS" TO PROGRAM-NAME.
CALL "TPADVERTISE" USING SERVICE-NAME
PROGRAM-REC
TPSTATUS-REC.
IF NOT TPOK
error processing
**************************************************
* 同じ TLRFUNCS ルーチンで処理する
* WITHDRAW サービスの宣言
**************************************************
MOVE "WITHDRAW" TO SERVICE-NAME.
MOVE "TLRFUNCS" TO PROGRAM-NAME.
CALL "TPADVERTISE" USING SERVICE-NAME
PROGRAM-REC
TPSTATUS-REC.
IF NOT TPOK
error processing
**************************************************
* TLRINIT サービスの宣言の取り消し
**************************************************
MOVE "TLRINIT" TO SERVICE-NAME.
CALL "TPUNADVERTISE" USING SERVICE-NAME
TPSTATUS-REC.
IF NOT TPOK
error processing

 


サーバのビルド

実行可能なサーバをビルドするには、buildserver(1) コマンドに -C オプションを使用して、BEA Tuxedo System サーバ・アダプタなどすべての参照ファイルでアプリケーション・サービス・サブルーチンをコンパイルします。

注記 BEA Tuxedo サーバ・アダプタは、メッセージの受信、処理のディスパッチ、トランザクションが有効な場合はトランザクションの管理を行います。

buildserver コマンドには、次の構文を使用します。

buildserver -C -o filename -f filenames -l filenames -s -v

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

表 5-5 buildserver コマンド行オプション

オプション . .

説明 . .

-o filename

実行可能な出力ファイル名。デフォルト値は SERVER です。

-f filenames

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

-l filenames

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

-r filenames

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

-s [service:]routine

サーバに提供されるサービス名、および各サービスを実行するルーチン名。-s オプションは複数回指定できます。また、各 -s に複数のサービスを指定できます。サーバは指定されたサービス名を使用して、クライアントにサービスを宣言します。

通常、サービスとそのサービスを実行するルーチンには同じ名前を割り当てます。ただし、別の名前を指定することもできます。名前の割り当てには、service:routine という構文を使用します。

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

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

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

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

次のコマンドは、acct.o アプリケーション・ファイルを処理して、NEW_ACCT と CLOSE_ACCT という 2 つのサービスを含む ACCT サーバを作成しています。NEW_ACCTOPEN_ACCT ルーチンを呼び出し、CLOSE_ACCT は同じ名前のルーチンを呼び出します。

buildserver -C -o ACCT -f acct.o -s NEW_ACCT:OPEN_ACCT -s CLOSE_ACCT

関連項目

 

Back to Top Previous Next
Contact e-docsContact BEAwebmasterprivacy