投稿日
更新日
Nablarchシステム開発ガイド
もくじ
- はじめに
- このドキュメントのねらい
- このドキュメントの対象読者
- 読み方の注意点
- 全体像
- プロジェクト計画
- 要件定義工程
- 要件定義
- 方式設計
- プロジェクト成果物の確認
- テスト計画
- プロジェクト用の開発ガイド作成
- 設計工程
- PGUT工程
- Nablarchプロジェクト初期構築
- チーム開発環境構築
- 開発環境構築ガイドの作成
- 開発標準の整備
- 結合テスト工程
- 結合テスト準備(疎通確認)
- システムテスト工程
- 保守運用
- Nablarchパターン集
- Nablarchでよく使われるパターン
- Nablarchアンチパターン
- Nablarchバッチ処理パターン
- 起動方法による分類
- 入出力による分類
- 注意点
- ファイルの移動、コピー
- Nablarchでの非同期処理
- メール送信を行う場合
- Nablarchアンチパターン
- Webアプリケーション
- Nablarchバッチ
- JSR352バッチ
- UI標準のカスタマイズ
- UI標準(画面)
- UI標準(画面)別冊_UI部品カタログ
- テスト項目の検討
- テスト観点の収集
- テスト観点の抽出
- Nablarch環境構築
- アーキタイプからのプロジェクト生成
- コンポーネント設定
- 静的解析ツールの導入
- Javaスタイルガイド
- チーム開発環境構築
- 開発環境構築ガイドの作成
- xxxプロジェクト 開発環境構築ガイド
- 前提条件
- 開発環境構築手順
- パッケージ構成検討
- パッケージ構成の考え方
- 業務的な機能での分割例
- クラスの役割での分割例
Nablarchバッチ処理パターン
起動方法による分類
Nablarchバッチでは、主に以下の2つの起動方法を使用します。
- 都度起動バッチ
- プロセスを都度起動して、バッチ処理を実行します
- 日次や月次など、定期的にバッチ処理を実行するような場合に使用します
- テーブルをキューとして使ったメッセージング
- プロセスを起動しておき、定期的にデータベース上のテーブルを監視し未処理のレコードを順次処理します
- オンライン処理で処理要求を受け付け、非同期でバッチ処理を実行したいような場合に使用します
入出力による分類
この切り口とは別に、主となる入力、出力の組み合わせにより、 以下の3パターンに分けることができます。
- FILE to DB
- DB to DB
- DB to FILE
組み合わせは以下の通りとなります。
FILE to DB | DB to DB | DB to FILE | |
---|---|---|---|
都度起動 | ○ | ○ | ○ |
常駐 | ✕ | ○ | △ |
- ○:使用する
- △:仕組み上は可能だが普通は使わない
- ✕:使わない
(常駐バッチは、通常データベースを監視するため、FILE to DBとの組み合わせはありません)
■FILE to DB
- 外部から受け取ったファイルをシステムに取り込む際に使用します。
- ファイル取り込み用のバッチプログラムを作成します。
- 取り込み先は、業務用のテーブルではなく、一時保存用のテーブル(テンポラリテーブル)になります
- テンポラリテーブルはファイルのレイアウトと1対1のカラムを持ちます
FILE to DBバッチでは、できるだけ業務処理を加えず、ファイルをテンポラリテーブルにINSERTしていくようにします。 これにより、以下のようなメリットが得られます。
- 一度DBに取り込むことによって、RDBの強力な機能が使用できる。
- トランザクション
- SQL
- 従来のマッチング処理は、SQLのJOINで代替できます
- 従来のコントロールブレイク処理は、GROUP BYで代替できるケースがあります
- Nablarchのファイル取り込み機能が使用できる(任意)
- ファイル取り込み時に障害が発生した場合、途中から取り込みを再開できる
■DB to DB
- 入力はSELECT文の結果セットの各レコードになります。
- 1レコード分のデータを受け取って、DBを更新します。
- 1レコードの処理中に行われる更新は全て同一トランザクション下で実行されるため、障害発生時でも不整合が発生しません
■DB to FILE
- 入力はSELECT文の結果セットの各レコードになります。
- 1レコード分のデータを受け取って、ファイルを書き出します(普通は1行分)
DBはトランザクション管理されますが、ファイル書き出しは管理外なので、 障害発生時に、不整合がありえます。
上記以外の組み合わせ(FILE to FILE)
例えば、よくあるバッチ処理として「2つのファイルをマッチングしながら、1つのファイルを出力する」というものがあります。 この場合は、FILE to FILEということになりますが、Nablarchバッチではこの形態は使用しません。 それぞれのファイルをDBに取り込んだ後、SQLでJOINすることで同等の処理ができます。
マッチングやコントロールブレイクといったメインフレームのバッチでよくあるようなファイル処理をNablarchバッチで実現することは可能ですが、バッチプログラムが複雑になる、どこまでをファイルでどこまでをDBで扱うかという切り分けが難しい、というような問題があります。 それよりも、前述のパターンの組み合わせで実現したほうが、各バッチがシンプルになり設計もしやすく、バグも埋め込みにくくなります。
注意点
ファイルの移動、コピー
FILE to DBないしDB to FILEを行う場合、そのバッチ処理にはファイルの移動やコピーは含めないようにします。
仮に以下のようなバッチ処理を実装したとします。
- ファイルを所定のディレクトリに移動(初期化処理)
- 1で移動したファイルを読み込んでDBに登録(本処理)
2で処理が失敗した場合、再実行する前に入力ファイルを元のディレクトリに戻すというオペレーションが必要となってしまいます。
ファイルの移動、コピーを別出ししておくことで、以下のようなメリットがあります。
- 再実行がやりやすくなる
- ファイル取り込みバッチの単体テストがやりやすくなる
- ファイルの移動、コピーを自分で実装しないので、移動、コピーに対する単体テストが不要になる