Hitachi

OpenTP1 Version 7 分散トランザクション処理機能 OpenTP1 プログラム作成リファレンス COBOL言語編


CBLDCMCF('EXECAP ')

〈このページの構成〉

名称

アプリケーションプログラムの起動

形式

PROCEDURE DIVISIONの指定

CALL  'CBLDCMCF' USING 一意名1 一意名2 一意名3

DATA DIVISIONの指定

01 一意名1.
   02 データ名A  PIC  X(8) VALUE 'EXECAP  '.
   02 データ名B  PIC  X(5).
   02 FILLER    PIC  X(3).
   02 データ名C  PIC  X(4) VALUE SPACE.
   02 データ名D  PIC  X(4) VALUE SPACE.
   02 データ名E  PIC  9(8).
   02 データ名F  PIC  9(8).
   02 データ名G  PIC  9(9) COMP VALUE ZERO.
   02 データ名H  PIC  X(4).
   02 データ名I  PIC  X(4) VALUE SPACE.
   02 データ名J  PIC  X(4) VALUE SPACE.
   02 データ名K  PIC  X(4) VALUE SPACE.
   02 データ名L  PIC  X(8).
   02 データ名M  PIC  X(4) VALUE SPACE.
   02 データ名N  PIC  X(8).
   02 データ名O1 PIC  X(4).
   02 データ名O2 PIC  9(9) COMP VALUE ZERO.
   02 データ名O3 PIC  9(9) COMP VALUE ZERO.
   02 データ名O4 PIC  X(1) VALUE SPACE.
   02 データ名O5 PIC  X(1).
   02 データ名P  PIC  X(14) VALUE LOW-VALUE.
01 一意名2.
   02 データ名Q  PIC  X(4) VALUE SPACE.
   02 データ名R  PIC  X(8) VALUE SPACE.
   02 データ名S  PIC  X(8) VALUE SPACE.
   02 データ名T  PIC  X(6) VALUE SPACE.
   02 データ名U  PIC  X(2) VALUE SPACE.
   02 データ名V  PIC  X(28) VALUE LOW-VALUE.
01 一意名3.
   02 データ名W  PIC  9(x) COMP.
   02 データ名X  PIC  X(x).
   02 データ名Y  PIC  X(n).

機能

UAP(SPP,またはMHP)から,データ名Nに設定したアプリケーション名のMHPを起動させます。トランザクション終了後またはサービス関数終了後,すぐに起動させることも,設定した時間経過後に起動させることもできます。詳細については,マニュアル「OpenTP1 プログラム作成の手引」の「アプリケーションプログラムの起動」の説明を参照してください。

SPPからアプリケーションプログラムを起動する場合は,SPPがトランザクションとして処理していることと,そのSPPのメインプログラムでCBLDCMCF('OPEN ')を呼び出していることが前提です。

MHPから起動させる場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は,最初に受信したメッセージ中の名称になります。さらに,そのMHPからアプリケーションプログラムを起動した場合も,受け取るメッセージ入力元の論理端末名称は,最初にメッセージを受信したときの名称が引き渡されます。

SPPからMHPを起動させる場合,起動されたMHPで受け取るメッセージ入力元の論理端末名称は「*」となります。さらに,そのMHPからアプリケーションプログラムを起動した場合も,受け取るメッセージ入力元の論理端末名称は「*」となります。

送信できるメッセージの一つのセグメント長は,データ名O2にZEROを設定した場合は32,000バイトまで,データ名O2に16を設定してセグメント長を拡張した場合は1メガバイトまでです。ただし,プロトコルによって,実際の最大長が異なる場合があります。詳細については,マニュアル「OpenTP1 プロトコル」の該当するプロトコル編を参照してください。

起動させるMHPに渡すセグメントの領域(一意名3で示す領域)の形式を次に示します。

[図データ]

UAPで値を設定するデータ領域

●データ名A

アプリケーションプログラムの起動を示す要求コードを「VALUE 'EXECAP△△'」と設定します。

●データ名C,データ名D

空白を設定します。

●データ名E,データ名F

MCFで使う領域です。

●データ名G

0を設定します。

●データ名H

起動させるMHPに渡すセグメントが,論理メッセージの最終セグメントかどうかを設定します。次のどちらかを設定します。

'ESI△'

