Cosminexus 機能解説
ここでは,バッチアプリケーション作成時に注意が必要となる処理や,バッチアプリケーションでは使用できない機能について説明します。これらの内容を確認の上,バッチアプリケーションを作成してください。
次に示す処理は,バッチアプリケーションを作成する際に注意が必要です。
バッチアプリケーションでは,次に示すファイルやディレクトリは操作しないでください。
また,バッチアプリケーションでファイルやディレクトリを扱う場合,ファイルやディレクトリのパスに相対パスを使用できません。cjexecjobコマンドを実行したディレクトリからの相対パスを取得したい場合は,ejbserver.batch.currentdirの値を使用してください。ejbserver.batch.currentdirについては,マニュアル「Cosminexus リファレンス API編」を参照してください。
次に,バッチアプリケーションの修正例を示します。
File f = new File("DataFile.txt");
File f = new File(System.getProperty("ejbserver.batch.currentdir") + System.getProperty("file.separator") + "DataFile.txt");
バッチサーバは,バッチアプリケーションが作成および開始したスレッドの終了を待ちません。バッチアプリケーション内でスレッドを使用する場合は,バッチアプリケーションを終了する前に,開始したすべてのユーザスレッドを完了するように実装してください。また,ユーザスレッドはメソッドキャンセルの対象外です。
バッチアプリケーションが作成したスレッドが残っていると,バッチアプリケーションのクラスや使用したリソースは解放されません。このため,次にバッチアプリケーションを開始しようとすると,バッチアプリケーションの開始に失敗するおそれがあります。また,ユーザスレッド内では,「3.2 バッチアプリケーション実行基盤の機能の概要」で説明しているバッチサーバの機能を呼び出すことはできません。
バッチサーバではサーバのJavaVM上でバッチアプリケーションを実行します。このため,JavaVM終了による自動的なリソースのクローズ処理を期待した実装をしている場合は,メモリやファイルディスクリプタのリークが発生します。例えば,次の場合にリークが発生します。
この問題を回避するためには,リソースが正しくクローズされるようにバッチアプリケーションを実装してください。
また,ファイルやソケットなども明示的にクローズしていないと,リソース解放のタイミングが不定になります。これによって,次回以降のバッチアプリケーションの実行に影響を及ぼすおそれがあります。ファイルやソケットは明示的にクローズするようにしてください。
なお,バッチサーバの場合,コネクションの自動クローズは使用できません。バッチアプリケーション内で必ずコネクションをクローズしてください。
次に示す機能はバッチアプリケーションでは使用できません。「対処方法」に示す手段で対応してください。
java.lang.System.inなどを使用した標準入力からの入力処理はできません。
シャットダウンフックは使用できません。
JNI経由でのネイティブライブラリの実行機能は使用できません。
次に示すメソッドは使用できません。
これらのメソッドを使用した場合は,バッチサーバごとJavaVMが終了します。
次に示すメソッドは使用できません。
次に示すメソッドは使用できません。
All Rights Reserved. Copyright (C) 2006, 2007, Hitachi, Ltd.