Interstage Application Server アプリケーション作成ガイド (コンポーネントトランザクションサービス編)
目次 索引 前ページ次ページ

第3章 サーバアプリケーションの作成(C++言語)

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

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

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

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

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

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

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

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

注意

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

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

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

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

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

CORBAデータ型

型宣言

基本データ型

整数型

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

・CORBA::LongLong
・CORBA::Long
・CORBA::ULong
・CORBA::Short
・CORBA::UShort

浮動小数点型

・float
・double
・long double

・CORBA::Float
・CORBA::Double
・CORBA::LongDouble

文字型

・char
・wchar

・CORBA::Char
・CORBA::WChar

オクテット

・octet

・CORBA::Octet

ブーリアン

・boolean

・CORBA::Boolean

文字列型

・string
・wstring

・CORBA::Char*
・CORBA::WChar*

構造データ型

構造体

・struct

  ―――――――

配列

  ―――――――

  ―――――――

シーケンス

・sequence

  ―――――――

 サーバアプリケーションからスケルトンに、outパラメタまたはinoutパラメタのstring型のデータを受け渡す場合はTD::string_alloc、wstring型のデータを受け渡す場合はTD::wstring_allocにより領域を獲得する必要があります。また、string、wstring型データおよび構造データ型の場合には、サーバのアプリケーション用APIを利用する必要があります。サーバのアプリケーション用APIの詳細は、C++の提供クラスを参照してください。
 なお、サーバアプリケーションでは、コンテキスト情報を使用することはできません。サーバアプリケーションに対しては、第1引数と最後の引数でシステムパラメタ、第2引数以降IDLで定義したパラメタというインタフェースでデータの入出力を行います。

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

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

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

復帰値

意味

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

0〜10000

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

10001

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

不可

10002

システムで異常検出

不可



10003

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

不可

10004

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

  • サーバアプリケーションでの異常または、
  • プロセスバインド機能使用時にセションIDが参照できないまたは、
  • プロセスバインド機能使用時にスケルトンで領域処理獲得に失敗または、
  • オペレーション名が不当

不可



10005

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

不可

10006

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

不可

10007

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

不可

10008

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

不可

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

復帰値0〜10000
 クライアントアプリケーションとサーバアプリケーションで任意に使用することができます。Interstageはこれらの復帰値を正常とみなします。
復帰値10001〜10008
 Interstageがクライアントに通知する復帰値であり、システムで異常が検出されたことを意味します。クライアントに復帰値10001〜10008が通知された場合は、同時にその異常の詳細がエラーログに記録されます。

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

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

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

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

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

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

注意

 クライアントアプリケーションでは、復帰値を参照する前に例外を判定する必要があります。例外が発生している場合は、復帰値は不定となります。クライアントアプリケーションでの例外処理については、“アプリケーション作成ガイド(CORBAサービス編)”を参照してください。

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

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

スレッドモード

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

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

プロセスモード

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


目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2005