先頭セグメント,または中間セグメントを渡すときに設定します。この値を設定したCBLDCMCF('EXECAP ')を呼び出した場合は,そのあとに必ずデータ名Hに「'EMI△'」を設定したCBLDCMCF('EXECAP ')を呼び出してください。

'EMI△'

最終セグメントを渡すときに設定します。

論理メッセージが単一セグメントの場合も「'EMI△'」を設定します。

先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合にも「'EMI△'」を設定します。

●データ名I,データ名J,データ名K

空白を設定します。

●データ名L

  • 経過時間指定のタイマ起動(データ名O1に「'INTV'」を設定)の場合

    CBLDCMCF('EXECAP ')を呼び出してから,何時間何分何秒後にMHPを起動させるかを設定します。時間は「HHMMSS00」(HH:時間,MM:分,SS:秒 00は固定)の形式で設定します。設定できる時間の範囲は,'00000100'(1秒後に開始)から '99595900'(99時間59分59秒後に開始)までです。

  • 時刻指定のタイマ起動(データ名O1に「'TIME'」を設定)の場合

    MHPを起動させる時刻を設定します。時刻は「HHMMSS00」(HH:時,MM:分,SS:秒 00は固定)の形式で設定します。設定できる時刻の範囲は,'00000000'(0時0分0秒に開始)から '23595900'(23時59分59秒に開始)です。時刻はローカルタイムで指定します。

データ名Lに設定した値は,タイマ起動の場合にだけ有効となります。即時起動の場合は,データ名Lに設定した値は無視されます。

注意事項
  • 経過時間指定のタイマ起動の場合

    時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,データ名Lに設定した経過時間と実際に起動する時間には秒単位の誤差が生じます。そのため,タイミングによっては,設定した監視時間よりも短い時間で起動することがあります。監視時間が小さくなるほど,誤差の影響を受けやすくなりますので,監視時間は3(単位:秒)以上の値の設定を推奨します。

  • 時刻指定のタイマ起動の場合

    時間監視の精度は秒単位です。また,タイマ定義(mcfttim -t)のbtimオペランドで指定する時間監視間隔で起動するかどうかを監視しています。このため,データ名Lに設定した時刻と実際に起動する時刻には秒単位の誤差が生じます。

●データ名M

空白を設定します。

●データ名N

CBLDCMCF('EXECAP ')を呼び出したMHPが終了したあとに起動するMHPのアプリケーション名を設定します。アプリケーション名は最大8バイトです。アプリケーション名の最後には空白を付けます。8バイトに満たない名称を設定する場合は,後ろを空白で埋めてください。

●データ名O1

MHPをいつ起動させるかを設定します。

'JUST'

即時起動の場合に設定します。このとき,データ名Lに設定した値は無視されます。

'INTV'

経過時間指定のタイマ起動の場合に設定します。CBLDCMCF('EXECAP ')を呼び出してからデータ名Lに設定した時間だけ経過したあとに,MHPを起動させます。

'TIME'

時刻指定のタイマ起動の場合に設定します。データ名Lに設定した時刻に,MHPを起動させます。

空白を設定

省略されたものとして,'JUST'(即時起動)が仮定されます。

●データ名O2

送信メッセージのセグメント長を拡張するかどうかを設定します。

VALUE ZERO

データ名Wに従来の範囲(1〜32000)で指定するときに設定します。

VALUE 16

データ名Wに拡張した範囲(1〜1048576)で指定するときに設定します。

●データ名O3

0を設定します。

●データ名O4

空白を設定します。

●データ名O5

使用するバッファ形式を設定します。

'1'…バッファ形式1を使うときに設定します。

'2'…バッファ形式2を使うときに設定します。

空白を設定…省略されたものとして,'1'(バッファ形式1)が仮定されます。

バッファ形式2を使用するときに,データ名O2に16を設定した場合,エラーリターンします。

●データ名P

「LOW-VALUE」を設定します。

●データ名Q,データ名R,データ名S,データ名T,データ名U

空白を設定します。

●データ名V

「LOW-VALUE」を設定します。

●データ名W

【バッファ形式1の場合】 PIC 9(9)

送信セグメント長を設定します。

データ名O2にZEROを設定した場合,1〜32000の範囲で設定できます。

データ名O2に16を設定した場合,1〜1048576の範囲で設定できます。

【バッファ形式2の場合】 PIC 9(4)

送信セグメント長+4を設定します。

先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合は,送信セグメント長には0を設定します。

