i ntra-mart The Power for Enterprise Web Solution
Batch Programについて

前提

ここでは、intra-mart Batch Server により実行されるバッチプログラム(ファンクションコンテナ)の動作仕様を説明します。

intra-mart のバッチ機能を利用するには、intra-mart Batch Server, intra-mart File Server および intra-mart Information Server をインストールして正しく動作していることが必要になります。



動作に必要なプログラム(初期起動)

intra-mart Batch Server の初期起動時には、指定のファンクションコンテナを実行します。

初期起動時に実行したいプログラムを記述したファンクションコンテナを適切なディレクトリに保存して、適切に呼び出されるようにしてください。
初期起動時にアプリケーション(共通関数など)の初期化や初期設定などを実行すると有効です。

注意)初期化プログラム内では、データベースアクセスができません。初期起動時にデータベースアクセスをする必要のあるプログラムは、データベースアクセス前に、必ずデータベース接続APIを実行し、データベースアクセスAPIに対して、接続参照名を明示的に指定するようにして下さい。


動作に必要なプログラム(バッチ)

バッチプログラム起動設定をした上で intra-mart Batch Server を運用した場合、設定した時刻に batch.js 内に定義されている init() 関数およびclose() 関数および指定プログラム(ファンクションコンテナまたはクラス)のinit() 関数が実行されます。

batch.js および指定のファンクションコンテナまたはクラスには、バッチ設定に関する情報オブジェクトが引数として実行時に引き渡されます。

引数オブジェクトが持つプロパティ
group バッチ設定をしたログイン・グループID
name バッチ名称
establish バッチ実行時間設定
year バッチ実行指定年
month バッチ実行指定月
date バッチ実行指定日
day バッチ実行指定曜日
hour バッチ実行指定時間
minute バッチ実行指定分
second バッチ実行指定秒
program バッチとして実行するプログラム・パス
WWW_HOST バッチ設定をした時の Web サーバ
WWW_PORT バッチ設定をした時の Web サーバのポート
WWW_PROTOCOL バッチ設定をした時の Web サーバのプロトコル
WWW_LOCATION バッチ設定をした時の接続URL

この情報オブジェクトは、バッチプログラムがファンクションコンテナの場合、init() 関数の引数として実行時にプログラムに渡されます。また、バッチプログラムがクラスの場合、execute() 関数の引数として渡されます。

バッチ実行指定の 年・月・日・曜日・時・分・秒 のうち“毎”指定(「毎日」など)をしている場合は、非数(NaN)が格納されています。
Web サーバ関連の情報は、バッチ設定メンテナンス画面でバッチ設定した時の接続情報になります。

intra-mart Batch Server により実行されたファンクションコンテナ(batch.js および指定のファンクションコンテナ)内に定義されている init() 関数は、1つの引数を取り実行されます(バッチプログラムがクラスの場合は、com.intra_mart.foundation.service.provider.batch.ProcedureComponent インターフェースの仕様に準じます)。



実行シーケンス

バッチ起動設定時刻になった場合、以下のように処理が流れます。

  1. batch.js 内 init() 関数実行
  2. 設定ファンクションコンテナまたはクラスのロード
  3. 設定ファンクションコンテナ内 init() 関数またはクラスの execute() メソッドの実行
  4. batch.js 内 close() 関数実行

設定時刻になると、必ず batch.js 内の init() 関数が実行されます。
ファンクションコンテナ batch.js は、初期起動時にロードされるプログラムであるため、このプログラムを変更した場合には、intra-mart Batch Server の再起動が必要になります。



標準インストールと batch.js

intra-mart を標準インストールした場合、intra-mart Batch Server により実行される batch.js では、バッチ設定をされたログイングループに対して疑似ログインをするようにプログラムされています。
このため、バッチ処理時間が設定されているセッションタイムアウト時間を超える場合、バッチプログラムの実行中にセッションタイムアウトが発生する場合があります。

処理に時間のかかるバッチプログラムを実行する場合には、セッションタイムアウト時間を長く設定するか、またはログイングループに密接に関係したAPIの利用を控えるか、またはログイングループに関係したAPIに対して明示的に参照IDを指定するようにしてください。

セッションタイムアウトの影響を受けるAPI
回避不可 回避可能
  • Client.*
  • Module.workflow.*
  • Module.almanac.*
  • Module.database.*



バッチプログラム例

下記サンプルプログラムは、ファンクションコンテナ(JavaScript)で開発をした場合の例です。
バッチ起動設定をした時の Web サーバの HTTP リクエスト受付ポートとバッチの実行時間(プログラム実行時の現在時刻)を my_batch.txt というファイルに書き出すバッチプログラムです。

function init(oArg){
  var f = new VirtualFile("my_batch.txt");
  var now = new Date();
  f.write(now.toString());
  f.append("PORT=");
  f.append(oArg.WWW_PORT);
}

JAVA でバッチプログラムを作成する方法に関しては、com.intra_mart.foundation.service.provider.batch.ProcedureComponent クラスのAPI仕様をご覧ください。


注意事項

バッチ・プログラム内では、ページ遷移などの一部のAPIは利用できません

バッチ・プログラム内で利用できない Function Container API
  • request.*
  • forward()
  • redirect()
  • transmission()
  • Debug.browse()
  • Module.mobile.alert()
  • Web.*
  • Module.alert.*
  • Module.client.*
  • Module.download.*
  • Module.external.*




Copyright(C) NTT DATA INTRAMART CO.,LTD. 2000-2002 All Rights Reserved.