サーバアプリケーションの処理を、オペレーティングシステムに添付されているエディタなどを使用して記述します。
ローカルトランザクション運用の場合は、リソースマネージャが提供するトランザクション命令と、リソースマネージャを使用するために必要なデータベースの結合処理や切り離し文などを記述してください。記述するトランザクション命令については、使用するリソースマネージャのマニュアルを参照してください。
IDL定義とサーバアプリケーション名の関係を以下に示します。
モジュール名_インタフェース名_impl::オペレーション名 |
サーバアプリケーションにインクルードするヘッダファイル
IDLコンパイルにより生成される以下のヘッダファイルをサーバアプリケーションにインクルードしてください。
ヘッダファイル | 種別 |
---|---|
TD_ IDLファイル名.h | スケルトン用ヘッダファイル |
IDLファイル名.h | スタブ用ヘッダファイル(注) |
(注)
中継用サーバアプリケーションを作成するときに必要です。スタブ側のIDLファイルのコンパイルにより生成されます。
出口プログラムは以下の形式で作成してください。なお、ここでの出口プログラムとは、前出口プログラム、後出口プログラム、および、プロセスバインド機能を使用する場合の異常出口プログラムを指します。
引数 | なし |
復帰値 | long型 |
復帰値が0以外の場合は、出口プログラム異常終了とみなし、出口プログラム種別ごとに以下の動作となります。
前出口プログラムの場合、ワークユニットの起動に失敗します。
後出口プログラムの場合、警告メッセージを出力し、ワークユニットの停止処理は成功します。
プロセスバインド機能の異常出口の場合、アプリケーションプロセスが異常終了します。その後、アプリケーション異常時の自動再起動が設定されている場合は、アプリケーションプロセスが自動再起動され、自動再起動が設定されていない場合は、ワークユニットが異常終了します。
以下に出口プログラムの設定方法について示します。
出口プログラムの設定方法
C++言語で出口プログラムを使用する場合、以下の方法を使用してください。C++言語の場合は、C言語またはCOBOL(COBOLは、Windows(R)版、Solaris版のみ)のように、ワークユニット定義に前出口プログラム名、後出口プログラム名および異常出口プログラム名を記述する必要はありません。ただし、出口プログラム最大処理時間については、ワークユニット定義に記述してください。
なお、異常出口プログラムは、プロセスバインド機能を使用する場合にのみ有効となります。
ヘッダの修正
tdcコマンドによりスケルトンのソースを生成する場合、スケルトンのソースと共に、以下の形式の名前でincludeファイルが出力されます。
TD_オブジェクト名_proto.h |
出口プログラムを使用する場合、TD_オブジェクト名_proto.hのファイルを修正する必要があります。
[前出口プログラムを使用する場合]
前出口プログラムを使用する場合は、includeファイル内の"long ApmInit();"のコメントを削除してください。
class ExtpApmUser:public ExtpApmBase{ public: long ApmInit(); //long ApmRecover(); //long ApmDestroy(); }; |
[後出口プログラムを使用する場合]
後出口プログラムを使用する場合は、includeファイル内の"long ApmDestroy();"のコメントを削除してください。
class ExtpApmUser:public ExtpApmBase{ public: //long ApmInit(); //long ApmRecover(); long ApmDestroy(); }; |
[異常出口プログラムを使用する場合]
異常出口プログラムを使用する場合は、includeファイル内の"long ApmRecover();"のコメントを削除してください。
class ExtpApmUser:public ExtpApmBase{ public: //long ApmInit(); long ApmRecover(); //long ApmDestroy(); }; |
[前出口プログラム、後出口プログラムおよび、異常出口プログラムを使用する場合]
前出口プログラム、後出口プログラムおよび、異常出口プログラムを使用する場合は、includeファイル内の"long ApmInit();"、"long ApmDestroy();"および、"long ApmRecover();"のコメントを削除してください。
class ExtpApmUser:public ExtpApmBase{ public: long ApmInit(); long ApmRecover(); long ApmDestroy(); }; |
前出口プログラム名は"ApmInit"、後出口プログラム名は"ApmDestroy"、異常出口は"ApmRecover"という固定名で作成する必要があります。そのため、出口プログラムを作成する場合、以下のように記述する必要があります。
[前出口プログラムを作成する場合]
#include "TD_オブジェクト名_proto.h" long ExtpApmUser::ApmInit(){ // 前出口の処理 }; |
[後出口プログラムを作成する場合]
#include "TD_オブジェクト名_proto.h" long ExtpApmUser::ApmDestroy(){ // 後出口の処理 }; |
[異常出口プログラムを作成する場合]
#include "TD_オブジェクト名_proto.h" long ExtpApmUser::ApmRecover(){ // 異常出口の処理 }; |
サーバアプリケーションにおいて、引数に指定するオブジェクト情報は設定されていません。
セション情報管理機能を使用する場合は、“5.3 セション情報管理機能を使用したトランザクションアプリケーションの作成”を参照してください。
トランザクションアプリケーションにおいて、イベントサービスを利用する場合、使用可能なイベントサービスの機能は以下になります。
Pushモデルのサプライヤ
Microsoft(R) Visual C++ .NETまたは、Microsoft(R) Visual C++ 2005を使用してアプリケーションを作成する場合の注意点
アプリケーションより標準出力または標準エラー出力に向けて出力されたデータは、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されます。
しかし、Microsoft(R) Visual C++ .NETまたは、Microsoft(R) Visual C++ 2005を使用してビルドされたアプリケーションでは、標準出力または標準エラー出力に向けて出力されたデータが、カレントフォルダ配下のstdoutファイルまたはstderrファイルに出力されません。
これを回避し正しく出力するためには、アプリケーションにおいて以下の対処を実施してください。
プログラムの先頭に以下のコードを追加してください。(注1)
freopen("stdout", "w", stdout); freopen("stderr", "w", stderr);
なお、前出口プログラムを使用される場合は、前出口プログラムの先頭に追加してください。前出口プログラムに追加した場合、本処理および後出口プログラムへの対処は必要ありません。
前出口プログラムを使用されない場合は、本処理の先頭に追加し、かつ、初回呼び出し時のみ実行するよう対処してください。
注1) Microsoft(R) Visual C++ 2005を使用してビルドした場合、“warning C4996: 'freopen' が古い形式として宣言されました。”という警告が出力される場合がありますが、動作上の問題はありません。