Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成の手引


5.1.7 サーバUAPの作成方法

XATMIインタフェースの通信で使うサービス関数(サーバUAP)から関数を呼び出す方法について説明します。OpenTP1のサービス関数とは,コーディングの方法が異なります。

〈この項の構成〉

(1) サーバUAPで提供するサービス関数のコーディング

C言語の場合は,サービス関数のコーディングをするときは,tpservice()で示す形式に従ってください。tpservice()では,コーディングするための標準的な形式を示します。

COBOL言語の場合は,サービスプログラムの処理でXATMIインタフェースのAPIを使う前にTPSVCSTARTを呼び出します。

(a) サービス関数の終了方法

サービス関数は,tpreturn()【TPRETURN】を呼び出すことでその処理が終了したことになります。XATMIインタフェースの通信では,returnでサービス関数を終了する直前に,必ずtpreturn()を呼び出してください。tpreturn()を呼び出したあとで何らかの処理をした場合,その動作については保証しません。

(b) サービス名の広告

サーバUAPでは,自分のサービス名がサービスを提供できる状態であることを宣言できます(サービス名の広告)。サービス名を広告する場合は,tpadvertise()【TPADVERTISE】を使います。

サーバUAPの起動時には,ユーザサービス定義に指定してあるサービスが広告済みとなります。ユーザサービス定義に指定してあるサービス名でtpadvertise()を呼び出す必要はありません。

サービス名の広告を取り消す場合は,tpunadvertise()【TPUNADVERTISE】を使います。tpunadvertise()を呼び出すことで,該当のサービス名に対するサービス要求はエラーリターンします。いったんtpunadvertise()で広告を取り消したサービス名でも,そのあとでtpadvertise()を呼び出せば,再びサービス要求を受け付けることができます。

tpadvertise()とtpunadvertise()は,SPPでだけ使えます。ただし,dc_rpc_mainloop関数を呼び出す前には使えません。

tpadvertise()は,広告する関数アドレスを引数に持っていて,広告できるかどうかをチェックします。OpenTP1では,tpadvertise()を呼び出すサーバへのサービスグループと,サービスを広告しているサーバのサービスグループが同じであれぱ,すでに広告されていると見なして正常リターンします。サービスグループが一致しないと,tpadvertise()はエラーリターンします。

(2) 一つのノードでの負荷分散(マルチサーバ負荷バランス)と,tpunadvertise()の関係

一つのノードで負荷分散している場合(マルチサーバ負荷バランス機能を使用している場合),tpunadvertise()をどれか一つのプロセスから呼び出すと,負荷分散しているプロセスすべてでサービスを受け付けられなくなります。その後,tpadvertise()で再びサービスを広告すれば,サービス要求を受け付けられるようになります。

マルチサーバを使えるのは,キュー受信型サーバ(スケジュールサービスでスケジュールされるSPP)です。ソケット受信型サーバはマルチサーバを使えません。