分散トランザクション処理機能 OpenTP1 使用の手引 Windows(R)編
ここでは,サービス関数動的ローディング機能使用時のUAP共用ライブラリについて説明します。サービス関数動的ローディング機能の概要についてはOpenTP1シリーズのマニュアルを参照してください。
なお,サービス関数動的ローディング機能は,次の場合は使用できません。
サービス関数がUAP共用ライブラリに存在する場合,ユーザサーバ起動時のUAP共用ライブラリに含まれる,ユーザサービス定義で指定するサービス関数は,必ずUAP共用ライブラリからエクスポートしてください。
エクスポートされていない場合(非常駐サーバの場合はプロセス起動時)は,次のように動作します。
ユーザサービス定義で指定するサービス関数以外の関数のエクスポートは必須ではないため,処理形態に応じてエクスポートしてください。
UAP共用ライブラリから関数をエクスポートするには,libコマンドや,linkコマンドを用いる方法があります。次のどれかの方法でサービス関数をエクスポートしてください。
作成例については,次のサンプルソース(メイクファイル)を参照してください。
| SPP開発言語と開発環境 | メイクファイル名称 | |
|---|---|---|
| C言語 | %DCDIR%\examples\base\aplib\c\make_svdl |
|
| COBOL言語 | COBOL2002 | %DCDIR%\examples\base\aplib\cobol\make_svdl |
| Net Express | %DCDIR%\examples\base\aplib\cobol\makemf_svdl |
|
UAP共用ライブラリ名にUAP共用ライブラリ名称だけを指定する場合,OpenTP1は指定されたUAP共用ライブラリを,OSのライブラリサーチパスを基に検索して使用します。Windows上では,次の検索パスで,指定UAP共用ライブラリのサーチ処理が行われます。なお,次の検索パスは,優先度の高い順に並んでいます。
次の例では,(b)のフォルダ下にあるUAP共用ライブラリがUAP上にローディングされます。
| UAPの存在するパス名:c:\user\aplib\user.exe DLLの存在するパス名:c:\opentp1\aplib\libusr.dll c:\user\aplib\libusr.dll <プロセスサービス定義> prcsvpath c:\opentp1\aplib; c:\user\aplib (a) (b) |
サービス関数動的ローディング機能の使用時は,オンラインを停止しなくてもユーザサーバのサービス関数を入れ替えられます。ここでは,サービス関数の入れ替え手順,および入れ替え後の確認手順について説明します。
ユーザサービス定義を変更する場合と,UAP共用ライブラリサーチパスを変更する場合に分けて,サービス関数の入れ替え方法を説明します。
新しい実行形式ファイルの起動時刻を確認し,dcsvstartコマンドまたはscdrsprcコマンドの実行時刻と比較してください。
新しい実行形式ファイルの起動時刻は,次の手順で確認します。ここでは,Windows Server 2008の場合を例に記載しています。
ユーザサービス定義のserviceオペランドには,絶対パスと,ライブラリ名称の指定を併記できます。
ただし,絶対パスで指定したUAP共用ライブラリ名とライブラリ名称で指定したUAP共用ライブラリ名が同一の場合,記述する順序によってローディングされるUAP共用ライブラリパスが異なります。
先に指定する名称別に,次に説明します。
ユーザサービス定義のserviceオペランドで指定したUAP共用ライブラリ内で,TLS(スレッドローカルストレージ)を使用した変数宣言をしないでください。次のようなコーディングを含むUAPオブジェクトがUAP共用ライブラリ内に存在する場合,該当する変数を参照するときに,アクセス例外が発生します。
__declspec(Thread) int sample; |
All Rights Reserved. Copyright (C) 2010, 2013, Hitachi, Ltd.