SlideShare a Scribd company logo
『Java EE 7 徹底入門』
バッチアプリケーションの開発 jBatch
2016/02/15 JJUG ナイトセミナー
#JJUG
猪瀬 淳
@inose660
Safe Harbor Statement
• 本資料は私個人の見解であり所属会社の見解を反映したものではありません。
• 本資料の作成にあたっては正確な記述につとめましたが、内容に対してなんら
保証をするものではなく、内容に基づくいかなる運用結果に関してもいっさいの
責任を負いません。
22016/02/15 JJUG Night Seminar #JJUG
自己紹介
• 割愛
32016/02/15 JJUG Night Seminar #JJUG
本日話す内容
• What is “jBatch” / Why “jBatch”
• jBatch の構成要素と機能
• ジョブ
• ステップ
• 補助機能
• 本書に書いていない話
2016/02/15 JJUG Night Seminar #JJUG 4
What is “jBatch”
• Java EE におけるバッチ処理の標準
• Version 1.0 として Java EE 7 から登場
• JSR-352 (Batch Applications for Java Platform)
で規定
• Spring Batch から多くを継承
2016/02/15 JJUG Night Seminar #JJUG 5
1. プロセスとして実行
4. jBatchを利用
2. 自作スレッドとして実行
JVM
Why “jBatch”?
62016/02/15 JJUG Night Seminar #JJUG
JVM
バッチ
処理
JVM
バッチ
処理
JVM
バッチ
処理
main
バッチ処理
バッチ処理
バッチ処理
APサーバ
(JVM)
jBatch のジョブ = バッチ処理
jBatch のジョブ = バッチ処理
jBatch のジョブ = バッチ処理
スレッド
スレッド
スレッド
スレッド
スレッド
スレッド
プロセス
プロセス
プロセス
3. サーブレットとして実行
APサーバ (JVM)
servlet
バッチ処理
バッチ処理
バッチ処理
スレッド
スレッド
スレッド
Java でバッチを実行する4つの方法
1. プロセスとして実行 2. 自作スレッドとして実行
JVM
72016/02/15 JJUG Night Seminar #JJUG
JVM
バッチ
処理
JVM
バッチ
処理
JVM
バッチ
処理
main
バッチ処理
バッチ処理
バッチ処理
スレッド
スレッド
スレッド
プロセス
プロセス
プロセス
シンプル
起動停止や実行状況の把握などが直感的
JVM 起動時間のオーバーヘッド
APサーバで動く他の部品との共有が難しい
(CDI/EJB/JPAなど、Java EE の他の機能を使う
にはライブラリの追加が必要)
スレッドはプロセスに比べて軽く起動できる
スレッドを管理する main プログラムを自作する
必要がある
APサーバで動く他の部品との共有が難しい
(CDI/EJB/JPAなど、Java EE の他の機能を使う
にはライブラリの追加が必要)
○
△
△
△
△
○
Why “jBatch”? Java でバッチを実行する4つの方法
3. サーブレットとして実行 4. jBatchを利用
82016/02/15 JJUG Night Seminar #JJUG
APサーバ
(JVM)
jBatch のジョブ = バッチ処理
jBatch のジョブ = バッチ処理
jBatch のジョブ = バッチ処理
スレッド
スレッド
スレッド
APサーバ (JVM)
servlet
バッチ処理
バッチ処理
バッチ処理
スレッド
スレッド
スレッド
スレッドはプロセスに比べて軽く起動できる
スレッド管理プログラムを自作する必要がない
APサーバで動く他の部品との共有が容易
(CDI/EJB/JPAなど Java EEの機能が利用可能)
実行状況の把握, スレッドの停止が難しい
HTTP リクエストタイムアウトの問題
スレッドはプロセスに比べて軽く起動できる
スレッド管理プログラムを自作する必要がない
APサーバで動く他の部品との共有が容易
(CDI/EJB/JPAなど Java EEの機能が利用可能)
実行状況の確認方法、ジョブの起動停止など
の方法が用意されている
△
○
○
○
○
○
○
○
△
Why “jBatch”? Java でバッチを実行する4つの方法
ジョブ
<job>
<step> </step>
<step> </step>
<step> </step>
</job>
public class Step1Impl (…)...{
}
public class Step2Impl (…)...{
}
public class Step3Impl (…)...{
}
ステップ ステップ ステップ
jBatch の構成要素 : “ジョブ” と “ステップ”
92016/02/15 JJUG Night Seminar #JJUG
“ジョブ” は
“ステップ”
の入れ物
ステップ
に、
具体的な
処理を
Java で
記述
各ステップの名
前や実行順序、
設定等を XMLで
記述 (Job XML)
ステップ
に、
具体的な
処理を
Java で
記述
ステップに
具体的な
処理を
Java で
記述
Job XML
もう少し拡大すると
102016/02/15 JJUG Night Seminar #JJUG
<job id="SampleJob" xmlns="...." version="1.0">
SampleJob.xml
public class MyProg implements Batchlet {
public String process()
<property name="InputFile" value="C://myfile1" />
<step id="STEP1">
<batchlet ref="com.example.MyProg" />
</step>
</job>
:
:
:
:
ジョブ名
各種設定
(property)
<job>要素
<step>要素
ステップは、用意された
インターフェースを実装
ステップ
ジョブ:
ステップの
クラス名
ジョブとステップとの分離
112016/02/15 JJUG Night Seminar #JJUG
// SAMPLEJOB JOB 1234, JINOSE
// STEP1 EXEC PGM=MYPROG
// INFILED DD DSN=USER1.MYFILE1, DISP=OLD
// OUTFILED DD SYSOUT=*
:
JCL
MYPROG
COBOL や PL/I などで
書かれたプログラム
• ジョブとステップの分離は、古くはホスト時代にさかのぼる
• jBatch は、時代や言語を問わずに共通する
バッチ処理の「ひな型」を提供
ステップ
jBatch の構成要素と機能
122016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
• チャンク
• バッチレット
• ステップ・パーティショニング
• フロー
• スプリット
• デシジョン
• 遷移要素
• ジョブオペレータ
• リトライ
• スキップ
• ジョブリポジトリ
• リスナ
• コンテキスト
• メトリック
処理の順序制御
実装の
テンプレート提供
実行順序を表現する XML タグ群
• フロー <flow>
• スプリット <split>
• デシジョン <decision>
132016/02/15 JJUG Night Seminar #JJUG
• 遷移要素
<next>
<stop>
<end>
<fail>
ジョブ
ステップ
補助機能
例 Job
step
flow
step step step
step
flow
step step
flow
step step step
flow
step step step
end
stop
fail
split
decision
flow
step step
end
fail
step
[Tips] Job XML の root 要素
142016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
• Java EE 7 で利用できる XSD の一覧はコチラ
http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html#7
XSDを指定することにより、
エディタがアシストしてくれるよ
うになる
XSD を指定することにより、
エディタが補完してくれるようになる
ジョブ全体の開始/中断/再開
152016/02/15 JJUG Night Seminar #JJUG
ステップ
補助機能
ジョブ
Properties p = new Properties();
:
JobOperator jo = BatchRuntime.getJobOperator();
long jobExecId = jo.start("SimpleBatch", p);
jo.stop(jobExecId, p);
long jobExecId = jo.restart(jobExecId, p);
開始
中断
再開
• ジョブオペレータ (javax.batch.operations.JobOperator)
ジョブオペレータの呼び出し方法
162016/02/15 JJUG Night Seminar #JJUG
ステップ
ジョブ
Shell script
.batファイル アプリケーション サーバ
(Java EE コンテナ)
JAX-RS
EJB
ジョブ
スケジューラ
ブラウザ
スマートデバイス
オペレータ
アドホックな実行
定刻起動
オペレータ
POJO
(CDI)
jBatch コンテナ
jobOperator
.start()
.stop()
.restart()
JSF
マネージド
ビーン
JAX-RS
client
EJB
client
外部
システム
補助機能
ジョブオペレータの
呼び出し方法は、
jBatch 仕様では
規定されていない
本書では、JAX-RSを
用いた起動方法と、
JSF を用いた管理
画面の作成を紹介
エラーハンドリング
172016/02/15 JJUG Night Seminar #JJUG
ステップ
補助機能
ジョブ
リトライ
再度そのデータの処理を試みる
スキップ
該当データの処理を飛ばして、
次のデータへ処理を進める
• データ処理中に例外が発生したらどうするか?
• チャンク型ステップ (後述) の処理が対象
• 上記対処の対象とする例外クラスの名前を
Job XML に記述しておく
ステップ
• 『チャンク型』 と 『バッチレット型』 の2種類
• チャンク型は “複数データの一括処理” を担う
182016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
Batchlet
データに依存しない処理やコマンド実行など
ItemReader : データの読み込みに対応
バッチレット型
チャンク型
ItemProcessor : データの加工などの処理に対応
ItemWriter : データの書き込みに対応
複数データの
一括処理
単発の処理
協調
動作
書込みをまとめるこ
とにより、物理的な
I/O の回数を削減
性能上の効率と
障害発生時の
やり直しのリスクとの
兼ね合いを図って
いる
チャンク型のステップ
192016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
読み込み処理
ItemReader ItemProcessor
加工等の
処理
読み込み処理 加工等の
処理
ItemWriter
複数件のデータを
まとめて書き込み
デフォルトでは10回に
1度の呼び出し
APサーバ
読込と加工等の
処理を繰り返し
checkpoint
:
:
ステップ = 実装のテンプレート
• 実体は Interface
 開発者は用意されたメソッドを Override
202016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
public class SimpleBatchlet implements Batchlet {
public class SimpleReader implements ItemReader {
バッチレット型
チャンク型
public class SimpleProcessor implements ItemProcessor {
public class SimpleWriter implements ItemWriter {
複数データの
一括処理
単発の処理
open()
writeItems()
close()
checkpointInfo()
open()
readItems()
close()
checkpointInfo()
processItem()
process()
stop()
補助機能
212016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
• ジョブリポジトリ
• リスナ
• コンテキスト
• メトリック
補助機能
• ジョブリポジトリ
– ジョブやステップ
の情報を格納
– 通常はAPサー
バ配下にある
内部DBが実体
– APサーバの
管理画面でも
確認できる
222016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
補助機能
• リスナ
afterJob()
afterStep()
batchlet
afterStep()
beforeStep()
ジョブ
onError()
afterChunk()
beforeJob()
beforeStep()
beforeChunk()
beforeWrite()
afterWrite()
beforeRead()
afterRead()
beforeProcess()
afterProcess()
retry / skip
onWriteError()
retry / skip
onReadError()
retry / skip
onProcessError()
ステップ ステップ
チャンク
JobListener
StepListener
ChunkListener
ItemRead
Listener
ItemProcess
Listener
ItemWrite
Listener
StepListener
RetryReadListener.onRetryReadException()
SkipReadListener.onSkipReadItem()
RetryProcessListener.onRetryProcessException()
SkipProcessListener.onSkipProcessItem() RetryWriteListener.onRetryWriteException()
SkipWriteListener.onSkipWriteItem()
ItemWriter
ItemReader
ItemProcessor
処理の前後で
イベントが発生
→ リスナを付与し、
任意の処理を
差し込み
232016/02/15 JJUG Night Seminar #JJUG
補助機能
242016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
• コンテキスト
– JobContext と StepContext の2種類
– プロパティやステータスなど、実行中のジョブ/ステップに
関する情報を API 経由で提供
– UserData として、ジョブ/ステップに横断的な
任意の値をセットすることもできる
– Step の UserData は永続化可能
補助機能
252016/02/15 JJUG Night Seminar #JJUG
ジョブ
ステップ
補助機能
• メトリック
– ステップに関する統計情報
– StepContext#getMetrics()
より取得可能
– APサーバの管理画面でも
確認できる
10章の構成
• 10.1 jBatch の基本
• 10.2 jBatch の利用 – 基本編
• 10.3 jBatch の利用 – 応用編
• 10.4 ジョブの作成
• 10.5 ジョブのフロー制御
262016/02/15 JJUG Night Seminar #JJUG
jBatch の構成要素の紹介
ログ出力のみのジョブを用いて,
XMLの書法と各メソッドの説明
Property, コンテキスト, メトリック,
Checkpoint, リスナの活用例と
バッチ/終了ステータスの説明
split, flow, decision, 遷移要素の
活用例の紹介
本書に書いていない話
2016/02/15 JJUG Night Seminar #JJUG 27
ステップ・パーティショニング
282016/02/15 JJUG Night Seminar #JJUG
Interface 概要
PartitionPlan /
PartitionMapper
パーティション数, スレッド数, パーティションごとのプロパティなどを動的に提供する
(これを使わない場合は、上記のような設定を Job XML に静的に定義する)
PartitionReducer パーティション分散の前処理、および直後での待ち合わせ処理を実装する
PartitionCollector 各パーティション内のステップの処理結果を遂次 PartitionAnalyzer に送信する
PartitionAnalyzer PartitionCollectorから受信したデータをステップのメインスレッドで処理する
<step id="Step1">
<chunk ...> or <batchlet ...>
:
</chunk> or </batchlet>
<partition>
<plan partitions="3" threads="3" />
<reducer ref="...." />
:
</partition>
</step>
• ステップを任意のスレッド数で
並行して処理する機能
• 本書では紙幅と時間が尽きた
ため割愛
なぜ入出力ファイルを CSV 形式にしたのか?
• 当初は入出力ファイルを JSON 形式として、ついでに Java EE 7 で
追加された JSON-P の API の紹介もしようかと考えていた
• jBatchでは、チャンクの処理途中で失敗した場合に備えて再実行
(restart) が出来るように配慮されている → これも当然紹介したい
• JSONやXML形式のファイルには、終端に閉じカッコや終了タグなどが必要
– 例えばファイルの書き込み途中で失敗したあとに再開した場合、
終端がないことにより文書の操作に失敗する
• 結局1行で完結するCSVファイルのほうが jBatch との親和性が高い
– ただしCSVはデータ中にカンマが混入する可能性を考慮する必要あり
292016/02/15 JJUG Night Seminar #JJUG
ここがヘンだよ jBatch
• チャンクの ItemReader / Processor / Writer 間で
ジェネリクスが使えない!(Spring Batchなら…)
• 終了ステータス/バッチステータスが、ジョブとステップで
共用なのが直感的ではない
• flow / split 単位での property が指定できない
• GF の参照実装 (TCK) だと動かない機能がいくつか…
302016/02/15 JJUG Night Seminar #JJUG
バージョンアップ / jBatch 1.1 に期待しましょう
Thank you!
ご清聴ありがとうございました

More Related Content

What's hot

ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
JustSystems Corporation
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
Takafumi ONAKA
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
Shinji Takao
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
dcubeio
 
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へチケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へ
akipii Oga
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
Works Applications
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
shinjiigarashi
 
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチアーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
Yusuke Suzuki
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
 
リーン開発の本質 公開用
リーン開発の本質 公開用リーン開発の本質 公開用
リーン開発の本質 公開用
ESM SEC
 
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシングSpring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
Rakuten Group, Inc.
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
Masatoshi Tada
 
New Features of DotNet 6 Blazor WASM
New Features of DotNet 6 Blazor WASMNew Features of DotNet 6 Blazor WASM
New Features of DotNet 6 Blazor WASM
Shotaro Suzuki
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
NTT DATA Technology & Innovation
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Shuto Suzuki
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
NTT DATA Technology & Innovation
 

What's hot (20)

ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介ジャストシステムJava100本ノックのご紹介
ジャストシステムJava100本ノックのご紹介
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
GraalVMのJavaネイティブビルド機能でどの程度起動が速くなるのか?~サーバレス基盤上での評価~ / How fast does GraalVM's...
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
チケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へチケット駆動開発の解説~タスク管理からプロセス改善へ
チケット駆動開発の解説~タスク管理からプロセス改善へ
 
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善SpotBugs(FindBugs)による 大規模ERPのコード品質改善
SpotBugs(FindBugs)による 大規模ERPのコード品質改善
 
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
導入から 10 年、PHP の trait は滅びるべきなのか その適切な使いどころと弱点、将来について
 
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチアーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
アーキテクチャの進化から学ぶ、プラットフォームエンジニアリングへのアプローチ
 
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
 
リーン開発の本質 公開用
リーン開発の本質 公開用リーン開発の本質 公開用
リーン開発の本質 公開用
 
Spring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシングSpring CloudとZipkinを利用した分散トレーシング
Spring CloudとZipkinを利用した分散トレーシング
 
はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)はまる!JPA(初学者向けライト版)
はまる!JPA(初学者向けライト版)
 
New Features of DotNet 6 Blazor WASM
New Features of DotNet 6 Blazor WASMNew Features of DotNet 6 Blazor WASM
New Features of DotNet 6 Blazor WASM
 
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
JAVA_HOME/binにあるコマンド、いくつ使っていますか?[JVM関連ツール編](JJUGナイトセミナー「Java解析ツール特集」 発表資料)
 
Cognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しようCognitive Complexity でコードの複雑さを定量的に計測しよう
Cognitive Complexity でコードの複雑さを定量的に計測しよう
 
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
より速く より運用しやすく 進化し続けるJVM(Java Developers Summit Online 2023 発表資料)
 

Viewers also liked

JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”
Norito Agetsuma
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
Masuji Katoda
 
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
Tsunenaga Hanyuda
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
Norito Agetsuma
 
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaグループ2016年定期総会 #jjug #ccc_soukai日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaユーザーグループ
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
minazou67
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
Takuya Iwatsuka
 
AeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュAeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュ
Norito Agetsuma
 
An introduction into Spring Data
An introduction into Spring DataAn introduction into Spring Data
An introduction into Spring Data
Oliver Gierke
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
Toshihiro Nakamura
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
日本Javaユーザーグループ
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
Takakiyo Tanaka
 
Introduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUGIntroduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUG
Toshiaki Maki
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Toshiaki Maki
 
Astah Community スタートガイド
Astah Community スタートガイドAstah Community スタートガイド
Astah Community スタートガイド
ChangeVision
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門
minazou67
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
Toshiaki Maki
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Masatoshi Tada
 

Viewers also liked (20)

JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
 
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
 
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaグループ2016年定期総会 #jjug #ccc_soukai日本Javaグループ2016年定期総会 #jjug #ccc_soukai
日本Javaグループ2016年定期総会 #jjug #ccc_soukai
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 
Spring I/O 2015 報告
Spring I/O 2015 報告Spring I/O 2015 報告
Spring I/O 2015 報告
 
AeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュAeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュ
 
An introduction into Spring Data
An introduction into Spring DataAn introduction into Spring Data
An introduction into Spring Data
 
Doma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみDoma SQLテンプレートのしくみ
Doma SQLテンプレートのしくみ
 
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
Javaエンジニアに知ってほしい、Springの教科書「TERASOLUNA」 #jjug_ccc #ccc_f3
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
 
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
 
Introduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUGIntroduction to Cloud Foundry #JJUG
Introduction to Cloud Foundry #JJUG
 
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_bootGrails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
Grails 3.0先取り!? Spring Boot入門ハンズオン #jggug_boot
 
Astah Community スタートガイド
Astah Community スタートガイドAstah Community スタートガイド
Astah Community スタートガイド
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門
 
Spring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsugSpring Bootで変わる Javaアプリ開発! #jsug
Spring Bootで変わる Javaアプリ開発! #jsug
 
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
 

Similar to 20160215 04 java ee7徹底入門 jbatch

Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例
OSSラボ株式会社
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
Kiyokazu Kaba
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Shigeru Hanada
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
Yusuke Suzuki
 
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
Ryo Sasaki
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
chibochibo
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
なおき きしだ
 
How do you like knockout?
How do you like knockout?How do you like knockout?
How do you like knockout?
Narami Kiyokura
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
Muyuu Fujita
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2
Hitoshi Yoshida
 
Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Y OCHI
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
Hiroko Tamagawa
 
JobScheduler Code Reading
JobScheduler Code ReadingJobScheduler Code Reading
JobScheduler Code Reading
Shinobu Okano
 
Dotnetconf2017
Dotnetconf2017Dotnetconf2017
Dotnetconf2017
Yoshiyuki Taniguchi
 
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
OSSラボ株式会社
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!guestc06e54
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
Jun Okazaki
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
Yoshitaka Kawashima
 
Play2実践tips集
Play2実践tips集Play2実践tips集
Play2実践tips集takezoe
 

Similar to 20160215 04 java ee7徹底入門 jbatch (20)

Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例
 
誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング誰にでもできるパフォーマンスチューニング
誰にでもできるパフォーマンスチューニング
 
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
[Okta x Jamf合同新年会] Okta Workflowsによるノーコード業務改善 〜Jamf APIを使ってMac端末情報を自動収集してみよう〜
 
What is doobie? - database access for scala -
What is doobie? - database access for scala -What is doobie? - database access for scala -
What is doobie? - database access for scala -
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
 
How do you like knockout?
How do you like knockout?How do you like knockout?
How do you like knockout?
 
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
 
JavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へJavaScriptと共に歩いて行く決意をした君へ
JavaScriptと共に歩いて行く決意をした君へ
 
Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2Zabbix-jp study #4 20111020 session2
Zabbix-jp study #4 20111020 session2
 
Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発Gwt+objectifyでラクラクGAEアプリ開発
Gwt+objectifyでラクラクGAEアプリ開発
 
脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに脱・独自改造! GebでWebDriverをもっとシンプルに
脱・独自改造! GebでWebDriverをもっとシンプルに
 
JobScheduler Code Reading
JobScheduler Code ReadingJobScheduler Code Reading
JobScheduler Code Reading
 
Dotnetconf2017
Dotnetconf2017Dotnetconf2017
Dotnetconf2017
 
220523JS7.pdf
220523JS7.pdf220523JS7.pdf
220523JS7.pdf
 
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!
 
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
 
JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行JobStreamerではじめるJavaBatchのクラウド分散実行
JobStreamerではじめるJavaBatchのクラウド分散実行
 
Play2実践tips集
Play2実践tips集Play2実践tips集
Play2実践tips集
 

20160215 04 java ee7徹底入門 jbatch