●データ名X

【バッファ形式1の場合】 PIC X(8)

【バッファ形式2の場合】 PIC X(2)

MCFで使用する領域です。

●データ名Y

起動するMHPに渡す,メッセージのセグメントの内容を設定します。先頭セグメント,または中間セグメントの送信後,メッセージの送信の終了を連絡する場合にも,必ず設定してください。

OpenTP1から値が返されるデータ領域

●データ名B

ステータスコードが,5けたの数字で返されます。

ステータスコード

ステータスコード

意味

00000

正常に終了しました。

71002

メッセージキューへの入出力処理時に障害が起こりました。

メッセージキューが閉塞されています。

メッセージキューが割り当てられていません。

<データ名O2にZEROを設定している場合>

データ名Wに32,000バイトを超える値を設定しています。

<データ名O2に16を設定している場合>

データ名Wに1メガバイトを超える値を設定しています。

MCFの終了処理中のため,データ名Nに設定したMHPを起動できません。

71003

メッセージキューが満杯です。

71004

メッセージを格納するバッファをメモリ上に確保できませんでした。

71108

データ名Nに設定したアプリケーション名のMHPを起動しようとしましたが,起動させようとしたMHPの管理テーブルが確保できませんでした。

プロセスのローカルメモリが不足しています。

72000

<MHPの実行でリターンした場合>

先頭セグメントを受信する CBLDCMCF('RECEIVE ')を呼び出す前に,CBLDCMCF('EXECAP ')を呼び出しています。

<SPPの実行でリターンした場合>

トランザクションでないSPPの処理から,CBLDCMCF('EXECAP ') を呼び出しています。

72001

設定したアプリケーション名は,MCFで定義していません。

アプリケーション名が間違っています。

MCFマネジャ定義の通信サービス定義(mcfmcname定義コマンド)に,アプリケーション起動プロセス名を指定していません。

アプリケーション起動プロセスに対応するMCFアプリケーション定義の環境定義(mcfaenv定義コマンドの -pオプション)に,アプリケーション起動プロセス識別子を指定していません。

アプリケーション環境定義(mcfaenv定義コマンドの -pオプション)で指定したアプリケーション起動プロセス識別子と,アプリケーション起動プロセスの通信構成定義(mcftenv定義コマンド)で指定する識別子が一致していません。

<非応答型のMHPを起動する場合>

  • 起動先アプリケーションのアプリケーション属性定義の,論理端末(mcfaalcap定義コマンドの -nオプションの lnameオペランド)に値を指定していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した論理端末を,アプリケーション起動プロセスの通信構成定義(mcftalcle定義コマンド)に定義していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した論理端末が,一方送信型(mcftalcle -t=send)ではありません。

  • 起動先アプリケーションのアプリケーション属性定義で指定した論理端末は,アプリケーション起動を使えません。

<応答型および継続問い合わせ応答型のMHPを起動する場合>

  • 起動先アプリケーションのアプリケーション属性定義に,内部通信路(mcfaalcap定義コマンドの -nオプションの cnameオペランド)を指定していません。

  • 起動先アプリケーションのアプリケーション属性定義に指定した内部通信路を,アプリケーション起動プロセスの通信構成定義(mcftpsvr定義コマンドの -cオプション)に定義していません。

  • アプリケーション起動プロセスの通信構成定義(mcftalcle定義コマンド)に,問い合わせ型論理端末(mcftalcle -t=request)を指定していません。

<SPPからアプリケーションを起動する場合>

  • アプリケーション起動プロセス識別子を,起動元のUAPのユーザサービス定義 またはユーザサービスデフォルト定義のmcf_psv_idオペランドに指定していません。

  • 起動元のUAPのユーザサービス定義,またはユーザサービスデフォルト定義のmcf_psv_idオペランドに指定しているアプリケーション起動プロセス識別子が,アプリケーション起動プロセスの通信構成定義(mcftenv定義コマンドの -sオプション),およびアプリケーション環境定義(mcfaenv定義コマンドの -pオプション)で指定しているアプリケーション起動プロセス識別子と一致していません。

  • 起動元のUAPのユーザサービス定義,またはユーザサービスデフォルト定義のmcf_mgridオペランドに指定しているMCFマネジャ識別子が,アプリケーション起動プロセスが属しているMCFマネジャの識別子と一致していません。

72005

