サーバアプリケーションを記述するために必要な以下の事項を説明します。
サーバアプリケーションの構造
サーバアプリケーションの入出力情報
クライアントアプリケーションへの復帰値
サーバアプリケーションプロセスの形態
サーバアプリケーションの構造
一般のアプリケーションは、前処理、本処理、後処理という3つの構成で成り立っています。前処理として行う処理は、使用するデータベースの接続処理やデータベースのオープン処理などです。後処理として行う処理は、接続中データベースの切断処理やオープン中データベースのクローズ処理などです。
前処理および後処理で行うことは、使用するデータベース管理システムごとに決まっています。そのため、Interstageでは前出口プログラムおよび後出口プログラムの機能を提供します。この機能を実現するのがAPM(Application Program Manager)です。
APMを使用することにより、サーバアプリケーション開発者は、本処理だけを開発することで、サーバアプリケーションの作成が可能となります。
サーバアプリケーションの構造を以下に示します。
なお、データベース管理システムが提供するトランザクションを使用する場合には、サーバアプリケーション自身がデータベースとの接続や切断処理を行う必要があります。このような前処理および後処理を、出口プログラムとして本処理部分とは別に作成することができます。
この出口プログラムを作成することで、データ処理ごとに行っていたデータベースとの接続や切断処理を出口プログラムで行うことができるようになるため、効率の良い処理を構築することができます。
データベース管理システムが提供するトランザクションを使用する場合のサーバアプリケーションの構造を以下に示します。
APMとサーバアプリケーションの関係は、主プログラムと副プログラムという関係となります。また、サーバアプリケーションはAPMと動的結合により実行されます。APMとサーバアプリケーションの関係について以下に示します。
サーバアプリケーションと、一般のアプリケーションとの違いを以下に示します。
副プログラムとして作成する必要があります。
スレッドに関する命令は記述できません。
実行プログラムは、動的リンクライブラリの形式で作成する必要があります。
STOP RUN文を記述することはできません。
関数名、および変数名の長さは30文字以内です。
アンダースコア“_”は、ハイフン“-”に置き換える必要があります。
前出口プログラムは、ワークユニット起動時にアプリケーションプロセス(APM)単位で実行され、後出口プログラムは、ワークユニット停止時にアプリケーションプロセス(APM)単位で実行されます。ただし、ワークユニット強制停止時およびワークユニット異常終了時は、後出口プログラムは実行されません。
このとき、前出口プログラムおよび後出口プログラムの復帰値(PROGRAM-STATUS)が0の場合は正常、0以外の場合は異常とします。復帰値が0以外の場合、ワークユニット起動時では、ワークユニットの起動失敗となり、ワークユニット停止時では、警告メッセージを出力し、ワークユニット停止処理は正常に終了します。
以下の処理はInterstageが行うため、サーバアプリケーションで考慮する必要はありません。
CORBAの初期化メソッドの呼び出し
メソッドの登録
サーバの活性化/非活性化
ただし、サーバアプリケーションが例外を使用する場合は、CORBAの初期化メソッドの呼び出しが必要です。
サーバアプリケーションは、クライアントからの呼び出し時に、スケルトンを経由して、IDLで定義した入力インタフェースで呼び出されます。また、サーバアプリケーションの処理が完了すると、スケルトンを経由してIDLで定義した出力インタフェースがクライアントに返却されます。
サーバアプリケーションの動作概要を以下に示します。
サーバアプリケーションの入出力インタフェースはCORBAで規定されています。CORBAのデータ型と言語とのマッピングを以下に示します。
CORBAデータ型 | 型宣言 | COBOL表記 | ||
---|---|---|---|---|
基本データ型 | 整数型 | ・long long | ・CORBA-LONG-LONG | ・PIC S9(18) COMP-5 |
浮動小数点型 | ・float | ・CORBA-FLOAT | ・COMP-1 | |
文字型 | ・char | ・CORBA-CHAR | ・PIC X(1) | |
オクテット | ・octet | ・CORBA-OCTET | ・PIC 9(4) COMP-5 | |
ブーリアン | ・boolean | ・CORBA-BOOLEAN | ・PIC 9(9) COMP-5 | |
文字列型 | ・string | ――――――― | ・PIC X(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による負荷分散を行っている環境でプロセスバインド機能を使用した場合にも復帰します。
クライアントアプリケーションとサーバアプリケーションで任意に使用することができます。Interstageはこれらの復帰値を正常とみなします。
なお、サーバアプリケーションの本処理からの復帰値は、プログラムの最後の引数に設定してください。
Interstageがクライアントに通知する復帰値であり、システムで異常が検出されたことを意味します。クライアントに復帰値10001~10008が通知された場合は、同時にその異常の詳細がエラーログに記録されます。
また、復帰値が10004で、エラーログに詳細が出力されていない場合は、クライアントから呼び出したオペレーションが、サーバのスケルトンに定義されていない(上記表の「オペレーション名が不当」に該当する)可能性があります。クライアントのスタブとサーバのスケルトンが同一のIDL定義から生成されているか、不一致がないかを確認してください。
なお、エラーログは、以下のファイルに採取されます。エラーログの内容については“メッセージ集”の“コンポーネントトランザクションサービスが出力するログメッセージ”を参照してください。
INTERSTAGEインストールフォルダ\td\trc\lorb\errlog0 INTERSTAGEインストールフォルダ\td\trc\rorb\errlog0 |
/var/opt/FSUNtd/trc/lorb/errlog0 /var/opt/FSUNtd/trc/rorb/errlog0 |
クライアントアプリケーションでは、復帰値を参照する前に例外を判定する必要があります。例外が発生している場合は、復帰値は不定となります。クライアントアプリケーションでの例外処理については、“アプリケーション作成ガイド(CORBAサービス編)”を参照してください。
COBOLでは復帰値としてPROGRAM-STATUSが復帰します。サーバアプリケーション終了時にPROGRAM-STATUSに値を設定していないと、クライアント復帰する値は不定となります。
サーバアプリケーションプロセスの形態
サーバアプリケーションプロセスには以下の2つの形態があります。
サーバアプリケーションプロセスがマルチスレッドで動作する形態です。ただし、サーバアプリケーションはプライマリスレッド上でのみ動作し、マルチスレッドでは動作しません。スレッドモードではInterstageの制御用スレッドが複数起動します。
通常はスレッドモードを使用してください。
サーバアプリケーションプロセスがシングルスレッドで動作する形態です。本モードは、サーバアプリケーションより呼び出される他製品のライブラリが、マルチスレッドで動作するプロセス上で呼び出すことができない場合にのみ使用してください。