8.3.3. JSR352に準拠したバッチプロジェクトの初期セットアップ

JSR352に準拠したバッチプロジェクトの初期セットアップでは以下を行う。

  • JSR352に準拠したバッチプロジェクトの生成
  • JSR352に準拠したバッチプロジェクトの動作確認

8.3.3.1. 生成するプロジェクトの概要

本手順で生成するプロジェクトの概要は以下の通りである。

項目 説明
プロジェクト種別 Mavenプロジェクト
プロジェクト構成 単一プロジェクト構成
使用DB H2 Database Engine(アプリケーションに組み込み)
生成するプロジェクトに含まれるもの

生成されたプロジェクトには以下が含まれる。

  • JSR352に準拠したバッチアプリケーション用の基本的な設定
  • batchlet方式による疎通確認用バッチアプリケーション
  • chunk方式による疎通確認用バッチアプリケーション
  • ETL機能を使用した疎通確認用アプリケーション [1]
  • Mavenと連動して動作するツールの初期設定( nablarch-archetype-parent(親プロジェクト) を参照することによって取り込んでいる)。
[1]ETLを実行するクラスはNablarch内に存在するため、プロジェクトには設定ファイル、及びETLが使用するDTOクラス、entityクラスのみ存在する。

他のプロジェクトとの関係、及びディレクトリ構成は、 Mavenアーキタイプの構成 を参照。

8.3.3.2. ブランクプロジェクト作成

Nablarchが提供するアーキタイプを使用してブランクプロジェクトを生成する。

8.3.3.2.1. mvnコマンドの実行

カレントディレクトリを、ブランクプロジェクトを作成したいディレクトリ(任意のディレクトリで可)に変更し、以下のファイルを配置する。

バッチファイル

配置後、引数に必要なパラメータを指定しbatファイルを実行する。

generateJbatchProject.bat 5u20 <<groupId>> <<artifactId>> <<version>> <<package(任意)>>

上記コマンドに設定するパラメータは以下の通り。 なお、nablarchのバージョンを変更したい場合には 5u20 を変更すること。

入力項目 説明 設定例
groupId グループID(通常はパッケージ名を入力) com.example
artifactId アーティファクトID myapp-batch-ee
version バージョン番号 0.1.0
package パッケージ(通常はグループIDと同じ) com.example

重要

項目groupIdおよびpackageは、Javaのパッケージ名にマッピングされる。 よって、これらの入力値には、英小文字、数字、ドットを使用し、ハイフンは使用しないこと。

コマンドが正常終了した場合、ブランクプロジェクトがカレントディレクトリ配下に作成される。

8.3.3.3. 疎通確認

8.3.3.3.1. 自動テスト

アーキタイプから生成したプロジェクトには、以下のユニットテストが含まれている。

ユニットテストのクラス テスト内容
SampleBatchletTest データベース接続を伴うクラスのJUnitテスト。

ユニットテストを実行することで、ブランクプロジェクトの生成に成功していることを確認する。

以下のコマンドを実行する。

cd myapp-batch-ee
mvn test

実行に成功すると、以下のようなログがコンソールに出力される。

(中略)
[INFO] ------------------------------------------------------------------------
[INFO] Building myapp-batch-ee 0.1.0
[INFO] ------------------------------------------------------------------------
(中略)
2020-04-28 10:32:31.096 -WARN- nablarch.core.repository.di.config.xml.XmlComponentDefinitionLoader [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] component property was overridden. component name = businessDateProvider, property = dbTransactionManager
10:32:31.144 INFO  c.z.h.HikariDataSource HikariPool-1 - Starting...
10:32:31.477 INFO  c.z.h.p.PoolBase HikariPool-1 - Driver does not support get/set network timeout for connections. (org.h2.jdbc.JdbcConnection.getNetworkTimeout()I)
10:32:31.480 INFO  c.z.h.HikariDataSource HikariPool-1 - Start completed.
2020-04-28 10:32:31.555 -INFO- com.example.batchlet.SampleBatchlet [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] 削除件数:10件
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.877 s - in com.example.batchlet.SampleBatchletTest
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
(以下略)

8.3.3.3.2. 起動テスト

生成したプロジェクトには、以下のバッチアプリケーションが組み込まれている。

ジョブID 内容
sample-batchlet batchlet方式で実装されたサンプルアプリケーション。
sample-chunk chunk方式で実装されたサンプルアプリケーション。
sample-etl Nablarchが提供するETL機能のサンプルアプリケーション。

上記3つのバッチアプリケーションの動作確認を行うことで、ブランクプロジェクトの生成に成功していることを確認する。

8.3.3.3.2.1. バッチアプリケーションのビルド

まだ、生成したプロジェクトにカレントディレクトリを移動していない場合は移動する。

cd myapp-batch-ee

以下のコマンドを実行することで、バッチアプリケーションのビルドを行う。

mvn package

8.3.3.3.2.2. batchlet方式のバッチアプリケーションの起動

batchlet方式のバッチアプリケーションでは、SAMPLE_USERテーブルのデータを削除する処理が実装されている。

以下のコマンドを実行する。

mvn exec:java -Dexec.mainClass=nablarch.fw.batch.ee.Main -Dexec.args="'sample-batchlet'"

実行に成功すると、以下のようなログが ./progress.log に出力される。

2020-04-28 10:35:27.002 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] start job. job name: [sample-batchlet]
2020-04-28 10:35:27.011 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] start step. job name: [sample-batchlet] step name: [step1]
2020-04-28 10:35:27.247 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] finish step. job name: [sample-batchlet] step name: [step1] step status: [SUCCESS]
2020-04-28 10:35:27.255 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] finish job. job name: [sample-batchlet]

補足

このbatchletはSAMPLE_USERテーブルのデータの全件削除を行っている。削除したデータを復元したい場合は、 ETL機能を使用するアプリケーションの起動 のコマンドを実行すること。

8.3.3.3.2.3. ETL機能を使用するアプリケーションの起動

ETL機能を使用したアプリケーションでは、SAMPLE_USERテーブルにデータを投入するように設定されている。

以下のコマンドを実行する。

mvn exec:java -Dexec.mainClass=nablarch.fw.batch.ee.Main -Dexec.args="'sample-etl'"

起動に成功すると、以下のようなログが ./progress.log に出力される。

2020-04-28 10:37:21.921 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] start step. job name: [sample-etl] step name: [load]
2020-04-28 10:37:21.932 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] job name: [sample-etl] step name: [load] input count: [10]
2020-04-28 10:37:21.944 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] job name: [sample-etl] step name: [load] write table name: [SAMPLE_USER]
2020-04-28 10:37:21.954 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] job name: [sample-etl] step name: [load] total tps: [500.00] current tps: [500.00] estimated end time: [2020/04/28 10:37:21.954] remaining count: [0]
2020-04-28 10:37:21.963 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] finish step. job name: [sample-etl] step name: [load] step status: [COMPLETED]
2020-04-28 10:37:21.973 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] finish job. job name: [sample-etl]

8.3.3.3.2.4. chunk方式のバッチアプリケーションの起動

chunk方式のバッチアプリケーションでは、SAMPLE_USERテーブルからデータを取り出し、編集してCSVファイルに出力する処理が実装されている。

以下のコマンドを実行する。

mvn exec:java -Dexec.mainClass=nablarch.fw.batch.ee.Main -Dexec.args="'sample-chunk'"

起動に成功すると、以下のようなログが ./progress.log に出力される。

2020-04-28 10:39:46.955 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] start job. job name: [sample-chunk]
2020-04-28 10:39:46.974 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] start step. job name: [sample-chunk] step name: [step1]
2020-04-28 10:39:47.202 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] job name: [sample-chunk] step name: [step1] input count: [10]
2020-04-28 10:39:47.235 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] job name: [sample-chunk] step name: [step1] total tps: [156.25] current tps: [156.25] estimated end time: [2020/04/28 10:39:47.235] remaining count: [5]
2020-04-28 10:39:47.244 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] job name: [sample-chunk] step name: [step1] total tps: [243.90] current tps: [625.00] estimated end time: [2020/04/28 10:39:47.243] remaining count: [0]
2020-04-28 10:39:47.257 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] finish step. job name: [sample-chunk] step name: [step1] step status: [COMPLETED]
2020-04-28 10:39:47.263 -INFO- progress [null] boot_proc = [] proc_sys = [batch-ee] req_id = [null] usr_id = [null] finish job. job name: [sample-chunk]

また、testdata/output/outputdata.csvに以下のデータが出力される。

ユーザID,氏名
1,名部楽 一郎
2,名部楽 二郎
3,名部楽 三郎
4,名部楽 四朗
5,名部楽 五郎
6,名部楽 六郎
7,名部楽 七郎
8,名部楽 八郎
9,名部楽 九郎
10,名部楽 十郎

補足

testdata/output/outputdata.csvはUTF-8で出力される。 testdata/output/outputdata.csvの内容を確認する際、Excelで開くと化けて表示されるため、テキストエディタで開くこと。

8.3.3.3.2.5. 疎通確認になぜか失敗する場合

原因は分からないが疎通確認に失敗する場合、どこかで手順を誤っている可能性がある。

原因が分からない場合は、ブランクプロジェクト作成 からやり直してみること。

8.3.3.3.3. 補足

H2のデータの確認方法や、ブランクプロジェクトに組み込まれているツールに関しては、 初期セットアップ手順 補足事項 を参照すること。