![]() ![]() ![]() ![]() |
CSIMPAPP
は、Oracle Tuxedo システムに同梱の ATMI サンプル アプリケーションです。ここで説明する内容は Microfocus COBOL コンパイラを前提としています。そのため、ご使用のコンパイラによって多少手順が異なる場合があります。Oracle Tuxedo システムでサポートされている COBOL プラットフォームを確認するには、『Oracle Tuxedo システムのインストール』の付録 A「Oracle Tuxedo 10g リリース 3 (10.3) プラットフォーム データ シート」を参照してください。
CSIMPAPP
では、クライアントとサーバがそれぞれ 1 つずつ使用されています。サーバでは、1 つのサービスだけが実行されます。つまり、クライアントから文字列を受け取り、その文字列を大文字で返します。
ここでは、CSIMPAPP
の開発を始めるための準備作業について説明します。次の図は、それらの準備作業をまとめたものです。
このチュートリアルのサンプル アプリケーションを実行するには、Oracle Tuxedo ATMI のクライアント/サーバ ソフトウェアがインストールされ、ここで説明するファイルやコマンドを使用できることが必要です。Oracle Tuxedo システム ソフトウェアのインストールを行う場合は、『Oracle Tuxedo システムのインストール』のインストール手順を参照してください。既にインストールされている場合は、ソフトウェアのインストール先ディレクトリのパス名 (TUXDIR
) を確認する必要があります。また、Oracle Tuxedo システム ディレクトリ構造内のディレクトリとファイルに読み取りパーミッションと実行パーミッションを設定し、CSIMPAPP
の各ファイルをコピーしたり、Oracle Tuxedo システムの各コマンドを実行できるようにします。
ここで説明する作業を行うと、クライアントおよびサーバが実行できるタスクについて理解し、環境に応じてコンフィグレーション ファイルを変更でき、tmadmin
を呼び出してアプリケーションの動作を確認できるようになります。つまり、Oracle Tuxedo のすべてのアプリケーションの基本的な要素 (クライアント プロセス、サーバ プロセス、コンフィグレーション ファイルなど) を理解し、Oracle Tuxedo システムの各コマンドを使用してアプリケーションを管理できるようになります。
注意 : | この作業は省略せずに行ってください。この作業を行うと、最初からあった CSIMPAPP のファイルと、手順に従って作成したファイルを確認できるようになります。csh を使用せずに、標準シェル (/bin/sh ) または Korn シェルを使用してください。 |
TUXDIR=<BEA Tuxedo システム ルート ディレクトリのパス名>
APPDIR=<現在の作業ディレクトリのパス名>
TUXCONFIG=$APPDIR/TUXCONFIG
COBDIR=<COBOL コンパイラ ディレクトリのパス名>
COBCPY=$TUXDIR/cobinclude
COBOPT="-C ANS85 -C ALIGN=8 -C NOIBMCOMP -C TRUNC=ANSI -C OSEXT=cbl"
CFLAGS="-I$TUXDIR/include"
PATH=$TUXDIR/bin:$APPDIR: $PATH
LD_LIBRARY_PATH=$COBDIR/coblib:${LD_LIBRARY_PATH}
export TUXDIR APPDIR TUXCONFIG UBBCONFIG COBDIR COBCPY
export COBOPT CFLAGS PATH LD_LIBRARY_PATH
TUXDIR
および PATH
を設定して、Oracle Tuxedo ディレクトリ構造内のファイルにアクセスでき、Oracle Tuxedo コマンドを実行できるようにします。
CSIMPAPP
ファイルをコピーします。 cp TUXDIR/samples/atmi
/CSIMPAPP/* .
注意 : | 一部のファイルは、後で編集して実行可能ファイルを作成します。そのため、ソフトウェアに同梱のオリジナルのファイルではなく、そのコピーを使用することをお勧めします。 |
$ ls
CSIMPCL.cbl
CSIMPSRV.cbl
README
TPSVRINIT.cbl
UBBCSIMPLE
WUBBCSIMPLE
envfile
ws
$
クライアント プログラムのソース コードの内容を確認します。
$ more CSIMPCL.cbl
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. CSIMPCL.
3 AUTHOR.Tuxedo DEVELOPMENT.
4 ENVIRONMENT DIVISION.
5 CONFIGURATION SECTION.
6 WORKING-STORAGE SECTION.
7 *****************************************************
8 * Tuxedo の定義
9 *****************************************************
10 01 TPTYPE-REC.
11 COPY TPTYPE.
12 *
13 01 TPSTATUS-REC.
14 COPY TPSTATUS.
15 *
16 01 TPSVCDEF-REC.
17 COPY TPSVCDEF.
18 *
19 01 TPINFDEF-REC VALUE LOW-VALUES.
20 COPY TPINFDEF.
21 *****************************************************
22 * ログ メッセージの定義
23 *****************************************************
24 01 LOGMSG.
25 05 FILLER PIC X(8) VALUE "CSIMPCL:".
26 05 LOGMSG-TEXT PIC X(50).
27 01 LOGMSG-LEN PIC S9(9) COMP-5.
28 *
29 01 USER-DATA-REC PIC X(75).
30 01 SEND-STRING PIC X(100) VALUE SPACES.
31 01 RECV-STRING PIC X(100) VALUE SPACES.
32 *****************************************************
33 * コマンドライン引数
34 *****************************************************
35 * コマンドライン引数でプログラムを起動
36 ******************************************************
37
38 PROCEDURE
39 START-CSIMPCL.
40 MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
41 ACCEPT SEND-STRING FROM COMMAND-LINE.
42 DISPLAY “SEND-STRING:” SEND-STRING.
43
44 MOVE “Started” TO LOGMSG-TEXT.
45 PERFORM DO-TPINIT.
46 PERFORM DO-TPCALL.
47 DISPLAY “RECV-STRING:” RECV-STRING.
48 PERFORM DO-TPTERM.
49 PERFORM EXIT-PROGRAM.
50 *****************************************************
51 * システムへのクライアントの登録
52 *****************************************************
53 DO-TPINIT.
54 MOVE SPACES TO USRNAME.
55 MOVE SPACES TO CLTNAME.
56 MOVE SPACES TO PASSWD.
57 MOVE SPACES TO GRPNAME.
58 MOVE ZERO TO DATALEN.
59 SET TPU-DIP TO TRUE.
60
61 CALL "TPINITIALIZE" USING TPINFDEF-REC
62 USER-DATA-REC
63 TPSTATUS-REC.
64
65 IF NOT TPOK
66 MOVE "TPINITIALIZE Failed" TO LOGMSG-TEXT
67 PERFORM DO-USERLOG
68 PERFORM EXIT-PROGRAM
69 END-IF.
70
71 *****************************************************
72 * TPCALL の発行
73 *****************************************************
74 DO-TPCALL.
75 MOVE 100 to LEN.
76 MOVE "STRING" TO REC-TYPE.
77 MOVE "CSIMPSRV" TO SERVICE-NAME.
78 SET TPBLOCK TO TRUE.
79 SET TPNOTRAN TO TRUE.
80 SET TPNOTIME TO TRUE.
81 SET TPSIGRSTRT TO TRUE.
82 SET TPCHANGE TO TRUE.
83
84 CALL "TPCALL" USING TPSVCDEF-REC
85 TPTYPE-REC
86 SEND-STRING
87 TPTYPE-REC
88 RECV-STRING
89 TPSTATUS-REC.
90
91 IF NOT TPOK
92 MOVE "TPCALL Failed" TO LOGMSG-TEXT
93 PERFORM DO-USERLOG
94 END-IF.
95
96 *****************************************************
97 * Tuxedo の終了
98 *****************************************************
99 DO-TPTERM.
100 CALL "TPTERM" USING TPSTATUS-REC.
101 IF NOT TPOK
102 MOVE "TPTERM Failed" TO LOGMSG-TEXT
103 PERFORM DO-USERLOG
104 END-IF.
105
106 *****************************************************
107 * ユーザ ログにメッセージを記録
108 *****************************************************
109 DO-USERLOG.
110 CALL "USERLOG" USING LOGMSG
111 LOGMSG-LEN
112 TPSTATUS-REC.
113
114 *****************************************************
115 * アプリケーションの終了
116 *****************************************************
117 EXIT-PROGRAM.
118 MOVE "Ended" TO LOGMSG-TEXT.
119 PERFORM DO-USERLOG.
120 STOP RUN.
CSIMPSRV
ATMI サーバ プログラムのソース コードの内容を確認します。 $ more CSIMPSRV.cbl
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. CSIMPSRV.
3 AUTHOR.BEA Tuxedo DEVELOPMENT.
4 ENVIRONMENT DIVISION.
5 CONFIGURATION SECTION.
6 WORKING-STORAGE SECTION.
7 ******************************************************
8 * Tuxedo の定義
9 ******************************************************
10 01 TPSVCRET-REC.
11 COPY TPSVCRET.
12 *
13 01 TPTYPE-REC.
14 COPY TPTYPE.
15 *
16 01 TPSTATUS-REC.
17 COPY TPSTATUS.
18 *
19 01 TPSVCDEF-REC.
20 COPY TPSVCDEF.
21 ******************************************************
22 * ログ メッセージの定義
23 ******************************************************
24 01 LOGMSG.
25 05 FILLER PIC X(10) VALUE
26 "CSIMPSRV :".
27 05 LOGMSG-TEXT PIC X(50).
28 01 LOGMSG-LEN PIC S9(9) COMP-5.
29 ******************************************************
31 * ユーザ定義のデータ レコード
32 ******************************************************
33 01 RECV-STRING PIC X(100).
34 01 SEND-STRING PIC X(100).
35 *
36 LINKAGE SECTION.
37 *
38 PROCEDURE DIVISION.
39 *
40 START-FUNDUPSR.
41 MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
42 MOVE "Started" TO LOGMSG-TEXT.
43 PERFORM DO-USERLOG.
44
45 ******************************************************
46 * クライアントによって送信されたデータを取得
47 ******************************************************
48 MOVE LENGTH OF RECV-STRING TO LEN.
49 CALL "TPSVCSTART" USING TPSVCDEF-REC
50 TPTYPE-REC
51 RECV-STRING
52 TPSTATUS-REC.
53
54 IF NOT TPOK
55 MOVE "TPSVCSTART Failed" TO LOGMSG-TEXT
56 PERFORM DO-USERLOG
57 PERFORM EXIT-PROGRAM
58 END-IF.
59
60 IF TPTRUNCATE
61 MOVE "Data was truncated" TO LOGMSG-TEXT
62 PERFORM DO-USERLOG
63 PERFORM EXIT-PROGRAM
64 END-IF.
65
66 INSPECT RECV-STRING CONVERTING
67 "abcdefghijklmnopqrstuvwxyz" TO
68 "ABCDEFGHIJKLMNOPQRSTUVWXYZ".
69 MOVE "Success" TO LOGMSG-TEXT.
70 PERFORM DO-USERLOG.
71 SET TPSUCCESS TO TRUE.
72 COPY TPRETURN REPLACING
73 DATA-REC BY RECV-STRING.
74
75 ******************************************************
76 * ログ エラー メッセージを出力
77 ******************************************************
78 DO-USERLOG.
79 CALL "USERLOG" USING LOGMSG
80 LOGMSG-LEN
81 TPSTATUS-REC.
82 ******************************************************
83 * プログラムを終了
84 ******************************************************
85 EXIT-PROGRAM.
86 MOVE "Failed" TO LOGMSG-TEXT.
87 PERFORM DO-USERLOG.
88 SET TPFAIL TO TRUE.
89 COPY TPRETURN REPLACING
90 DATA-REC BY RECV-STRING.
TPSVRINIT
サブルーチンが呼び出されます。TPSVRINIT
を理解するには、そのソース コードの内容を参照します。$ more TPSVRINIT.cbl
1 IDENTIFICATION DIVISION.
2 PROGRAM-ID. TPSVRINIT.
3 ENVIRONMENT DIVISION.
4 CONFIGURATION SECTION.
5 *
6 DATA DIVISION.
7 WORKING-STORAGE SECTION.
8 *
9 01 LOGMSG.
10 05 FILLER PIC X(11) VALUE "TPSVRINIT :".
11 05 LOGMSG-TEXT PIC X(50).
12 01 LOGMSG-LEN PIC S9(9) COMP-5.
13 *
14 01 TPSTATUS-REC.
15 COPY TPSTATUS.
16 *********************************************************
17 LINKAGE SECTION.
18 01 CMD-LINE.
19 05 ARGC PIC 9(4) COMP-5.
20 05 ARG.
21 10 ARGS PIC X OCCURS 0 TO 9999 DEPENDING ON ARGC.
22 *
23 01 SERVER-INIT-STATUS.
24 COPY TPSTATUS.
25 ***********************************************************
26 PROCEDURE DIVISION USING CMD-LINE SERVER-INIT-STATUS.
27 A-000.
28 MOVE LENGTH OF LOGMSG TO LOGMSG-LEN.
29 ***********************************************************
30 * この TPSVRINIT にはコマンドライン パラメータはありません。
31 ***********************************************************
32 IF ARG NOT EQUAL TO SPACES
33 MOVE "TPSVRINIT failed" TO LOGMSG-TEXT
34 CALL "USERLOG" USING LOGMSG
35 LOGMSG-LEN
36 TPSTATUS-REC
37 ELSE
38 MOVE "Welcome to the simple service" TO LOGMSG-TEXT
39 CALL "USERLOG" USING LOGMSG
40 LOGMSG-LEN
41 TPSTATUS-REC
42 END-IF.
43 *
44 SET TPOK IN SERVER-INIT-STATUS TO TRUE.
45 *
46 EXIT PROGRAM.
Oracle Tuxedo システムでは、デフォルトでサーバが起動したことを示すメッセージが USERLOG
に書き込まれます。
buildserver
を実行して、ATMI サーバ プログラムをコンパイルします。buildserver -C -o CSIMPSRV -f CSIMPSRV.cbl -f TPSVRINIT.cbl -s CSIMPSRV
CSIMPSRV
は作成される実行可能ファイル、CSIMPSRV.cbl
および TPSVRINIT.cbl
は入力ソース ファイルです。-s CSIMPSRV は、CSIMPSRV サーバによって提供されているサービスです。
$ ls
CSIMPCL CSIMPCL.int CSIMPSRV.cbl CSIMPSRV.o TPSVRINIT.int
CSIMPCL.cbl CSIMPCL.o CSIMPSRV.idy TPSVRINIT.cbl TPSVRINIT.o
CSIMPCL.idy CSIMPSRV CSIMPSRV.int TPSVRINIT.idy UBBCSIMPLE
CSIMPAPP
のコンフィグレーション ファイルの内容を確認します。# 簡単な BEA Tuxedo COBOL アプリケーション用の UBBCONFIG スケルトン ファイルです。
# <山かっこで囲まれた文字列> を適切な値で置き換えます。
*RESOURCES
IPCKEY <有効な IPC キーで置き換えます>
# 例 :
#IPCKEY 123456
DOMAINID UBBCSIMPLE
MASTER simple
MAXACCESSERS 5
MAXSERVERS 5
MAXSERVICES 10
MODEL SHM
LDBAL N
*MACHINES
DEFAULT:
APPDIR="<現在のパス名で置き換えます>"
TUXCONFIG="<TUXCONFIG のパス名で置き換えます>"
TUXDIR="<BEA Tuxedo のルート ディレクトリ (/ 以外) を指定します>"
ENVFILE="<環境変数ファイルのパス名を指定します>"
# 例 :
# APPDIR="/home/me/simpapp"
# TUXCONFIG="/home/me/simpapp/TUXCONFIG"
# TUXDIR="/usr/tuxedo"
# ENVFILE=”/home/me/simpapp/envfile”
<Machine-name> LMID=simple
# 例 :
#usltux LMID=simple
*GROUPS
GROUP1
LMID=simple GRPNO=1 OPENINFO=NONE
*SERVERS
DEFAULT:
CLOPT="-A"
CSIMPSRV SRVGRP=GROUP1 SRVID=1
*SERVICES
CSIMPSRV
を適切な値に置き換えます。IPCKEY
- ほかのユーザと衝突しない値を指定します。TUXCONFIG
- TUXCONFIG
バイナリ ファイルの絶対パス名を指定します。TUXDIR
- Oracle Tuxedo システム ルート ディレクトリの絶対パス名を指定します。APPDIR
- アプリケーションを起動するディレクトリ (この例ではカレント ディレクトリ) の絶対パス名を指定します。ENVFILE
- mc
、viewc
、tmloadcf
などで使用される環境ファイルの絶対パス名を指定します。machine-name
- UNIX プラットフォームの uname -n
コマンドで返されるマシン名を指定します。注意 : | TUXCONFIG および TUXDIR のパス名は、既に設定してエクスポートした TUXCONFIG および TUXDIR のパス名と一致する必要があります。実際のパス名を指定してください。TUXCONFIG などの環境変数で参照されるパス名は使用できません。山かっこは必ず削除してください。 |
tmloadcf
を実行して、コンフィグレーション ファイルをロードします。 $ tmloadcf UBBCSIMPLE
TUXCONFIG ファイルを初期化しますか: /usr/me/CSIMPDIR/TUXCONFIG [y, q] ? y
$
$ ls
CSIMPCL CSIMPCL.o CSIMPSRV.int TPSVRINIT.int
CSIMPCL.cbl CSIMPSRV CSIMPSRV.o TPSVRINIT.o
CSIMPCL.idy CSIMPSRV.cbl TPSVRINIT.cbl TUXCONFIG
CSIMPCL.int CSIMPSRV.idy TPSVRINIT.idy UBBCSIMPLE
$ tmboot
すべての TUXEDO 管理プロセスとアプリケーションのサーバ・プロセスを起動させますか? (y/n): y
/usr/me/CSIMPDIR/TUXCONFIG のすべての TUXEDO 管理プロセスとアプリケーションのサーバ・プロセスを起動します。
すべての TUXEDO 管理プロセスを起動します。
exec BBL -A:
プロセス ID=24223 を起動しました。
TUXEDO 管理プロセスを起動します。
exec CSIMPSRV -A :
プロセス ID=24257 を起動しました。
2 個のプロセスを起動しました。
$
BBL (Bulletin Board Liaison) は、アプリケーションの共有メモリをモニタする管理プロセスです。CSIMPSRV
は、要求を受け取るために継続的に実行している CSIMPAPP
サーバです。
CSIMPAPP
をテストするには、クライアントから要求を送信します。
$ CSIMPCL “hello world”
HELLO WORLD
システム管理者は tmadmin
コマンド インタプリタを使用して、アプリケーションを調べ、動的に変更を加えることができます。tmadmin
を実行するには、TUXCONFIG
変数を設定する必要があります。
tmadmin
を使用すると、50 個以上のコマンドを解釈したり実行することができます。完全なリストについては、『Tuxedo コマンド リファレンス』の「tmadmin(1)」を参照してください。この例では、2 つの tmadmin
コマンドを使用します。
注意 : | 大なり記号 (> ) は、tmadmin のプロンプトです。 |
printserver(psr)
コマンドを入力して、サーバに関する情報を出力します。> psr
a.out 名 キュー名 グループ名 ID 要求終了 ロード終了 現サービス
---------- ---------- -------- -- ------ --------- ---------------
BBL 531993 simple 0 0 0 (IDLE)
CSIMPSRV 00001.00001 GROUP1 1 0 0 (IDLE)
>
printservice(psc)
コマンドを入力して、サービスに関する情報を出力します。> psc
サービス名 ルーチン名 a.out 名 グループ名 ID マシン 終了数 状態
------------ ------------ ---------- -------- -- ------- ---- -------
CSIMPSRV CSIMPSRV CSIMPSRV GROUP1 1 simple - AVAIL
>
q
」と入力して、tmadmin
を終了します。アプリケーションの起動と停止は、tmadmin
から行うことができます。
tmshutdown
を実行して、アプリケーションを停止します。$ tmshutdown
すべての TUXEDO 管理プロセスとアプリケーションのサーバ・プロセスをシャットダウンさせますか?(y/n): y
/usr/me/CSIMPDIR/TUXCONFIG のすべての TUXEDO 管理プロセスとアプリケーションのサーバ・プロセスをシャットダウンします。
アプリケーションのサーバ・プロセスをシャットダウンします。
サーバ Id = 1 グループ Id = GROUP1 マシン = simple: シャットダウンしました。
TUXEDO 管理プロセスをシャットダウンします。
サーバ Id = 0 グループ Id = simple マシン = simple: シャットダウンしました。
2 個のプロセスが終了しました。
$
ULOG
の内容を確認します。 $ cat ULOG*
$
140533.usltux!BBL.22964: LIBTUX_CAT:262: サーバの main() が起動しました。
140540.usltux!CSIMPSRV.22965: COBAPI_CAT:1067: INFO: サーバの main() が起動しました。
140542.usltux!CSIMPSRV.22965: TPSVRINIT :Welcome to the simple service
140610.usltux!?proc.22966: CSIMPCL:起動しました。
140614.usltux!CSIMPSRV.22965: CSIMPSRV :起動しました。
140614.usltux!CSIMPSRV.22965: CSIMPSRV :成功
140614.usltux!?proc.22966: 新しいログ・ファイル
/home/usr_nm/CSIMPDIR/ULOG.112592 に切り替えます。
140614.usltux!?proc.22966: CSIMPCL:終了しました。
このセッションでは、ULOG
の各行に意味があります。まず、ULOG
行の形式を確認してください。
time (hhmmss).machine_uname!process_name.process_id: log message
140542. CSIMPSRV 内の TPSVRINIT からのメッセージ
![]() ![]() ![]() |