2015 Winter(Lydia) の要件[21747]で対応を行いました。該当のアップデート以降は、起動できなかった場合の設定を行うことができます。
https://issue.intra-mart.jp/issues/21747
設定の詳しくは設定ファイルリファレンスのジョブスケジューラの設定を参照ください。
https://www.intra-mart.jp/document/library/iap/public/configuration/im_configuration_reference/texts/im_job_scheduler/im-job-scheduler-config/index.html#im-job-scheduler_delay-start
【発生条件】
intra-mart Accel Platform(以下、iAP)の起動に5分以上かかる場合。
intra-mart Accel Platform 2015 Summer(Karen)以降を利用している、または、下記「バグ #5015」のパッチモジュールに記載されている im_job_scheduler のパッチを適用している
【原因】
以下のフレームワークを利用したジョブが存在する場合に、初期化前にジョブが実行されるとエラーが発生するため、 ジョブスケジューラは遅延起動を行うようになっています。
・SAStruts
・Spring Frame Work
・ スクリプト開発モデル
https://issue.intra-mart.jp/issues/5015
遅延起動しているため、アプリケーションの初期化処理中にエラーが発生した場合にジョブスケジューラの起動待ちスレッドがそのまま残ってしまう不具合が存在し、その対応として5分以上かかっている場合にジョブスケジューラを起動しないようになっています。
https://issue.intra-mart.jp/issues/4911
以上のことによりユーザプログラムや利用アプリケーションで起動時に初期化を行う処理に時間を要する場合に本事象が発生する可能性が高くなります。
【対応方法】
iAPの起動処理でジョブスケジューラの起動が待機する制限時間(デフォルトでは、5分)を環境に合わせて変更してください。
1. 2015 Summer(Karen)のjavaファイルをダウンロードします(保守契約ユーザのみダウンロード可能)。
ダウンロードライブラリ(http://www.intra-mart.jp/download/library/)より、製品公開ソース(iap-src-2015_summer.zip)をダウンロードします。
※パッチを適用している場合も同様です。
2.im_job_scheduler_impl-main.zip 内の AbstractJobSchedulerWorker.java を編集します。
iAPの起動確認を行う時間を、お客様の環境に合わせて変更してください。単位は分です。
AbstractJobSchedulerWorker.java にある
private void waitForApplicationInitialize() throws JobSchedulerException {
final long waitTime = Env.getSystemDate().getTimeInMillis() + TimeUnit.MINUTES.toMillis(5); // 変更箇所
}
3. 修正済みのjavaファイルをコンパイルし、生成されたclassファイルが含まれるユーザモジュールを作成してIM-Juggling内の対象プロジェクトに組み込みます。
モジュール・プロジェクトの webapp 配下にWEB-INF/classes/jp/co/intra_mart/system/job_scheduler/quartz/workerディレクトリを作成し、classファイルを配置してください。classファイルはデプロイされた環境のWEB-INF/classes/jp/co/intra_mart/system/job_scheduler/quartz/workerに配置されます。
ユーザモジュールについては、次のドキュメントを参照してください。
https://www.intra-mart.jp/document/library/ebuilder/public/e_builder_user_guide/text/common_function/index.html
4.IM-Jugglingより、WARファイルを作成、再デプロイを実施します。
5.起動開始から設定値の時間経過以内に起動が完了すればジョブスケジューラが起動します。
設定値の時間経過以内に起動が完了しない場合はジョブスケジューラは起動されませんので、設定を見直してください。
【Resinの場合】
Resin を利用している場合は、IM-Jugglingのプロジェクトに直接javaファイルを配置すると、アプリケーションの起動時にコンパイルされて修正を適用することができます。
1. IM-Jugglingのプロジェクトに修正ファイルを配置します。
IM-Jugglingのプロジェクトにclasses/jp/co/intra_mart/system/job_scheduler/quartz/workerディレクトリを作成し、編集した AbstractJobSchedulerWorker.java を配置してください。
2.WARファイルを作成し、デプロイを実施します。
アプリケーションの起動時に1のファイルがコンパイルされてclassファイルが配置されます。
ディレクトリ構成は以下のとおりです。
WEB-INF/classes/jp/co/intra_mart/system/job_scheduler/quartz/worker
AbstractJobSchedulerWorker$1.class
AbstractJobSchedulerWorker.class
AbstractJobSchedulerWorker.java
-- 対象 ------------------------------------------------------------------------
iAP/Accel Platform/全アップデート
--------------------------------------------------------------------------------
FAQID:577
intra-mart Accel Platformが5分以内に起動しない場合ジョブスケジューラが起動しません。