データ名Hに「'ESI△'」を設定したCBLDCMCF('EXECAP ')で,メッセージのセグメント長(データ名W)に1バイト未満の値(バッファ形式1の場合),または5バイト未満の値(バッファ形式2の場合)を設定しています。

72007

CBLDCMCF('REPLY ')をすでに呼び出した 応答型(type=ans)のMHPから,応答型のMHPを CBLDCMCF('EXECAP ')で起動させています。

CBLDCMCF('REPLY ')をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,継続問い合わせ応答型のMHPをCBLDCMCF('EXECAP ')で起動させています。

72009

応答型(type=ans)のMHPから,CBLDCMCF('EXECAP ')で応答型のMHPを2回以上起動させています。

継続問い合わせ応答型(type=cont)のMHPから,CBLDCMCF('EXECAP ')で継続問い合わせ応答型のMHPを2回以上起動させています。

72011

応答型(type=ans)でないMHPから,CBLDCMCF('EXECAP ')で応答型のMHPを起動させています。

継続問い合わせ応答型(type=cont)でないMHPから,CBLDCMCF('EXECAP ')で継続問い合わせ応答型のMHPを起動させています。

72016

データ名O1,データ名O2,データ名O3,データ名P,データ名Vに設定した値が間違っています。

データ名O5に'2'を設定した場合,データ名O2に16を設定できません。

<非応答型のMHPを起動する場合>

起動先アプリケーションのアプリケーション属性定義の論理端末(mcfaalcap定義コマンドの-nオプションのlnameオペランド)に,送信セグメントの拡張(データ名O2の16)をサポートしていないプロトコルで使用する論理端末を設定しています。

<応答型および継続問い合わせ応答型のMHPを起動する場合>

起動先アプリケーションのアプリケーション属性定義の内部通信路(mcfaalcap定義コマンドの-nオプションのcnameオペランド)に,送信セグメントの拡張(データ名O2の16)をサポートしていないプロトコルで使用するコネクションを設定しています。

72024

データ名Qに設定した値が間違っています。

72026

データ名Hのセグメント種別(最終セグメント 'EMI△',または最終セグメント以外 'ESI△')に設定した値が間違っています。

72028

データ名Aに設定した値が間違っています。

72041

<メッセージが単一セグメントの場合>

バッファ形式1の場合,データ名Wに0バイト,またはマイナス値を設定しています。

バッファ形式2の場合,データ名Wに0から4バイト,またはマイナス値を設定しています。

<メッセージが複数セグメントの場合>

データ名Hに「'ESI△'」を設定したCBLDCMCF('EXECAP ')を呼び出さないで,メッセージの送信の終了を連絡しています。

72044

CBLDCMCF('CONTEND ')をすでに呼び出した 継続問い合わせ応答型(type=cont)のMHPから,継続問い合わせ応答型のMHPを CBLDCMCF('EXECAP ')で起動させています。

72108

データ名Lに設定できる範囲の値を超えています。

72109

継続問い合わせ応答型(type=cont)のMHPを,タイマ起動で起動させようとしています。

77001

起動しようとしたアプリケーションに対応する論理端末(LE)は,処理中で使えません。または使える論理端末がありません。

上記以外

プログラムの破壊などによる,予期しないエラーが発生しました。

注意事項

  1. MCFマネジャ定義のUAP共通定義(mcfmuap -c order)の指定によって,アプリケーションプログラムの起動順序が異なりますので注意してください。

  2. 一つのサービス関数で,TAMまたはDAMファイルの更新とCBLDCMCF('EXECAP ')の呼び出しをして,起動先のアプリケーションで更新後のTAMまたはDAMファイルを参照させたい場合,TAMまたはDAMファイルを排他ありで参照してください。排他なしで参照した場合,更新前のデータが入力されることがあります。

  3. 次のセグメント長に関連する項目を見積もってください。

    • システム環境定義の動的共用メモリの最大使用時の総量(dynamic_shmpool_size)

    • システムジャーナルサービス定義の最大レコードデータ長(jnl_max_datasize)

    • MCFマネジャ定義のユーザサーバのジャーナルバッファの大きさ(mcfmuap -j)

    • MCFマネジャ定義の最大セグメント長(mcfmuap -e segsize)

    • MCFで使用する動的共用メモリの総量

    • システムジャーナルファイルの総量

    • メッセージキューファイルの総量