ページの先頭行へ戻る
Interstage Application Server アプリケーション作成ガイド(コンポーネントトランザクションサービス編)

4.1 サーバアプリケーションの開発

  サーバアプリケーションを記述するために必要な以下の事項を説明します。

サーバアプリケーションの構造

  一般のアプリケーションは、前処理、本処理、後処理という3つの構成で成り立っています。前処理として行う処理は、使用するデータベースの接続処理やデータベースのオープン処理などです。後処理として行う処理は、接続中データベースの切断処理やオープン中データベースのクローズ処理などです。
  前処理および後処理で行うことは、使用するデータベース管理システムごとに決まっています。そのため、Interstageでは前出口プログラムおよび後出口プログラムの機能を提供します。この機能を実現するのがAPM(Application Program Manager)です。
  APMを使用することにより、サーバアプリケーション開発者は、本処理だけを開発することで、サーバアプリケーションの作成が可能となります。
  サーバアプリケーションの構造を以下に示します。

  なお、データベース管理システムが提供するトランザクションを使用する場合には、サーバアプリケーション自身がデータベースとの接続や切断処理を行う必要があります。このような前処理および後処理を、出口プログラムとして本処理部分とは別に作成することができます。
  この出口プログラムを作成することで、データ処理ごとに行っていたデータベースとの接続や切断処理を出口プログラムで行うことができるようになるため、効率の良い処理を構築することができます。


  データベース管理システムが提供するトランザクションを使用する場合のサーバアプリケーションの構造を以下に示します。

  APMとサーバアプリケーションの関係は、主プログラムと副プログラムという関係となります。また、サーバアプリケーションはAPMと動的結合により実行されます。APMとサーバアプリケーションの関係について以下に示します。

  サーバアプリケーションと、一般のアプリケーションとの違いを以下に示します。

注意

  前出口プログラムは、ワークユニット起動時にアプリケーションプロセス(APM)単位で実行され、後出口プログラムは、ワークユニット停止時にアプリケーションプロセス(APM)単位で実行されます。ただし、ワークユニット強制停止時およびワークユニット異常終了時は、後出口プログラムは実行されません。
  このとき、前出口プログラムおよび後出口プログラムの復帰値(PROGRAM-STATUS)が0の場合は正常、0以外の場合は異常とします。復帰値が0以外の場合、ワークユニット起動時では、ワークユニットの起動失敗となり、ワークユニット停止時では、警告メッセージを出力し、ワークユニット停止処理は正常に終了します。
  以下の処理はInterstageが行うため、サーバアプリケーションで考慮する必要はありません。

  ただし、サーバアプリケーションが例外を使用する場合は、CORBAの初期化メソッドの呼び出しが必要です。

サーバアプリケーションの入出力情報

  サーバアプリケーションは、クライアントからの呼び出し時に、スケルトンを経由して、IDLで定義した入力インタフェースで呼び出されます。また、サーバアプリケーションの処理が完了すると、スケルトンを経由してIDLで定義した出力インタフェースがクライアントに返却されます。
  サーバアプリケーションの動作概要を以下に示します。

  サーバアプリケーションの入出力インタフェースはCORBAで規定されています。CORBAのデータ型と言語とのマッピングを以下に示します。

CORBAデータ型

型宣言

COBOL表記

基本データ型

整数型

・long long
・long
・unsigned long
・short
・unsigned short

・CORBA-LONG-LONG
・CORBA-LONG
・CORBA-UNSIGNED-LONG
・CORBA-SHORT
・CORBA-UNSIGNED-SHORT

・PIC S9(18) COMP-5
・PIC S9(9) COMP-5
・PIC 9(9) COMP-5
・PIC S9(4) COMP-5
・PIC 9(4) COMP-5

浮動小数点型

・float
・double

・CORBA-FLOAT
・CORBA-DOUBLE

・COMP-1
・COMP-2

文字型

・char
・wchar

・CORBA-CHAR
・CORBA-WCHAR

・PIC X(1)
・PIC N(1)

オクテット

・octet

・CORBA-OCTET

・PIC 9(4) COMP-5

ブーリアン

・boolean

・CORBA-BOOLEAN

・PIC 9(9) COMP-5

文字列型

・string
・wstring

    ―――――――

・PIC X(n)
・PIC N(n)

構造データ型

構造体

・struct

    ―――――――

・集団項目

配列

・array

    ―――――――

・OCCURS句

シーケンス

・sequence

  

