JP1/AJS(Job Management Partner 1/Automatic Job Management System)のスケジュール定義において、特定のジョブネット同士が同時に実行されないように制御する「排他スケジュール」機能。
非常に便利な機能ですが、設定時に「ある重大なルール」を破ってしまうと、エラーを吐くこともなく、スケジュール自体が完全に消滅(何も入らない状態に)してしまうという恐れ入る仕様があります。
今回は、実務で冷や汗をかかないための「排他スケジュール指定時の階層ルール」についてブログにまとめました。
❌ 結論:同階層にないジョブネットを指定すると、スケジュールは「無」になる
排他スケジュールを設定する際、排他相手として「自分と同じ階層(同じジョブグループ直下など)に存在しないジョブネット」を誤って指定してしまうと、どうなるでしょうか?
「設定時にエラーではじかれる」か「実行時に異常終了する」と思いきや、JP1の挙動は異なります。
-
実際の挙動: エラーや警告は一切出ず、定義自体は正常に保存されます。しかし、いざスケジュールを確認(または確定実行)してみると、スケジュールが何も入らない(実行予定が完全に消える)状態になります。
システムがただ静かに沈黙し、ジョブが一切起動しなくなるため、事前のテストで「なぜかスケジュールが入らないぞ?」と頭を抱える原因になります。
🔍 なぜスケジュールが消えてしまうのか?
JP1の仕様として、排他スケジュールの対象として認識・計算できるのは、「原則として同じ階層(同じ親を持つ兄弟関係)にあるジョブネット同士」のみという大前提があります。
階層が異なる(例えば、別のジョブグループの下にある)ジョブネットの名前を無理やり絶対パス等で指定しても、JP1のスケジュール計算エンジンはそれを「正しい排他相手」として処理できません。
その結果、スケジュール計算のロジックが矛盾を起こす(あるいは不正な定義とみなされる)ことで、「排他条件を満たせないため、実行予定を生成しない(=スケジュールが空になる)」という結果を招いてしまうのです。
🛠️ トラブルに遭わないための対策と解決策
もし「排他スケジュールを設定した途端、予定が真っ白になった」という現象が起きたら、以下のポイントをチェックしてください。
1. 相手のジョブネットが本当に「同じフォルダ(階層)」にあるか確認する
排他をかけたいAとBのジョブネットが、全く同じジョブグループの直下に並んでいるか確認してください。階層がズレている場合は、どちらかの配置を見直す必要があります。
2. 階層が違うジョブネットと排他制御したい場合は?
どうしても異なる階層にあるジョブネット同士で同時実行を禁止したい(排他をかけたい)場合は、排他スケジュール機能ではなく、「ジョブネットコネクタ」や「待合せ条件」、あるいは「排他リソース(ジョブの排他制御機能)」を利用するのが正規のルートです。
特に、全システムで共通の制限をかけたい場合は、排他リソース(同時実行数を1に制限する等)を設定する方が、階層を意識せず安全に制御できます。
📝 まとめ:JP1の「無言の拒絶」に気をつけよう
JP1は非常に堅牢なシステムですが、時折こうした「エラーを出さずにスケジュールを消す」といった、マニアックな挙動でエンジニアを試してくることがあります。
-
排他スケジュールは「同じ階層の兄弟」しか指定できない
-
違う階層のものを指定すると、スケジュールが「無」になる
「スケジュールが入らない!」と設計書を見直す前に、まずは排他相手の「階層(立ち位置)」が正しいか、ぜひ確認してみてくださいね!
