$ZTExit

$ZTE[XIT] は、トランザクションのコミットまたはロールバックの時にGT.Mの割り込み機能を制御する式が含まれています。それぞれの最も外側のTCOMMITまたはTROLLBACKの時点で、もし +$ZTEXIT がゼロ以外(TRUE)に評価された場合、$ZINTERRUPTは、コミットまたはロールバックを完了した後で XECUTEされます。

$ZTEXIT は、読み書き可能な固有な特殊変数 ISV (Intrinsic Special Variables)で、すなわち、SETコマンドの引数に等号 (=) の左側で出現が可能です。Mルーチンは、$ZTEXITを変更することはできません。GT.Mはプロセスの起動時に $ZTEXITを null に初期化します。プロセスの全持続期間の最後のGT.M呼び出し中に、$ZTEXITの値への変更なので、それは、すべての後続トランザクションのコミットまたはロールバックごとに再配信する割り込みを止めるために $ZINTERRUPTが配信された後で$ZTEXITをリセットすることは、アプリケーションの責任能力であることに注意してください。

例:

$ export sigusrval=10
$ /usr/lib/fis-gtm/V6.1-000_x86_64/gtm
GTM>zprint ^ztran
foo;
  set $ztexit=1
  set $zinterrupt="d ^throwint"
  tstart ()
  for i=1:1:10 do
  . set ^ACN(i,"bal")=i*100
  tstart ()
  do ^throwint
  ;do ^proc
  tcommit:$tlevel=2
  for i=1:1:10 do
  . set ^ACN(i,"int")=i*0.05
  ;do ^srv
  if $tlevel trollback
  ;do ^exc
  set $ztexit="",$zinterrupt=""
  quit
bar;
  write "Begin Transaction",!
  set $ztexit=1
  tstart ()
  i '$zsigproc($j,$ztrnlnm("sigusrval")) write "interrupt sent...",!!
  for i=1:1:4 set ^B(i)=i*i
  tcommit
  write "End Transaction",!
  ;do ^srv
  quit
GTM>zprint ^throwint
throwint
  set $zinterrupt="write !,""interrupt occurred at : "",$stack($stack-1,""PLACE""),!set $ztexit=1"
  if '$zsigproc($job,$ztrnlnm("sigusrval")) write "interrupt sent to process"
  write "***************************************",!!
  quit
GTM>do foo^ztran
interrupt sent to process
interrupt occurred at : throwint+3^throwint
***************************************
interrupt occurred at : foo+13^ztran
GTM>

上記のような foo^ ztran 呼び出しでは、割り込みハンドラは、ユーザ定義のルーチン、throwint です。プロセスはシグナル(SIGUSR1)を送信し、$ZINTERRUPTが実行されます。最も外側のTROLLBACKでは、割り込みが再度スローされ、再び実行されるために$ZINTERRUPTを引き起こします。

例:

GTM>w $zinterrupt
"IF $ZJOBEXAM()"
GTM>zsystem "ls GTM*"
ls: No match.
GTM>do bar^ztran
Begin Transaction
interrupt sent...
End Transaction
GTM>zsystem "ls GTM*"
GTM_JOBEXAM.ZSHOW_DMP_3951_1  GTM_JOBEXAM.ZSHOW_DMP_3951_2
GTM>

これは、プロセスに発行された割り込みを提供するために、$ZINTERRUPTのデフォルトの値を使用します。$ZJOBEXAM関数は ZSHOW "*" を実行し、割り込みの初期化のために各GTM_ZJOBEXAM_ZSHOW_DMPに出力を格納し、tcommitの時点で割り込みが再スローされたとき。

inserted by FC2 system