・OCCURS句

  CORBA-STRING型およびCORBA-WSTRING型のデータを入力とする場合は、COBOLプログラムで扱えるように変換処理を行う必要があります。変換処理を行うには、TDSTRINGGETまたはTDWSTRINGGETを呼び出します。この変換処理はTDSTRINGSETまたはTDWSTRINGSETを呼び出して行います。TDSTRINGGET、TDWSTRINGGET、TDSTRINGSETおよびTDWSTRINGSETの詳細については、“リファレンスマニュアル(API編)”を参照してください。
  また、サーバアプリケーションからスケルトンに、outパラメタ、またはinoutパラメタの文字列型のデータを受け渡す場合、TDSTRINGALLOCまたはTDWSTRINGALLOCにより領域を獲得する必要があります。TDSTRINGALLOCおよびTDWSTRINGALLOCの詳細については、“リファレンスマニュアル(API編)”を参照してください。

  なお、サーバアプリケーションでは、コンテキスト情報を使用することはできません。サーバアプリケーションに対しては、第1引数と最後の1つ前の引数でシステムパラメタ、第2引数以降IDLで定義したパラメタおよび最後の引数で復帰値というインタフェースでデータの入出力を行います。これらのインタフェースのパラメタは、COBOLプログラムのLINKAGE SECTIONで指定します。LINKAGE SECTIONにおける記述形式については、COBOLのマニュアルを参照してください。

  また、IDL定義にoutパラメタを定義している場合、サーバアプリケーションが処理を終了する際には、必ずoutパラメタに復帰データを設定しなければなりません。outパラメタに復帰データが設定されていない場合、サーバアプリケーションプロセスが異常終了することがあります。

クライアントアプリケーションへの復帰値

  クライアントアプリケーションへの復帰値は、Interstageにより規定されています。

復帰値

意味

アプリケーションの指定可否

0~10000

サーバアプリケーション任意

10001

システム異常検出(メモリ不足等)

不可

10002

システムで異常検出

不可

10003

AIM連携のホスト間通信処理で異常検出

不可

10004

以下のいずれかの異常を検出

  • サーバアプリケーションでの異常または、

  • オペレーション名不当

不可

10005

AIM連携のセション継続機能において異常検出

不可

10006

アクセス権がないユーザからの要求

不可

10007

プロセスバインド機能において異常検出(注)

不可

10008

最大キューイング数に達した

不可

(注)IPCOMによる負荷分散を行っている環境でプロセスバインド機能を使用した場合にも復帰します。

復帰値0~10000

  クライアントアプリケーションとサーバアプリケーションで任意に使用することができます。Interstageはこれらの復帰値を正常とみなします。
  なお、サーバアプリケーションの本処理からの復帰値は、プログラムの最後の引数に設定してください。

復帰値1000110008

  Interstageがクライアントに通知する復帰値であり、システムで異常が検出されたことを意味します。クライアントに復帰値10001~10008が通知された場合は、同時にその異常の詳細がエラーログに記録されます。
  また、復帰値が10004で、エラーログに詳細が出力されていない場合は、クライアントから呼び出したオペレーションが、サーバのスケルトンに定義されていない(上記表の「オペレーション名が不当」に該当する)可能性があります。クライアントのスタブとサーバのスケルトンが同一のIDL定義から生成されているか、不一致がないかを確認してください。

  なお、エラーログは、以下のファイルに採取されます。エラーログの内容については“メッセージ集”の“コンポーネントトランザクションサービスが出力するログメッセージ”を参照してください。

  INTERSTAGEインストールフォルダ\td\trc\lorb\errlog0
   (トランザクションアプリケーションの場合)

  INTERSTAGEインストールフォルダ\td\trc\rorb\errlog0
  (AIM連携の場合)

  /var/opt/FSUNtd/trc/lorb/errlog0
   (トランザクションアプリケーションの場合)

  /var/opt/FSUNtd/trc/rorb/errlog0
  (AIM連携の場合)

注意

サーバアプリケーションプロセスの形態

  サーバアプリケーションプロセスには以下の2つの形態があります。

スレッドモード

  サーバアプリケーションプロセスがマルチスレッドで動作する形態です。ただし、サーバアプリケーションはプライマリスレッド上でのみ動作し、マルチスレッドでは動作しません。スレッドモードではInterstageの制御用スレッドが複数起動します。

  通常はスレッドモードを使用してください。

プロセスモード

  サーバアプリケーションプロセスがシングルスレッドで動作する形態です。本モードは、サーバアプリケーションより呼び出される他製品のライブラリが、マルチスレッドで動作するプロセス上で呼び出すことができない場合にのみ使用してください。