• 検索結果がありません。

言語ハンドラ構造体

ドキュメント内 MONTSUQI Ver (ページ 33-36)

第 3 章 構造 15

4.2 言語ハンドラ構造体

言語ハンドラの構造体は以下のようになっている。

typedef struct {

char *name;

Bool fUse;

void (*ExecuteProcess)(ProcessNode *);

void (*StartBatch)(char *name, char *param);

/* DC function */

void (*ReadyDC)(void);

void (*StopDC)(void);

void (*CleanUpDC)(void);

/* DB function */

void (*ReadyDB)(void);

void (*StopDB)(void);

void (*CleanUpDB)(void);

} MessageHandler;

それぞれの値をセットして、アプリケーションサーバ起動時に登録する。メンバの意味は以下のようになっ ている。

name

ハンドラの扱う言語の名前を指定する。この名前を言語ハンドラ名として、LD定義体やBDのbind 定義で参照する

32 第4章 言語ハンドラ作成の手引

fUse

アプリケーションサーバが起動する時に、その言語ハンドラが実際に使われているかどうかを調べた結 果を入れるフラグ領域。起動時に一旦初期化されるので、値は何でも構わない

ExecuteProcess

オンラインプログラムのトランザクション毎にアプリケーションに処理を渡すために呼ばれる

StartBatch

バッチ処理を起動する時に呼び出される

ReadyDC

アプリケーションサーバが起動する時に、言語ハンドラ固有の初期化を行うために呼び出される。

StopDC

オンラインプログラムを停止する時に呼び出される

CleanUpDC

オンラインプログラム停止後の後始末に呼び出される

ReadyDB

アプリケーションが使うデータベースサブシステムを初期化するために呼び出される

StopDB

データベースサブシステムとアプリケーションを切り離すために呼び出される

CleanUpDB

アプリケーションサーバ停止後のデータベースサブシステムの後始末に呼び出される

4.2.1 ExecureProcess

オンラインプログラムがトランザクションを処理するために、実際のアプリケーションを呼び出す処理で ある。

引数はProcessNode *である。この構造体はアプリケーションが実行されるに必要な全ての環境が格納さ

れている。詳細は??を参照のこと。

この関数の中での実際の処理は、

1. mcprec中のdc.moduleを読み出し、アプリケーションモジュール名を得る

2. アプリケーションモジュールをロードする 3. アプリケーションを呼び出す

ということになる。

アプリケーションの実行は、トランザクション毎にアイソレートされなくてはならない。つまり、同じ内容 の引数でこの手続きが呼び出された場合、データベースの更新を除いては、常に同じ結果にならなくてはなら ない。これは、この関数には処理結果に影響を与えるような状態変数はあってはならないことを意味している。

4.2.2 StartBatch

バッチアプリケーションを起動する時に呼び出される。

引数はアプリケーションモジュール名と、それに渡すべき起動パラメータである。いずれもchar *のASCIZ 文字列である。

この関数の中での実際の処理は、

4.2 言語ハンドラ構造体 33 1. アプリケーションモジュールをロードする

2. アプリケーションを呼び出す

ということになる。また、バッチプログラムの場合、後に述べるReadyDC, StopDC, CleanUpDCは呼び出 されないため、アプリケーションが動くための環境の準備等も、この中で行わなければならない。

4.2.3 ReadyDC

アプリケーションサーバが起動する時に、言語ハンドラ固有の初期化を行うために呼び出される。

引数はない。

この関数はオプショナルなので、機能として必要のない場合は、何もしなくても良く、その時にはNULLに する。

4.2.4 StopDC

アプリケーションサーバが停止する時に、言語ハンドラ固有の終了処理を行うために呼び出される。

引数はない。

この関数はオプショナルなので、機能として必要のない場合は、何もしなくても良く、その時にはNULLに する。

4.2.5 CleanUpDC

アプリケーションサーバが停止する時に、言語ハンドラ固有の終了処理後の後処理を行うために呼び出さ れる。

引数はない。

この関数はオプショナルなので、機能として必要のない場合は、何もしなくても良く、その時にはNULLに する。

この関数は全ての言語ハンドラのStopDCを実行した後に呼び出される。

4.2.6 ReadyDB

アプリケーションサーバが起動する時に、言語ハンドラ固有のデータベースの初期化を行うために呼び出さ れる。

引数はない。

この関数はオプショナルなので、機能として必要のない場合は、何もしなくても良く、その時にはNULLに する。

4.2.7 StopDB

アプリケーションサーバが停止する時に、言語ハンドラ固有のデータベースの終了処理を行うために呼び出 される。

引数はない。

この関数はオプショナルなので、機能として必要のない場合は、何もしなくても良く、その時にはNULLに する。

34 第4章 言語ハンドラ作成の手引

4.2.8 CleanUpDB

アプリケーションサーバが停止する時に、言語ハンドラ固有のデータベース終了処理後の後処理を行うため に呼び出される。

引数はない。

この関数はオプショナルなので、機能として必要のない場合は、何もしなくても良く、その時にはNULLに する。

この関数は全ての言語ハンドラのStopDCを実行した後に呼び出される。

ドキュメント内 MONTSUQI Ver (ページ 33-36)