bea ホーム | 製品 | dev2dev | support | askBEA |
![]() |
![]() |
|
![]() |
e-docs > Tuxedo > サンプルを使用した Tuxedo アプリケーションの開発方法 > simpapp (簡単な C 言語アプリケーション) のチュートリアル |
サンプルを使用した Tuxedo アプリケーションの開発方法
|
simpapp (簡単な C 言語アプリケーション) のチュートリアル
ここでは、次の内容について説明します。
simpapp とは
simpapp は、1 クライアントと 1 サーバで構成される ATMI サンプル・アプリケーションです。このアプリケーションは、BEA Tuxedo ソフトウェアに同梱されています。サーバでは、1 つのサービスだけが実行されます。つまり、クライアントから小文字の英字文字列を受け取り、その文字列を大文字で返します。
simpapp のファイルおよびリソースの準備
ここでは、BEA Tuxedo の ATMI アプリケーションを開発して実行するための手順を順に示します。次の図は、それらの作業をまとめたものです。各作業をクリックすると、その作業を行う手順が表示されます。
図 2-1 simpapp の開発プロセス
はじめに このチュートリアルのサンプル・アプリケーションを実行するには、BEA Tuxedo ATMI のクライアント/サーバ・ソフトウェアがインストールされ、ここで説明するファイルやコマンドを使用できることが必要です。既にインストールされている場合は、ソフトウェアのインストール先のディレクトリのパス名 (TUXDIR) を確認する必要があります。また、BEA Tuxedo ディレクトリ構造内のディレクトリとファイルに読み取りパーミッションと実行パーミッションを設定し、simpapp の各ファイルをコピーしたり、BEA Tuxedo の各コマンドを実行できるようにします。 このチュートリアルについて ここで説明する simpapp の手順は、UNIX システムに基づいています。UNIX オペレーティング・システム環境でのプラットフォーム固有の手順はそのまま適用できますが、simpapp ファイルのコピーや環境変数の設定などの手順は Windows 2000 など UNIX 以外のプラットフォームでは異なる場合があります。このため、チュートリアルで示す例は、お使いのプラットフォームに適さない場合があります。 このチュートリアルの目的 ここで説明する作業を行うと、ATMI クライアントおよびサーバが実行できるタスクについて理解し、環境に応じてコンフィギュレーション・ファイルを変更でき、tmadmin を呼び出してアプリケーションの動作を確認できるようになります。つまり、BEA Tuxedo アプリケーションの基本的な要素 (クライアント・プロセス、サーバ・プロセス、コンフィギュレーション・ファイルなど) を理解し、BEA Tuxedo システムの各コマンドを使用してアプリケーションを管理できるようになります。
ステップ 1: simpapp ファイルのコピー
注記 以下に示す手順は、UNIX システムに基づいています。Windows 2000 など UNIX 以外のプラットフォームでは、手順が異なる場合があります。サンプル・アプリケーションで使用されているコード例は、プラットフォームによって内容が異なります。
mkdir simpdir
cd simpdir
TUXDIR=BEA Tuxedo システムのルート・ディレクトリのパス名
TUXCONFIG=現在の作業ディレクトリのパス名
PATH=$PATH:$TUXDIR/bin
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TUXDIR/lib
export TUXDIR TUXCONFIG PATH LD_LIBRARY_PATH
TUXDIR および PATH を設定して、BEA Tuxedo ディレクトリ構造内のファイルにアクセスでき、BEA Tuxedo コマンドを実行できるようにします。Sun Solaris では、PATH の先頭に /usr/5bin を指定する必要があります。AIX (RS/6000) では、LD_LIBRARY_PATH ではなく LIBPATH を使用します。HP-UX (HP 9000) では、LD_LIBRARY_PATH ではなく SHLIB_PATH を使用します。
コンフィギュレーション・ファイルをロードするには、TUXCONFIG を設定する必要があります。詳細については、ステップ 4: コンフィギュレーション・ファイルの編集とロードを参照してください。
cp $TUXDIR/samples/atmi/simpapp/* .
$ ls
README env simpapp.nt ubbmp wsimpcl
README.as400 setenv.cmd simpcl.c ubbsimple
README.nt simpapp.mk simpserv.c ubbws
$
関連項目
ステップ 2: クライアント・プログラムの検証およびコンパイル
クライアント・プログラムの検証
コード リスト2-1 simpcl.c のソース・コード
1 #include <stdio.h>
2 #include "atmi.h" /* TUXEDO */
3
4
5
6
7 #ifdef __STDC__
8 main(int argc, char *argv[])
9
10 #else
11
12 main(argc, argv)
13 int argc;
14 char *argv[];
15 #endif
16
17 {
18
19 char *sendbuf, *rcvbuf;
20 int sendlen, rcvlen;
21 int ret;
22
23 if(argc != 2) {
24 fprintf(stderr, "Usage: simpcl string\n");
25 exit(1);
26 }
27 /* クライアント・プロセスとして BEA TUXEDO にアタッチします。 */
28 if (tpinit((TPINIT *) NULL) == -1) {
29 fprintf(stderr, "Tpinit failed\n");
30 exit(1);
31 }
32 sendlen = strlen(argv[1]);
33 if((sendbuf = (char *)tpalloc("STRING", NULL, sendlen+1))== NULL){
34 fprintf(stderr,"Error allocating send buffer\n");
35 tpterm();
36 exit(1);
37 }
38 if((rcvbuf = (char *)tpalloc("STRING", NULL, sendlen+1))== NULL){
39 fprintf(stderr,"Error allocating receive buffer\n");
40 tpfree(sendbuf);
41 tpterm();
42 exit(1);
43 }
44 strcpy(sendbuf, argv[1]);
45 ret = tpcall("TOUPPER", sendbuf, NULL, &rcvbuf, &rcvlen, 0);
46 if(ret == -1) {
47 fprintf(stderr, "Can't send request to service TOUPPER\n");
48 fprintf(stderr, "Tperrno = %d, %s\n", tperrno,
49 tmemsgs[tperrno]);
50 tpfree(sendbuf);
51 tpfree(rcvbuf);
52 tpterm();
53 exit(1);
54 }
55 printf("Returned string is: %s\n", rcvbuf);
56
57 /* バッファを解放し、BEA TUXEDO からのアタッチを解除します。*/
58 tpfree(sendbuf);
59 tpfree(rcvbuf);
60 tpterm();
61 }
クライアント・プログラムのコンパイル
buildclient -o simpcl -f simpcl.c
$ ls -l
total 97
-rwxr-x--x 1 usrid grpid 313091 May 28 15:41 simpcl
-rw-r----- 1 usrid grpid 1064 May 28 07:51 simpcl.c
-rw-r----- 1 usrid grpid 275 May 28 08:57 simpserv.c
-rw-r----- 1 usrid grpid 392 May 28 07:51 ubbsimple
関連項目
ステップ 3: サーバ・プログラムの検証およびコンパイル
サーバ・プログラムの検証
ATMI サーバ・プログラムのソース・コードの内容を確認します。
$ more simpserv.c
コード リスト2-2 simpserv.c のソース・コード
*/
/* #ident "@(#) apps/simpapp/simpserv.c $Revision: 1.1 $" */
1 #include <stdio.h>
2 #include <ctype.h>
3 #include <atmi.h> /* TUXEDO ヘッダ・ファイル */
4 #include <userlog.h> /* TUXEDO ヘッダ・ファイル */
5 /* tpsvrinit は、サーバの起動時
(要求の処理を行う前) に実行されます。この関数は必須ではありません。
この例では使用されていませんが、
サーバのシャットダウン時に呼び出される tpsvrdone も使用できます。
9 */
10 #if defined(__STDC__) || defined(__cplusplus)
12 tpsvrinit(int argc, char *argv[])
13 #else
14 tpsvrinit(argc, argv)
15 int argc;
16 char **argv;
17 #endif
18 {
19 /* argc と argv が使用されないと、コンパイラによる警告メッセージが出力されます。
20 */
21 argc = argc;
22 argv = argv;
23 /* userlog は TUXEDO 中央メッセージ・ログに書き込みます。 */
24 userlog("Welcome to the simple server");
25 return(0);
26 }
27 /* この関数は、クライアントから要求された実際のサービスを実行します。
引数には、
データ・バッファへのポインタ、データ・バッファの長さなどを含む構造体を指定します。
30 */
31 #ifdef __cplusplus
32 extern "C"
33 #endif
34 void
35 #if defined(__STDC__) || defined(__cplusplus)
36 TOUPPER(TPSVCINFO *rqst)
37 #else
38 TOUPPER(rqst)
39 TPSVCINFO *rqst;
40 #endif
41 {
42 int i;
43
44 for(i = 0; i < rqst->len-1; i++)
45 rqst->data[i] = toupper(rqst->data[i]);
46 /* 転送されたバッファを要求の発信元に返します。 */
47 tpreturn(TPSUCCESS, 0, rqst->data, 0L, 0);
48 }
サーバ・プログラムのコンパイル
buildserver -o simpserv -f simpserv.c -s TOUPPER
$ ls -l
total 97
-rwxr-x--x 1 usrid grpid 313091 May 28 15:41 simpcl
-rw-r----- 1 usrid grpid 1064 May 28 07:51 simpcl.c
-rwxr-x--x 1 usrid grpid 358369 May 29 09:00 simpserv
-rw-r----- 1 usrid grpid 275 May 28 08:57 simpserv.c
-rw-r----- 1 usrid grpid 392 May 28 07:51 ubbsimple
simpserv という実行可能モジュールが作成されました。
関連項目
ステップ 4: コンフィギュレーション・ファイルの編集とロード
コンフィギュレーション・ファイルの編集
コード リスト2-3 simpapp コンフィギュレーション・ファイル
1$
2
3 #BEA Tuxedo サンプル・アプリケーションのスケルトン・ファイルです。
4 #<山かっこで囲まれた文字列> を適切な値で置き換えます。
5 RESOURCES
6 IPCKEY <32,768 よりも大きい IPC キーで置き換えます。>
7
8 #例:
9
10 #IPCKEY 62345
11
12 MASTER simple
13 MAXACCESSERS 5
14 MAXSERVERS 5
15 MAXSERVICES 10
16 MODEL SHM
17 LDBAL N
18
19 *MACHINES
20
21 DEFAULT:
22
23 APPDIR="<現在のパス名で置き換えます。>"
24 TUXCONFIG="<TUXCONFIG のパス名で置き換えます。>"
25 TUXDIR="<Tuxedo のルート・ディレクトリ (/ 以外) を指定します。>"
26 #例:
27 # APPDIR="/usr/me/simpdir"
28 # TUXCONFIG="/usr/me/simpdir/tuxconfig"
29 # TUXDIR="/usr/tuxedo"
30
31 <Machine-name> LMID=simple
32 #例:
33 #tuxmach LMID=simple
34 *GROUPS
35 GROUP1
36 LMID=simple GRPNO=1 OPENINFO=NONE
37
38 *SERVERS
39 DEFAULT:
40 CLOPT="-A"
41 simpserv SRVGRP=GROUP1 SRVID=1
42 *SERVICES
43 TOUPPER
コンフィギュレーション・ファイルのロード
$ tmloadcf ubbsimple
Initialize TUXCONFIG file: /usr/me/simpdir/tuxconfig [y, q] ? y
$
$ ls -l
total 216
-rwxr-x--x 1 usrid grpid 313091 May 28 15:41 simpcl
-rw-r----- 1 usrid grpid 1064 May 28 07:51 simpcl.c
-rwxr-x--x 1 usrid grpid 358369 May 29 09:00 simpserv
-rw-r----- 1 usrid grpid 275 May 28 08:57 simpserv.c
-rw-r----- 1 usrid grpid 106496 May 29 09:27 tuxconfig
-rw-r----- 1 usrid grpid 382 May 29 09:26 ubbsimple
TUXCONFIG というファイルが作成されました。TUXCONFIG ファイルは、BEA Tuxedo システムで制御される新しいファイルです。
関連項目
ステップ 5: アプリケーションの起動
$ tmboot
Boot all admin and server processes?(y/n): y
Booting all admin and server processes in /usr/me/simpdir/tuxconfig
Booting all admin processes ...
exec BBL -A:
process id=24223 ...Started.
Booting server processes ...
exec simpserv -A :
process id=24257 ... Started.
2 processes started.
$
BBL は、アプリケーションの共用メモリを監視する管理プロセスです。simpserv は、要求を受け取るために継続的に実行している simpapp サーバです。
関連項目
ステップ 6: ランタイム・アプリケーションの実行
simpapp を実行するには、クライアントから要求を送信します。
$ simpcl “hello, world”
Returned string is:HELLO, WORLD
関連項目
ステップ 7: ランタイム・アプリケーションの監視
システム管理者は tmadmin コマンド・インタプリタを使用して、アプリケーションを調べ、動的に変更を加えることができます。tmadmin を実行するには、TUXCONFIG 変数を設定する必要があります。
tmadmin を使用すると、50 個以上のコマンドを解釈したり実行することができます。各コマンドの説明については、tmadmin(1)を参照してください。この例では、2 つの tmadmin コマンドを使用します。
注記 大なり記号 (>) は、tmadmin のプロンプトです。
> psr
a.out Name Queue Name Grp Name ID RqDone Load Done Current Service
---------- ---------- -------- -- ------ --------- ---------------
BBL 531993 simple 0 0 0 ( IDLE )
simpserv 00001.00001 GROUP1 1 0 0 ( IDLE )
>
> psc
Service Name Routine Name a.out Name Grp Name ID Machine # Done Status
------------ ------------ ---------- -------- -- ------- ------ ------
TOUPPER TOUPPER simpserv GROUP1 1 simple - AVAIL
>
関連項目
ステップ 8: アプリケーションのシャットダウン
$ tmshutdown
Shutdown all admin and server processes?(y/n): y
Shutting down all admin and server processes in /usr/me/simpdir/tuxconfig
Shutting down server processes ...
Server Id = 1 Group Id = GROUP1 Machine = simple: shutdown succeeded.
Shutting down admin processes ...
Server Id = 0 Group Id = simple Machine = simple: shutdown succeeded.
2 processes stopped.
$
$ cat ULOG*
$
113837.tuxmach!tmloadcf.10261:CMDTUX_CAT:879:A new file system has been created. (size = 32 4096-byte blocks)
113842.tuxmach!tmloadcf.10261:CMDTUX_CAT:871: TUXCONFIG file /usr/me/simpdir/tuxconfig has been created
113908.tuxmach!BBL.10768:LIBTUX_CAT:262: std main starting
113913.tuxmach!simpserv.10925:LIBTUX_CAT:262: std main starting
113913.tuxmach!simpserv.10925: Welcome to the simple server
114009.tuxmach!simpserv.10925:LIBTUX_CAT:522: Default tpsvrdone() function used.
114012.tuxmach!BBL.10768:CMDTUX_CAT:26:Exiting system
関連項目
![]() |
![]() |
![]() |
![]() |
||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |