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

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

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

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

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

項目 説明
プロジェクト種別 Mavenプロジェクト
プロジェクト構成 単一プロジェクト構成
使用DB H2 Databaes 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コマンドの実行

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

その後に、以下のように「mvn archetype:generate」コマンドを実行する。

mvn archetype:generate -DarchetypeGroupId=com.nablarch.archetype -DarchetypeArtifactId=nablarch-batch-ee-archetype -DarchetypeVersion=5u6

上記コマンドに含まれるパラメータのうち、重要なものを以下に示す。

設定値 説明
-DarchetypeVersion 使用したいアーキタイプのバージョンを指定する(Nablarch 5u6以降では、Nablarchのバージョン)

8.3.3.2.2. プロジェクト情報の入力

上記コマンドを実行すると、以下の項目について入力を求められるので、 生成されるプロジェクトのひな形に関する情報を入力する。

本手順では以下の値を入力したとして説明を行う。

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

重要

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

プロジェクト情報の入力が終わると、Y: :と表示される。

  • 入力した内容をもとに、ひな形を生成する場合には「Y」を入力してください。
  • プロジェクト情報の入力をやり直したい場合には「N」を入力してください。

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

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] ------------------------------------------------------------------------
(中略)
2016-08-26 09:41:52.727 -INFO- ROO [null] 削除件数:10件
2016-08-26 09:41:52.728 -DEBUG- SQL [null] nablarch.core.db.statement.BasicSqlPStatement#executeQuery
        SQL = [SELECT FAMILY_NAME,FIRST_NAME,USER_ID FROM SAMPLE_USER]
        additional_info:

2016-08-26 09:41:52.728 -DEBUG- SQL [null] nablarch.core.db.statement.BasicSqlPStatement#executeQuery
        execute_time(ms) = [0]
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.385 sec - in com.example.batchlet.SampleBatchletTest

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0

[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

以下のコマンドを実行することで、依存するライブラリを一箇所に集める。

mvn dependency:copy-dependencies -DoutputDirectory=target/dependency -DincludeScope=runtime

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

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

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

Unix系の場合:

java -cp "target/myapp-batch-ee-0.1.0-dev.jar:target/dependency/*" org.jberet.se.Main sample-batchlet

Windowsの場合:

java -cp "target/myapp-batch-ee-0.1.0-dev.jar;target/dependency/*" org.jberet.se.Main sample-batchlet

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

2016-08-26 09:42:16.844 -DEBUG- SQL [null] nablarch.core.db.statement.BasicSqlPStatement#executeUpdate
        execute_time(ms) = [1] update_count = [1]
2016-08-26 09:42:16.847 -INFO- ROO [null] 削除件数:10件
2016-08-26 09:42:16.850 -DEBUG- SQL [null] transaction commit. resource=[transaction]
2016-08-26 09:42:16.853 -INFO- ROO [null] finish step. step name=[step1], step status=[SUCCEEDED]
2016-08-26 09:42:16.855 -INFO- ROO [null] finish job. job name=[sample-batchlet], batch status=[COMPLETED]

ちなみに

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

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

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

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

Unix系の場合:

java -cp "target/myapp-batch-ee-0.1.0-dev.jar:target/dependency/*" org.jberet.se.Main sample-etl

Windowsの場合:

java -cp "target/myapp-batch-ee-0.1.0-dev.jar;target/dependency/*" org.jberet.se.Main sample-etl

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

2016-08-26 09:42:19.603 -DEBUG- SQL [null] nablarch.core.db.statement.BasicSqlPStatement#executeBatch
      execute_time(ms) = [1] batch_count = [10]
2016-08-26 09:42:19.606 -DEBUG- SQL [null] transaction commit. resource=[transaction]
2016-08-26 09:42:19.608 -INFO- ROO [null] chunk progress. write count=[10]
2016-08-26 09:42:19.609 -DEBUG- SQL [null] transaction commit. resource=[transaction]
2016-08-26 09:42:19.612 -INFO- ROO [null] finish step. step name=[load], step status=[SUCCEEDED]
2016-08-26 09:42:19.614 -INFO- ROO [null] finish job. job name=[sample-etl], batch status=[COMPLETED]

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

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

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

Unix系の場合:

java -cp "target/myapp-batch-ee-0.1.0-dev.jar:target/dependency/*" org.jberet.se.Main sample-chunk

Windowsの場合:

java -cp "target/myapp-batch-ee-0.1.0-dev.jar;target/dependency/*" org.jberet.se.Main sample-chunk

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

2016-08-26 09:42:28.802 -INFO- ROO [null] start job. job name=[sample-chunk]
2016-08-26 09:42:28.809 -INFO- ROO [null] start step. step name=[step1]
2016-08-26 09:42:29.495 -DEBUG- SQL [null] nablarch.core.db.statement.BasicSqlPStatement#executeQuery
        SQL = [SELECT FAMILY_NAME,FIRST_NAME,USER_ID FROM SAMPLE_USER]
        additional_info:

2016-08-26 09:42:29.501 -DEBUG- SQL [null] nablarch.core.db.statement.BasicSqlPStatement#executeQuery
        execute_time(ms) = [3]
2016-08-26 09:42:29.536 -DEBUG- SQL [null] transaction commit. resource=[transaction]
2016-08-26 09:42:29.537 -INFO- ROO [null] chunk progress. write count=[5]
2016-08-26 09:42:29.540 -DEBUG- SQL [null] transaction commit. resource=[transaction]
2016-08-26 09:42:29.542 -INFO- ROO [null] chunk progress. write count=[10]
2016-08-26 09:42:29.545 -DEBUG- SQL [null] transaction commit. resource=[transaction]
2016-08-26 09:42:29.548 -INFO- ROO [null] finish step. step name=[step1], step status=[SUCCEEDED]
2016-08-26 09:42:29.551 -INFO- ROO [null] finish job. job name=[sample-chunk], batch status=[COMPLETED]

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