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

サンプルを使用した Tuxedo アプリケーションの開発方法

 Previous Next Contents View as PDF  

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 以外のプラットフォームでは、手順が異なる場合があります。サンプル・アプリケーションで使用されているコード例は、プラットフォームによって内容が異なります。

  • simpapp 用にディレクトリを作成し、そのディレクトリに移動 (cd) します。
    mkdir simpdir
    cd simpdir

    注記 この作業は省略せずに行ってください。この作業を行うと、最初からあった simpapp のファイルと、手順に従って作成したファイルを確認できるようになります。csh を使用せずに、標準シェル (/bin/sh) または Korn シェルを使用してください。

  • 環境変数を設定し、エクスポートします。
    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: コンフィギュレーション・ファイルの編集とロードを参照してください。

  • simpapp ファイルをコピーします。
    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
    $

    注記 README ファイルのほかに、UNIX システム以外のプラットフォーム用に simp*.* ファイルと ubb* ファイルがあります。README ファイルには、ほかのファイルの説明が記述されています。

    次は、アプリケーションの核となる 3 つのファイルです。

  • 関連項目

     


    ステップ 2: クライアント・プログラムの検証およびコンパイル

    クライアント・プログラムの検証

    ATMI クライアント・プログラムのソース・コードの内容を確認します。

        $ more simpcl.c

    以下に出力結果を示します。

    コード リスト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 }

    表 2-1 simpcl.c ソース・コードでの重要なコード行

    行数

    ファイル/関数

    目的




    2

    atmi.h

    BEA Tuxedo の ATMI 関数を使用する場合に、常に必要となるヘッダ・ファイル。

    28

    tpinit()

    クライアント・プログラムがアプリケーションに参加する際に使用される ATMI 関数。

    33

    tpalloc()

    型付きバッファの割り当てに使用される ATMI 関数です。STRING は、BEA Tuxedo の 5 つの基本的なバッファ型のひとつです。NULL は、サブタイプの引数がないことを示します。最後の引数 sendlen + 1 は、バッファの長さを指定します。文字列の終わりを示す NULL 文字用に 1 が加えられています。

    38

    tpalloc()

    応答メッセージにほかのバッファを割り当てます。

    45

    tpcall()

    最初の引数に指定された TOUPPER サービスにメッセージ・バッファを送信します。また、応答バッファのアドレスも指定します。tpcall() はメッセージが返されるまで待機します。

    35、41、52、60

    tpterm()

    アプリケーションを終了するための ATMI 関数。tpterm() は、エラー条件の発生により終了する (36、42、53 行目) 前に、アプリケーションを終了する場合に使用します。tpterm() への最終呼び出し (60 行目) は、メッセージが出力された後に行われます。

    40、50、51、58、59

    tpfree()

    バッファの割り当てを解放します。tpfree() は、tpalloc() とは反対の処理を行います。

    55

    printf()

    プログラムの正常終了を示します。サーバから返されたメッセージを出力します。


     

    クライアント・プログラムのコンパイル

    1. buildclient を実行して、クライアント・プログラムをコンパイルします。
          buildclient -o simpcl -f simpcl.c

      simpcl は出力ファイル、simpcl.c は入力ソース・ファイルです。

    2. 結果を確認します。
      $ 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

      simpcl という実行可能モジュールが作成されました。simpcl ファイルのサイズは一定ではありません。

    関連項目

     


    ステップ 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 }

    表 2-2 simpserv.c ソース・コードでの重要なコード行

    行数

    ファイル/関数

    目的

    ファイル全体


    BEA Tuxedo のサーバには、main() 関数が含まれていません。main() 関数は、サーバのビルド時に BEA Tuxedo システムによって提供されます。

    12

    tpsvrinit()

    このサブルーチンは、サーバの初期化時 (サーバがサービス要求を処理する前) に呼び出されます。BEA Tuxedo システムで提供されるデフォルトのサブルーチンでは、サーバが起動したことを示すメッセージが USERLOG に書き込まれます。userlog(3c) は、BEA Tuxedo システムで使用されるログで、アプリケーションでも使用できます。

    38

    TOUPPER()

    サービス (simpserv で唯一実行されるサービス) の宣言です。このサービスに必要な唯一の引数は、TPSVCINFO 構造体へのポインタです。この構造体には、大文字に変換する文字列データが格納されます。

    45

    for loop

    TOUPPER を繰り返し呼び出して、入力を大文字に変換します。

    49

    tpreturn()

    TPSUCCESS フラグに設定された値と、変換された文字列をクライアントに返します。


     

    サーバ・プログラムのコンパイル

    1. buildserver を実行して、ATMI サーバ・プログラムをコンパイルします。
          buildserver -o simpserv -f simpserv.c -s TOUPPER

      simpserv は作成される実行ファイル、simpserv.c は入力ソース・ファイルです。-s TOUPPER オプションは、サーバの起動時に宣言されるサービスを指定します。

    2. 結果を確認します。
      $ 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: コンフィギュレーション・ファイルの編集とロード

    コンフィギュレーション・ファイルの編集

    1. テキスト・エディタで、simpapp のコンフィギュレーション・ファイル ubbsimple の内容を確認します。

    コード リスト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

    1. 山かっこで囲まれた各<文字列> を適切な値に置き換えます。

    コンフィギュレーション・ファイルのロード

    1. tmloadcf を実行して、コンフィギュレーション・ファイルをロードします。
      $ tmloadcf ubbsimple
      Initialize TUXCONFIG file: /usr/me/simpdir/tuxconfig [y, q] ? y
      $

    2. 結果を確認します。
      $ 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: アプリケーションの起動

    1. tmboot を実行して、アプリケーションを起動します。
      $ 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 コマンドを使用します。

    1. 次のコマンドを入力します。
      $ tmadmin

      次が出力されます。

      tmadmin - Copyright (c) 1999 BEA Systems, Inc. All rights reserved.
      >

    注記 大なり記号 (>) は、tmadmin のプロンプトです。

    1. printserver(psr) コマンドを入力して、サーバに関する情報を出力します。
    > 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 )
    >

    1. printservice(psc) コマンドを入力して、サービスに関する情報を出力します。
    > psc
    Service Name Routine Name a.out Name Grp Name ID Machine # Done Status
    ------------ ------------ ---------- -------- -- ------- ------ ------
    TOUPPER TOUPPER simpserv GROUP1 1 simple - AVAIL
    >

    関連項目

     


    ステップ 8: アプリケーションのシャットダウン

    1. tmshutdown を実行して、アプリケーションをシャットダウンします。
      $ 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.
      $

    2. ULOG の内容を確認します。
      $ 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

    関連項目

     

    Back to Top Previous Next
    Contact e-docsContact BEAwebmasterprivacy