Java SE 8に対応したTERASOLUNA Server Framework for Java 2.0.6.3およびTARASOLUNA Batch Framework for Java 3.3.2を公開しました。
TERASOLUNA(テラソルナ)フレームワークは、NTTデータで数多くの適用実績を持つ信頼性の高いフレームワークです。
世界的にデファクトスタンダードである技術をベースに、
NTTデータの数多くのシステム開発で培ってきた豊富なノウハウが
継続的にフィードバックされています。
TERASOLUNAでは、各種プラットフォームによる、
オンライン系/バッチ系ソリューションに対応した複数のフレームワークを
用意しており、要件に応じて選択や組み合わせが可能です。
TERASOLUNAフレームワークを利用することにより、効率的、高品質なシステム開発を実現できます。
■TERASOLUNA Batch Framework for Java
Javaによるバッチアプリケーション開発を実現するためのフレームワークです。
バッチアプリケーションでは、限られたリソースでの大量データの処理や、バッチ処理特有のトランザクション管理が求められます。
これらバッチアプリケーション特有の要件をフレームワークでサポートすることで、システムの品質向上・開発の効率化を実現します。
以下ダウンロード可能なファイルです。
* フレームワーク本体(terasoluna-batch4j-projects_x.x.x.x.zip)
o Eclipseプロジェクトとして提供します。
* ブランクプロジェクト(terasoluna-batch4j-blank_x.x.x.x.zip)
o アプリケーションの元となるブランクプロジェクトです。
* サンプルアプリケーション
o チュートリアル(terasoluna-batch4j-tutorial_x.x.x.x.zip)
+ 簡易的なバッチアプリケーションサンプルです。readme.txtもしくは導入手順ページを参照することで、簡単に動作確認を行えます。
o 機能網羅サンプル(terasoluna-batch4j-funcsample_x.x.x.x.zip)
+ 各機能の実装に重点を置いたサンプルです。
o 簡易サンプルプロジェクト(APサーバ対応)(terasoluna-batch4j-sample-onwebapserver_x.x.x.x.zip)
+ Commonj対応機能を利用し、APサーバでバッチアプリケーションを動作させることに重点を置いたサンプルです。
* ドキュメント(terasoluna-batch4j-doc_x.x.x.x.zip)
o アーキテクチャ説明書
+ フレームワークの内部アーキテクチャおよび提供する各機能の説明資料です。
o 機能説明書
+ フレームワークが提供する各機能ごとの動作、設定方法の説明資料です。
o 設定ファイル説明書
+ フレームワークの利用時に必要となる、設定ファイルとその内容の説明資料です。
o チュートリアル
+ 環境設定から各機能の利用までをチュートリアル形式で解説した資料です。
* 上記全部を含んだアーカイブ(terasoluna-batch4j-all_x.x.x.x.zip)
-----------------------------------------------------
各アプリケーション、Eclipseプロジェクトの詳細および導入方法は、各アーカイブに同梱されているreademeもしくは導入手順ページをご覧ください。
■TERASOLUNA Batch Framework for Java
ver2.0.0.4からver2.0.1.0への変更履歴
▼ソースコード・設定ファイル
以下の問題に対する修正。
# 全チャンク単一トランザクションモデルのジョブ実行中、中断終了を行うと異常終了し、トランザクションはロールバックされる。
# フレームワーク設定ファイルに誤りがあるなどで、フレームワーク起動初期化時に例外が発生した場合、JavaVMが終了しないままとなる。
# 非同期形ジョブ起動機能で、バッチデーモンのジョブ管理テーブルのリフレッシュカウントを指定した場合、「指定した数+1件目」でリフレッシュされる。
# 非同期型ジョブ起動機能で、致命的な例外が発生した場合、エラーログがわかりにくい。
# 分割ジョブ利用時、子ジョブが異常終了、あるいはジョブ実行中に中断/強制終了すると、ジョブステータスとジョブ終了コードのマッピングが崩れる場合がある。
# 分割ジョブ利用時、子ジョブ作成の処理がスレッドセーフでない場所があり、タイミングによっては子ジョブ作成時にジョブが異常終了する。
# DBでメッセージ管理を行う場合、設定ファイル内の例(コメントアウト)/機能説明書どおりに設定するとメッセージを返さず、メッセージIDを返却する。
# 入力ファイル読み込み処理において、読み込みをスキップするとフレームワークが保持する行番号がずれるため、行番号を利用した処理が仕様通り動作しない。
# ファイルのトレイラ部を複数回、読み込んだ場合、読込み結果が読込み回数に応じて増加する。
# ファイル出力時、ファイル内の項目に対する値がnullであると、例外が発生する場合がある。
# ファイル入力時、例外が発生した場合のログメッセージ内の行番号が正しくない。
# ファイル読み込み処理(全形式)において、ファイル名パラメータの指定がない場合(空文字列またはnull)のログメッセージがわかりにくい。
# ファイル読み込み処理(全形式)において、ファイルレベルの例外が発生した場合(読み込み不可等)のエラーログがわかりにくい。
# ファイルアクセス機能での入力時の入力チェック(byteチェック)の処理が遅い。
# ファイルのコピー/移動/マージを行うユーティリティにおいて、存在しないファイルを指定した場合のエラーログがわかりにくい。
# フォーマットがないファイルを処理する場合(フレームワーク側ではなく、AP側でフォーマット処理する場合)に、フレームワークが保持する行番号がずれる。
# ファイル入力時、データ項目をフレームワークが提供しているデータ型以外に対応させた場合、エラーログがわかりにくい。
以下の改善要望に対する修正。
# JVMが異常終了する場合と、ジョブが異常終了する場合の終了コードが同じである。
# アノテーションも含めた継承クラスをファイル行オブジェクトとして指定したい。
# BLogicResult生成時、ReturnCodeがnullだった場合の検知を早くしてほしい。
# 開発時にFW提供の例外クラスを拡張し、例外を作成しようとした場合、コンストラクタが少なく、利用しづらい。
# デフォルト終了コードに必須項目が設定されていない場合、または数値以外の値が設定されている場合、ジョブ実行前に警告を出してほしい。
# EndFile配置ディレクトリの指定が空文字の場合、EndFile配置ディレクトリが未指定となり、中断終了時のファイル配置場所がわかりにくい。
# 入力チェック時に相関チェックを行う場合、SpringAPI準拠の方法でエラーコードを設定しても、メッセージが出力されない。
# セーブポイントを利用している環境で完全なロールバックを行えず、セーブポイントまでのロールバックしか行えない。
# セーブポイントを利用時の動作をJDBC仕様に準拠した動作としてほしい。※対応DBであるOracle、PostgreSQLでは問題なし。
# ジョブ単位に各種設定(データアクセス設定、スレッドプール設定など)を行いたい。
# FileDAOのトリム機能で両トリムも対応してほしい。
# ファイルアクセス機能で発生する例外の出力方針を統一してほしい。
# ファイル入力機能利用時、トレイラ部取得後、データ部は読み込めないという仕様の実現手段をモジュール間で統一してほしい。
# fileLineIteratorを直接DIしたい。
# BigDecimal型のデータをファイルアクセス機能でファイル出力し、出力したファイルをファイルアクセス機能の入力データとする場合。特に「,」を区切り文字(CSV及び可変長のデフォルト値)としている場合、機能を利用しづらい。
# ファイル行オブジェクトのClassがデフォルトコンストラクタでインスタンス化不可能なクラスの場合のエラーがnext()を呼ぶ前には発生せず、内部で無駄な処理が走る。
# FileLineExceptionのバリエーションでFileLineException(String message, Exception e, String fileName, int lineNo)コンストラクタが存在しないので利用できない。
# LineFeed1LineReaderかLineFeed2LineReaderを直接に生成して利用する場合、引数が誤っている場合は、インスタンスを生成せずに警告を出してほしい。
# ファイル行オブジェクトに設定されたcolumnIndexが0から始まらない場合、もしくは連番ではない場合、処理開始前に警告を出してほしい。
# CSVファイル/可変長ファイルでフォーマットを指定せずにBigDecimalのデータをファイルに出力した場合、ファイルの入力値にしにくい。
# パディング/トリム文字を定義していても、パディング/トリム処理を行わないと設定していた場合、処理は行わないでほしい。
# ファイルを扱う処理で、必須項目(ファイル名、ファイル行オブジェクトクラス、フォーマット処理リスト)を設定していない場合、初期化時に警告を出してほしい。
他リファクタリング 42件
▼ドキュメント
# 機能説明書、アーキテクチャ説明書
BA-01 トランザクション管理機能
・非トランザクションモデルの説明を、「フレームワークがトランザクション管理を行わず開発者にゆだねるモデルである」
と利用者が自由に制御できることを明記した。
・フレームワークが提供するトランザクションモデル別Bean定義ファイル雛形について、
チャンク別トランザクションモデル(コントロールブレイク)用の雛形が抜けていたため追記した。
・ビジネスロジックでのプログラマティックなトランザクション管理について、設定例を追記した。
・BeanNameAutoProxyCreatorとTransactionProxyFactoryBean、各々の設定例を追記した。
BB-01 データベースアクセス機能
・複数のビジネスロジックにまたがったJDBCバッチ更新利用時に、
1回のビジネスロジック処理内で同じSQL_IDのSQLを複数登録することは出来ないことを追記した。
・複数のビジネスロジックにまたがったJDBCバッチ更新利用時に、
性能向上のためSQL_IDをソートしてから実行するため順序性を保障しないことを追記した。
・JDBCバッチ更新のシーケンスに、addBatchメソッドが記述されているが、
非推奨メソッドのため、executeBatchメソッドによる記述に変更した。
BC-01 ファイルアクセス機能
・ファイル行オブジェクトに付与することができるアノテーションの利用例を追記した。
・InputFileColumn,OutputFileColumnの設定項目について、パディング処理が設定可能な場合の
説明が誤っていたため修正した。
・バイト長指定のアノテーションについて、ファイル入力時とファイル出力時で意味が異なり
入力時は、(トリムなどをする前の)入力する際のバイト長
出力時は、(トリムなどをした後の)出力する際のバイト長
となることを明記した。
・ファイル入力を行うクラスでファイルをオープンしたまま、読み込みを行う場合のコーディングポイントにて
Bean定義にinit-method属性を定義しinitメソッドをコールするようにしているが、
コンストラクタでinitメソッドをコールする実装に変更されたため合わせて修正した。
・ヘッダ、データ、トレイラの入出力順番についての制限、注意点を追記した。
・FileQueryDAO/FileUpdateDAOを使う場合と、FileLineIterator/FileLineWriterを使う場合の違いについて
性能面やファイルのオープン/クローズするタイミングを追記。
・printDataLine()メソッドの引数に対する注意事項を追記した。
・FileUpdateDAOをDIしたビジネスロジック分割ジョブで起動した場合のファイル上書きフラグに対する注意事項を追記した。
BD-01 ビジネスロジック実行機能
・前処理、本処理時のエラー発生有無に関わらない後処理の実行について説明を追加した。
・ビジネスロジックで実行結果を返却する際に、ERROR_CONTINUE・かつジョブ終了コードを設定した場合
ジョブ終了コードが有効になることは誤記である。
無効が正しいため、修正した。
・前処理/後処理、およびビジネスロジックの実行結果による挙動の補足説明を追記した。
・複数のビジネスロジックにまたがったJDBCバッチ更新利用時に、
ビジネスロジックの実行結果による挙動の違いを追記。
・コーディングポイントでBLogicResultを返却するためだけに変数へ代入してから返却する記述があるが、
余計なリソース消費につながるため、記述を変更した。
・実装例の先頭チャンク前処理/最終チャンク後処理のbean設定のIDで大文字小文字の誤りを正した。
またutilスキーマを利用した記述例に変更した。
BD-02 対象データ取得機能
・ジョブの多重実行時に利用するコレクタの説明を追加した。
・単項目チェックと相関チェックを併用する場合に、特殊な設定が必要になるため、説明を追記した。
・リスタート機能利用時に、データ読み飛し実装例について、
ファイルから対象データを取得する場合についての利用メソッドについて説明が誤っていたため修正した。
BE-02 非同期型ジョブ起動機能
・ジョブ管理テーブルの内容説明において、起動状況のステータスにおいて、
2(再起動中)は登録されることがないため修正した。
・初期化処理エラー時の終了コードは、同期型ジョブ起動と非同期型ジョブ起動で異なることを追記した。
・非同期処理で入力チェックをする場合、関連設定を全て記述する必要があることを追記した。
・バッチデーモンを複数立ち上げて処理を行う場合、各処理を均等に振り分けることは出来なく、
複数起動し均等に処理を分散するためにはテーブル定義の変更や非同期バッチデーモンの拡張が
必要となることを追記した。
・ジョブ管理テーブルのNotNULL制約について、フレームワークが提供しているDDLと
定義がことなっているため、DDLに合わせて修正した。
BE-03 ジョブ実行管理機能
・モデル別の中断・強制終了時の動作について、前処理/後処理内にチャンクの処理が
図解されているが、前処理/後処理ではチャンクを処理しないため正しくない。
そのため、チャンクを前処理/後処理に修正した。
BE-04 リスタート機能
・リスタート管理テーブルのジョブコンテキストカラムの型をRAWではなくBLOBで
扱う場合の設定方法の説明を追加した。
BE-05 処理結果ハンドリング機能
・Java VMが異常終了した場合に返却する終了コードは’1’となるため、必要に応じて
ジョブを起動するスクリプト等でハンドリングすることを追記した。
・処理結果ハンドラでジョブステータスを変更する際に、SUBMITTED(起動前)のステータスに
変更することを禁止すると明記した。
・フレームワークが提供しているハンドラ一覧にTransactionalSupportLogicResultHandlerが
含まれていなかったため、追記した。
BH-01 例外ハンドリング機能
・処理結果ハンドラでジョブステータスを変更する際に、SUBMITTED(起動前)のステータスに
変更することを禁止すると明記した。
BI-01 Commonj 対応機能
・本機能の説明と実装の乖離部分を全面修正した。
# チュートリアル
・起動と確認において、ログレベルの表記が誤っていたため修正した。
その他、javadoc等の軽微な記述ミスを修正。