1.2.8 タイマトランザクション(ee_tim_〜)(C言語)
(1) ee_tim_execap_perm
- 名称
-
永続指定のタイマトランザクションの起動
- 形式
-
ANSI C,C++の形式
#include <eetim.h> int ee_tim_execap_perm(EEULONG acttype, EEULONG action, EEULONG active, char *reqid, char *service, EEULONG priority, char *data, EEULONG dataleng, EELONG flags);
- 機能
-
UAPから,永続指定のトランザクションを起動します。すぐに起動することも,設定した時間経過後に起動することもできます。
UAPで値を設定する引数
- acttype
-
-
EETIM_INST
コミットとは無関係に,actionに設定した条件になったら直ちにトランザクションを起動する場合に設定します。
-
EETIM_COMT
コミット後,actionに設定した条件になったらトランザクションを起動する場合に設定します。
コミット前には起動されません。
-
- action
-
-
EETIM_INTV
経過時間指定のタイマ起動の場合に設定します。
activeに設定した時間だけ経過したあとに,トランザクションを起動します。acttypeにEETIM_INSTを設定した場合は,ee_tim_execap_perm関数を呼び出してからの経過時間,acttypeにEETIM_COMTを設定した場合は,コミットからの経過時間です。
-
EETIM_TIME
時刻指定のタイマ起動の場合に設定します。activeに設定した時刻に,トランザクションを起動します。
-
- active
-
-
経過時間指定のタイマ起動(actionにEETIM_INTVを設定)の場合
指定した時間経過後にトランザクションを起動します。タイマトランザクションは100ミリ秒単位に起動できます。設定できる時間の範囲は,1から3,600,000まで(100ミリ秒から100時間まで)です。acttypeにEETIM_INSTを設定した場合は,ee_tim_execap_perm関数を呼び出してからの経過時間,acttypeにEETIM_COMTを設定した場合は,コミットからの経過時間です。
指定方法の詳細については,マニュアル「OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引」のee_tim_execapを参照してください。
-
時刻指定のタイマ起動(actionにEETIM_TIMEを設定)の場合
トランザクションを起動する時刻を設定します。0時0分0秒を基準にして,起動時刻を秒数で算出して設定します。
(時刻の設定例)
午後2時30分30秒に起動させる場合:
14×3600+30×60+30=52,230
52,230をactiveに設定します。
設定できる値の範囲は,0(0時0分0秒に開始)から86,399(23時59分59秒に開始)までです。
指定方法の詳細については,マニュアル「OpenTP1 Version 7 分散トランザクション処理機能 TP1/Server Base Enterprise Option プログラム作成の手引」のee_tim_execapを参照してください。
-
- reqid
-
タイマトランザクションを取り消す場合のキーとなるリクエスト識別子を設定します。32バイトのバイト列で設定します。登録したタイマの参照,取り消しを行わない場合はNULLまたは32バイトの\0領域を設定します。
- service
-
起動するトランザクションのサービス名を,31バイト以内のアスキー文字列で設定します。文字列の最後にはヌル文字を設定してください。このヌル文字は文字列の長さに数えません。
- priority
-
タイマトランザクションが起動時刻を迎えた時点で,そのときに登録されている処理キューの中で,優先的に起動するか,非優先的に起動するかを設定してください。
EETIM_HI:優先的に起動します。
EETIM_LOW:非優先的に起動します。
- data
-
起動するトランザクションに渡す,データを設定します。
- dataleng
-
起動するトランザクションに渡すデータの長さ(バイト長)を設定します。渡せるデータの最大長はメモリ関連定義のtime_message_sizeの指定値,またはタイマデータ表作成コマンド(eetimtblh)の-zオプションで指定した最大引き継ぎデータ長のどちらか小さい値までです。渡すデータがない場合は0を設定します。
- flags
-
EENOFLAGSを設定します。
- リターン値
-
リターン値
意味
EE_OK
正常に終了しました。
EECOMER_ENVIRON
TP1/EEの環境下にありません。
EECOMER_CNDUOC
UOCから発行しているため,本機能は使用できません。
EECOMER_CNDBPP
オフラインバッチプロセスから発行しているため,本機能は使用できません。
EETIMER_ARGUMENT
引数に設定した値が間違っています。
EETIMER_NO_SERVICE
serviceに設定したサービス名が間違っています。
EETIMER_DATA_OVER
datalengに設定したデータ長が大き過ぎます。
EETIMER_RESOURCE_SHORT
次の要因によって,資源不足で登録できません。
-
メモリ関連定義のtime_message_noの指定値を超えています。
-
メモリ関連定義のicb_noの指定値を超えています。
-
メモリ関連定義のpce_noの指定値を超えています。
EETIMER_PROHIBIT
TP1/EEシステムが終了処理中のため,登録できません。
EETIMER_NO_ENTRY
指定したサービス名に対するエントリポインタがありません。
EETIMER_TIME_INJUSTICE
指定した時刻が先行および後退許容時間範囲内にありません。
EETIMER_CONDITION
発行条件が不正です。
EETIMER_TIMEOUT
タイマ登録処理がタイムアウトしました。
EETIMER_SQLERR
タイマデータ表へのタイマ登録処理が失敗しました。
EETIMER_IPC
タイマ登録処理で内部通信エラーが起こりました。
-
- 注意事項
-
-
acttypeにEETIM_COMTを設定した場合,コミット前にトランザクションが異常終了したとき,またはロールバックしたときは,本関数の要求は無効になります。同一のトランザクション内でee_trn_rollback_markがすでに発行されている場合は,EETIMER_CONDITIONエラーリターンします。
-
acttypeにEETIM_INSTを設定した場合,トランザクションが異常終了したとき,またはロールバックしたときも,本関数の要求は有効になります。
-
acttypeにEETIM_COMT,actionにEETIM_TIMEを設定した場合,先行/後退許容時間チェックは関数呼び出し時に行います。
関数呼び出し時点で先行/後退許容時間外の場合はエラーとし,コミット時には先行/後退許容時間のチェックは行いません。
コミット時に後退許容時間外となっていた場合はそのまま即時起動とします。
-
acttypeにEETIM_COMTを設定した本関数は,発行したトランザクションではトランザクションの最適化を行いません。
-
永続タイマを監視するTP1/EEの監視間隔や通信時間が起動時間の誤差となります。
-
本関数で登録した永続タイマは,タイマ登録したTP1/EEとは別のTP1/EEでタイマ取り消しを行えます。このため,reqidは同一のタイマデータ表に登録するTP1/EE間で一意の値を設定することを推奨します。
-
(2) ee_tim_execap_cancel_perm
- 名称
-
永続指定のタイマトランザクションの起動取り消し
- 形式
-
ANSI C,C++の形式
#include <eetim.h> int ee_tim_execap_cancel_perm(EEULONG acttype, char *reqid, EELONG flags);
- 機能
-
ee_tim_execap_perm関数で登録したタイマトランザクションを,指定時刻または時間に達する前に取り消すことができます。
UAPで値を設定する引数
- acttype
-
-
EETIM_INST
次のタイマトランザクションを,コミットとは無関係に直ちに取り消す場合に設定します。
・acttypeでEETIM_INSTを設定したee_tim_execap_perm関数のタイマトランザクション
・acttypeでEETIM_COMTを設定したee_tim_execap_perm関数(コミット後)のタイマトランザクション
-
EETIM_COMT
acttypeでEETIM_COMTを設定したee_tim_execap_perm関数のタイマトランザクションを取り消す場合に設定します。ただし,コミット前の場合に限ります。
-
EETIM_CMTC
次のタイマトランザクションを,コミット後に取り消す場合に設定します。
・acttypeでEETIM_INSTを設定したee_tim_execap_perm関数のタイマトランザクション
・acttypeでEETIM_COMTを設定したee_tim_execap_perm関数(コミット後)のタイマトランザクション
-
- reqid
-
取り消すタイマトランザクションを登録したee_tim_execap_perm関数発行時のreqidで設定したリクエスト識別子と同じものを設定します。同一のリクエスト識別子のタイマトランザクションが複数指定されている場合,acttypeでEETIM_INSTまたはEETIM_CMTCを設定したときは起動時刻の最も早いものを,acttypeでEETIM_COMTを設定したときは最も早く登録したものを取り消します。
- flags
-
EENOFLAGSを設定します。
- リターン値
-
リターン値
意味
EE_OK
正常に終了しました。
EECOMER_ENVIRON
TP1/EEの環境下にありません。
EECOMER_CNDUOC
UOCから発行しているため,本機能は使用できません。
EECOMER_CNDBPP
オフラインバッチプロセスから発行しているため,本機能は使用できません。
EETIMER_ARGUMENT
引数に設定した値が間違っています。
EETIMER_NOTHING
設定された要求識別子を持つタイマトランザクションは未登録,または起動中,またはすでに起動済みです。
EETIMER_CONDITION
発行条件が不正です。
EETIMER_TIMEOUT
タイマ取り消し処理がタイムアウトしました。
EETIMER_SQLERR
タイマデータ表へのタイマ取り消し処理が失敗しました。
EETIMER_IPC
タイマ取り消し処理で内部通信エラーが起こりました。
- 注意事項
-
-
acttypeでEETIM_COMTを設定したee_tim_execap_perm関数のタイマトランザクションは,コミット後は,取り消せません。コミット後に取り消したい場合は,acttypeでEETIM_INSTまたはEETIM_CMTCを設定して取り消してください。また,コミット前に取り消せるのは,本タイマトランザクションを登録したトランザクションからだけです。
-
すでに起動時刻に達しているタイマトランザクションの起動は,取り消しできません。
-
acttypeでEETIM_CMTCを設定した場合,対象のタイマトランザクションが同期点処理前に起動時刻に達しても,タイマトランザクションを起動しません。
-
acttypeにEETIM_CMTCを設定した場合,コミット前にトランザクションが異常終了したとき,またはロールバックしたときは,本関数の要求は無効になります。このとき,起動時刻に達している場合はタイマトランザクションを即時起動します。同一のトランザクション内でee_trn_rollback_markがすでに発行されている場合は,EETIMER_CONDITIONでエラーリターンします。
-
(3) ee_tim_execap_check_perm
- 名称
-
永続指定のタイマトランザクションの登録確認
- 形式
-
ANSI C,C++の形式
#include <eetim.h> int ee_tim_execap_check_perm(EEULONG acttype, char *reqid, EELONG flags);
- 機能
-
ee_tim_execap_perm関数で登録したタイマトランザクションが登録中となっているかどうかを確認します。
UAPで値を設定する引数
- acttype
-
-
EETIM_INST
次のタイマトランザクションの登録状況を確認する場合に設定します。
・acttypeでEETIM_INSTを設定したee_tim_execap_perm関数のタイマトランザクション
・acttypeでEETIM_COMTを設定したee_tim_execap_perm関数(コミット後)のタイマトランザクション
-
EETIM_COMT
acttypeでEETIM_COMTを設定したee_tim_execap_perm関数のタイマトランザクションの登録状況を確認する場合に設定します。ただし,コミット前の場合に限ります。
-
- reqid
-
確認対象のタイマトランザクションを登録したee_tim_execap_perm関数発行時のreqidで設定したリクエスト識別子と同じものを設定します。
- flags
-
0を設定します。
- リターン値
-
リターン値
意味
EE_OK
設定された要求識別子を持つタイマトランザクションは登録されています。
EECOMER_ENVIRON
TP1/EEの環境下にありません。
EECOMER_CNDUOC
UOCから発行しているため,本機能は使用できません。
EECOMER_CNDBPP
オフラインバッチプロセスから発行しているため,本機能は使用できません。
EETIMER_ARGUMENT
引数に設定した値が間違っています。
EETIMER_NOTHING
設定された要求識別子を持つタイマトランザクションは未登録,または起動中,またはすでに起動済みです。
EETIMER_CONDITION
発行条件が不正です。
EETIMER_SQLERR
タイマデータ表への登録確認処理が失敗しました。