  • 1. 『Java EE 7 徹底入門』 バッチアプリケーションの開発 jBatch 2016/02/15 JJUG ナイトセミナー #JJUG 猪瀬 淳 @inose660
  • 2. Safe Harbor Statement • 本資料は私個人の見解であり所属会社の見解を反映したものではありません。 • 本資料の作成にあたっては正確な記述につとめましたが、内容に対してなんら 保証をするものではなく、内容に基づくいかなる運用結果に関してもいっさいの 責任を負いません。 22016/02/15 JJUG Night Seminar #JJUG
  • 4. 本日話す内容 • What is “jBatch” / Why “jBatch” • jBatch の構成要素と機能 • ジョブ • ステップ • 補助機能 • 本書に書いていない話 2016/02/15 JJUG Night Seminar #JJUG 4
  • 5. What is “jBatch” • Java EE におけるバッチ処理の標準 • Version 1.0 として Java EE 7 から登場 • JSR-352 (Batch Applications for Java Platform) で規定 • Spring Batch から多くを継承 2016/02/15 JJUG Night Seminar #JJUG 5
  • 6. 1. プロセスとして実行 4. jBatchを利用 2. 自作スレッドとして実行 JVM Why “jBatch”? 62016/02/15 JJUG Night Seminar #JJUG JVM バッチ 処理 JVM バッチ 処理 JVM バッチ 処理 main バッチ処理 バッチ処理 バッチ処理 APサーバ (JVM) jBatch のジョブ = バッチ処理 jBatch のジョブ = バッチ処理 jBatch のジョブ = バッチ処理 スレッド スレッド スレッド スレッド スレッド スレッド プロセス プロセス プロセス 3. サーブレットとして実行 APサーバ (JVM) servlet バッチ処理 バッチ処理 バッチ処理 スレッド スレッド スレッド Java でバッチを実行する4つの方法
  • 7. 1. プロセスとして実行 2. 自作スレッドとして実行 JVM 72016/02/15 JJUG Night Seminar #JJUG JVM バッチ 処理 JVM バッチ 処理 JVM バッチ 処理 main バッチ処理 バッチ処理 バッチ処理 スレッド スレッド スレッド プロセス プロセス プロセス シンプル 起動停止や実行状況の把握などが直感的 JVM 起動時間のオーバーヘッド APサーバで動く他の部品との共有が難しい (CDI/EJB/JPAなど、Java EE の他の機能を使う にはライブラリの追加が必要) スレッドはプロセスに比べて軽く起動できる スレッドを管理する main プログラムを自作する 必要がある APサーバで動く他の部品との共有が難しい (CDI/EJB/JPAなど、Java EE の他の機能を使う にはライブラリの追加が必要) ○ △ △ △ △ ○ Why “jBatch”? Java でバッチを実行する4つの方法
  • 8. 3. サーブレットとして実行 4. jBatchを利用 82016/02/15 JJUG Night Seminar #JJUG APサーバ (JVM) jBatch のジョブ = バッチ処理 jBatch のジョブ = バッチ処理 jBatch のジョブ = バッチ処理 スレッド スレッド スレッド APサーバ (JVM) servlet バッチ処理 バッチ処理 バッチ処理 スレッド スレッド スレッド スレッドはプロセスに比べて軽く起動できる スレッド管理プログラムを自作する必要がない APサーバで動く他の部品との共有が容易 (CDI/EJB/JPAなど Java EEの機能が利用可能) 実行状況の把握, スレッドの停止が難しい HTTP リクエストタイムアウトの問題 スレッドはプロセスに比べて軽く起動できる スレッド管理プログラムを自作する必要がない APサーバで動く他の部品との共有が容易 (CDI/EJB/JPAなど Java EEの機能が利用可能) 実行状況の確認方法、ジョブの起動停止など の方法が用意されている △ ○ ○ ○ ○ ○ ○ ○ △ Why “jBatch”? Java でバッチを実行する4つの方法
  • 9. ジョブ <job> <step> </step> <step> </step> <step> </step> </job> public class Step1Impl (…)...{ } public class Step2Impl (…)...{ } public class Step3Impl (…)...{ } ステップ ステップ ステップ jBatch の構成要素 : “ジョブ” と “ステップ” 92016/02/15 JJUG Night Seminar #JJUG “ジョブ” は “ステップ” の入れ物 ステップ に、 具体的な 処理を Java で 記述 各ステップの名 前や実行順序、 設定等を XMLで 記述 (Job XML) ステップ に、 具体的な 処理を Java で 記述 ステップに 具体的な 処理を Java で 記述 Job XML
  • 10. もう少し拡大すると 102016/02/15 JJUG Night Seminar #JJUG <job id="SampleJob" xmlns="...." version="1.0"> SampleJob.xml public class MyProg implements Batchlet { public String process() <property name="InputFile" value="C://myfile1" /> <step id="STEP1"> <batchlet ref="com.example.MyProg" /> </step> </job> : : : : ジョブ名 各種設定 (property) <job>要素 <step>要素 ステップは、用意された インターフェースを実装 ステップ ジョブ: ステップの クラス名
  • 11. ジョブとステップとの分離 112016/02/15 JJUG Night Seminar #JJUG // SAMPLEJOB JOB 1234, JINOSE // STEP1 EXEC PGM=MYPROG // INFILED DD DSN=USER1.MYFILE1, DISP=OLD // OUTFILED DD SYSOUT=* : JCL MYPROG COBOL や PL/I などで 書かれたプログラム • ジョブとステップの分離は、古くはホスト時代にさかのぼる • jBatch は、時代や言語を問わずに共通する バッチ処理の「ひな型」を提供 ステップ
  • 12. jBatch の構成要素と機能 122016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 • チャンク • バッチレット • ステップ・パーティショニング • フロー • スプリット • デシジョン • 遷移要素 • ジョブオペレータ • リトライ • スキップ • ジョブリポジトリ • リスナ • コンテキスト • メトリック 処理の順序制御 実装の テンプレート提供
  • 13. 実行順序を表現する XML タグ群 • フロー <flow> • スプリット <split> • デシジョン <decision> 132016/02/15 JJUG Night Seminar #JJUG • 遷移要素 <next> <stop> <end> <fail> ジョブ ステップ 補助機能 例 Job step flow step step step step flow step step flow step step step flow step step step end stop fail split decision flow step step end fail step
  • 14. [Tips] Job XML の root 要素 142016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 • Java EE 7 で利用できる XSD の一覧はコチラ http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html#7 XSDを指定することにより、 エディタがアシストしてくれるよ うになる XSD を指定することにより、 エディタが補完してくれるようになる
  • 15. ジョブ全体の開始/中断/再開 152016/02/15 JJUG Night Seminar #JJUG ステップ 補助機能 ジョブ Properties p = new Properties(); : JobOperator jo = BatchRuntime.getJobOperator(); long jobExecId = jo.start("SimpleBatch", p); jo.stop(jobExecId, p); long jobExecId = jo.restart(jobExecId, p); 開始 中断 再開 • ジョブオペレータ (javax.batch.operations.JobOperator)
  • 16. ジョブオペレータの呼び出し方法 162016/02/15 JJUG Night Seminar #JJUG ステップ ジョブ Shell script .batファイル アプリケーション サーバ (Java EE コンテナ) JAX-RS EJB ジョブ スケジューラ ブラウザ スマートデバイス オペレータ アドホックな実行 定刻起動 オペレータ POJO (CDI) jBatch コンテナ jobOperator .start() .stop() .restart() JSF マネージド ビーン JAX-RS client EJB client 外部 システム 補助機能 ジョブオペレータの 呼び出し方法は、 jBatch 仕様では 規定されていない 本書では、JAX-RSを 用いた起動方法と、 JSF を用いた管理 画面の作成を紹介
  • 17. エラーハンドリング 172016/02/15 JJUG Night Seminar #JJUG ステップ 補助機能 ジョブ リトライ 再度そのデータの処理を試みる スキップ 該当データの処理を飛ばして、 次のデータへ処理を進める • データ処理中に例外が発生したらどうするか? • チャンク型ステップ (後述) の処理が対象 • 上記対処の対象とする例外クラスの名前を Job XML に記述しておく
  • 18. ステップ • 『チャンク型』 と 『バッチレット型』 の2種類 • チャンク型は “複数データの一括処理” を担う 182016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 Batchlet データに依存しない処理やコマンド実行など ItemReader : データの読み込みに対応 バッチレット型 チャンク型 ItemProcessor : データの加工などの処理に対応 ItemWriter : データの書き込みに対応 複数データの 一括処理 単発の処理 協調 動作
  • 19. 書込みをまとめるこ とにより、物理的な I/O の回数を削減 性能上の効率と 障害発生時の やり直しのリスクとの 兼ね合いを図って いる チャンク型のステップ 192016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 読み込み処理 ItemReader ItemProcessor 加工等の 処理 読み込み処理 加工等の 処理 ItemWriter 複数件のデータを まとめて書き込み デフォルトでは10回に 1度の呼び出し APサーバ 読込と加工等の 処理を繰り返し checkpoint : :
  • 20. ステップ = 実装のテンプレート • 実体は Interface  開発者は用意されたメソッドを Override 202016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 public class SimpleBatchlet implements Batchlet { public class SimpleReader implements ItemReader { バッチレット型 チャンク型 public class SimpleProcessor implements ItemProcessor { public class SimpleWriter implements ItemWriter { 複数データの 一括処理 単発の処理 open() writeItems() close() checkpointInfo() open() readItems() close() checkpointInfo() processItem() process() stop()
  • 21. 補助機能 212016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 • ジョブリポジトリ • リスナ • コンテキスト • メトリック
  • 22. 補助機能 • ジョブリポジトリ – ジョブやステップ の情報を格納 – 通常はAPサー バ配下にある 内部DBが実体 – APサーバの 管理画面でも 確認できる 222016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能
  • 23. 補助機能 • リスナ afterJob() afterStep() batchlet afterStep() beforeStep() ジョブ onError() afterChunk() beforeJob() beforeStep() beforeChunk() beforeWrite() afterWrite() beforeRead() afterRead() beforeProcess() afterProcess() retry / skip onWriteError() retry / skip onReadError() retry / skip onProcessError() ステップ ステップ チャンク JobListener StepListener ChunkListener ItemRead Listener ItemProcess Listener ItemWrite Listener StepListener RetryReadListener.onRetryReadException() SkipReadListener.onSkipReadItem() RetryProcessListener.onRetryProcessException() SkipProcessListener.onSkipProcessItem() RetryWriteListener.onRetryWriteException() SkipWriteListener.onSkipWriteItem() ItemWriter ItemReader ItemProcessor 処理の前後で イベントが発生 → リスナを付与し、 任意の処理を 差し込み 232016/02/15 JJUG Night Seminar #JJUG
  • 24. 補助機能 242016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 • コンテキスト – JobContext と StepContext の2種類 – プロパティやステータスなど、実行中のジョブ/ステップに 関する情報を API 経由で提供 – UserData として、ジョブ/ステップに横断的な 任意の値をセットすることもできる – Step の UserData は永続化可能
  • 25. 補助機能 252016/02/15 JJUG Night Seminar #JJUG ジョブ ステップ 補助機能 • メトリック – ステップに関する統計情報 – StepContext#getMetrics() より取得可能 – APサーバの管理画面でも 確認できる
  • 26. 10章の構成 • 10.1 jBatch の基本 • 10.2 jBatch の利用 – 基本編 • 10.3 jBatch の利用 – 応用編 • 10.4 ジョブの作成 • 10.5 ジョブのフロー制御 262016/02/15 JJUG Night Seminar #JJUG jBatch の構成要素の紹介 ログ出力のみのジョブを用いて, XMLの書法と各メソッドの説明 Property, コンテキスト, メトリック, Checkpoint, リスナの活用例と バッチ/終了ステータスの説明 split, flow, decision, 遷移要素の 活用例の紹介
  • 28. ステップ・パーティショニング 282016/02/15 JJUG Night Seminar #JJUG Interface 概要 PartitionPlan / PartitionMapper パーティション数, スレッド数, パーティションごとのプロパティなどを動的に提供する (これを使わない場合は、上記のような設定を Job XML に静的に定義する) PartitionReducer パーティション分散の前処理、および直後での待ち合わせ処理を実装する PartitionCollector 各パーティション内のステップの処理結果を遂次 PartitionAnalyzer に送信する PartitionAnalyzer PartitionCollectorから受信したデータをステップのメインスレッドで処理する <step id="Step1"> <chunk ...> or <batchlet ...> : </chunk> or </batchlet> <partition> <plan partitions="3" threads="3" /> <reducer ref="...." /> : </partition> </step> • ステップを任意のスレッド数で 並行して処理する機能 • 本書では紙幅と時間が尽きた ため割愛
  • 29. なぜ入出力ファイルを CSV 形式にしたのか? • 当初は入出力ファイルを JSON 形式として、ついでに Java EE 7 で 追加された JSON-P の API の紹介もしようかと考えていた • jBatchでは、チャンクの処理途中で失敗した場合に備えて再実行 (restart) が出来るように配慮されている → これも当然紹介したい • JSONやXML形式のファイルには、終端に閉じカッコや終了タグなどが必要 – 例えばファイルの書き込み途中で失敗したあとに再開した場合、 終端がないことにより文書の操作に失敗する • 結局1行で完結するCSVファイルのほうが jBatch との親和性が高い – ただしCSVはデータ中にカンマが混入する可能性を考慮する必要あり 292016/02/15 JJUG Night Seminar #JJUG
  • 30. ここがヘンだよ jBatch • チャンクの ItemReader / Processor / Writer 間で ジェネリクスが使えない!(Spring Batchなら…) • 終了ステータス/バッチステータスが、ジョブとステップで 共用なのが直感的ではない • flow / split 単位での property が指定できない • GF の参照実装 (TCK) だと動かない機能がいくつか… 302016/02/15 JJUG Night Seminar #JJUG バージョンアップ / jBatch 1.1 に期待しましょう