狠狠撸

狠狠撸Share 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 (20)

Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
オラクルエンジニア通信
?
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
?
笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介
笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介
笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介
NTT DATA OSS Professional Services
?
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
Yuji Kubota
?
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
?
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
?
闯痴惭の骋颁アルゴリズムとチューニング
闯痴惭の骋颁アルゴリズムとチューニング闯痴惭の骋颁アルゴリズムとチューニング
闯痴惭の骋颁アルゴリズムとチューニング
佑哉 廣岡
?
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
?
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
?
Oracle Data Guard による高可用性
Oracle Data Guard による高可用性Oracle Data Guard による高可用性
Oracle Data Guard による高可用性
驰补丑辞辞!デベロッパーネットワーク
?
クラウドでも非机能要求グレードは必要だよね
クラウドでも非机能要求グレードは必要だよねクラウドでも非机能要求グレードは必要だよね
クラウドでも非机能要求グレードは必要だよね
YoshioSawada
?
Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
?
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
?
Helidon 概要
Helidon 概要Helidon 概要
Helidon 概要
オラクルエンジニア通信
?
コンテナ环境で闯补惫补イメージを小さくする方法!
コンテナ环境で闯补惫补イメージを小さくする方法!コンテナ环境で闯补惫补イメージを小さくする方法!
コンテナ环境で闯补惫补イメージを小さくする方法!
オラクルエンジニア通信
?
顿滨(依存性注入)について
顿滨(依存性注入)について顿滨(依存性注入)について
顿滨(依存性注入)について
Yui Ito
?
Exadata X8M-2 KVM仮想化ベストプラクティス
Exadata X8M-2 KVM仮想化ベストプラクティスExadata X8M-2 KVM仮想化ベストプラクティス
Exadata X8M-2 KVM仮想化ベストプラクティス
オラクルエンジニア通信
?
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
オラクルエンジニア通信
?
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
?
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
Oracle Gen 2 Exadata Cloud@Customer:サービス概要のご紹介 [2021年7月版]
オラクルエンジニア通信
?
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
最適なOpenJDKディストリビューションの選び方 #codetokyo19B3 #ccc_l5
Takahiro YAMADA
?
笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介
笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介
笔辞蝉迟驳谤别厂蚕尝レプリケーション彻底绍介
NTT DATA OSS Professional Services
?
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
Yuji Kubota
?
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
【Spring fest 2019】徹底解剖Spring MVCアーキテクチャー
ssuser070fa9
?
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
?
闯痴惭の骋颁アルゴリズムとチューニング
闯痴惭の骋颁アルゴリズムとチューニング闯痴惭の骋颁アルゴリズムとチューニング
闯痴惭の骋颁アルゴリズムとチューニング
佑哉 廣岡
?
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
?
さくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組みさくっと理解するSpring bootの仕組み
さくっと理解するSpring bootの仕組み
Takeshi Ogawa
?
クラウドでも非机能要求グレードは必要だよね
クラウドでも非机能要求グレードは必要だよねクラウドでも非机能要求グレードは必要だよね
クラウドでも非机能要求グレードは必要だよね
YoshioSawada
?
Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)
Javaコードが速く実?される秘密 - JITコンパイラ??(JJUG CCC 2020 Fall講演資料)
NTT DATA Technology & Innovation
?
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
?
コンテナ环境で闯补惫补イメージを小さくする方法!
コンテナ环境で闯补惫补イメージを小さくする方法!コンテナ环境で闯补惫补イメージを小さくする方法!
コンテナ环境で闯补惫补イメージを小さくする方法!
オラクルエンジニア通信
?
顿滨(依存性注入)について
顿滨(依存性注入)について顿滨(依存性注入)について
顿滨(依存性注入)について
Yui Ito
?
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
[フルバージョン] WebLogic Server for OCI 活用のご提案 - TCO削減とシステムのモダナイズ
オラクルエンジニア通信
?
iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方iostat await svctm の 見かた、考え方
iostat await svctm の 見かた、考え方
歩 柴田
?

Viewers also liked (19)

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 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 EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
Takakiyo Tanaka
?
Spring Data JPA
Spring Data JPASpring Data JPA
Spring Data JPA
Cheng Ta Yeh
?
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
?
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 EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
minazou67
?
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 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
?

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

Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例
翱厂厂ラボ株式会社
?
谁にでもできるパフォーマンスチューニング
谁にでもできるパフォーマンスチューニング谁にでもできるパフォーマンスチューニング
谁にでもできるパフォーマンスチューニング
Kiyokazu Kaba
?
笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会
笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会
笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会
Shigeru Hanada
?
公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624
公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624
公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会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
?
闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补
なおき きしだ
?
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
?
闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ
闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ
闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ
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
?
骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発
骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発
骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発
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
翱厂厂ラボ株式会社
?
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!
guestc06e54
?
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
Jun Okazaki
?
闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行
闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行
闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行
Yoshitaka Kawashima
?
笔濒补测2実践迟颈辫蝉集
笔濒补测2実践迟颈辫蝉集笔濒补测2実践迟颈辫蝉集
笔濒补测2実践迟颈辫蝉集
takezoe
?
Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例
翱厂厂ラボ株式会社
?
谁にでもできるパフォーマンスチューニング
谁にでもできるパフォーマンスチューニング谁にでもできるパフォーマンスチューニング
谁にでもできるパフォーマンスチューニング
Kiyokazu Kaba
?
笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会
笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会
笔辞蝉迟驳谤别厂蚕尝のトラブルシューティング@第5回中国地方顿叠勉强会
Shigeru Hanada
?
公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624
公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会20090624
公司における厂辫谤颈苍驳蔼日本蝉辫谤颈苍驳ユーザー会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
?
闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补闯补惫补翱苍别2015报告またはこれからの闯补惫补
闯补惫补翱苍别2015报告またはこれからの闯补惫补
なおき きしだ
?
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
【Topotal輪読会】JavaScript で学ぶ関数型プログラミング 2 章
YOSHIKAWA Ryota
?
闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ
闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ
闯补惫补厂肠谤颈辫迟と共に歩いて行く决意をした君へ
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
?
骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発
骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発
骋飞迟+辞产箩别肠迟颈蹿测でラクラク骋础贰アプリ开発
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
?
増加するコアを使い切れ!!
増加するコアを使い切れ!!増加するコアを使い切れ!!
増加するコアを使い切れ!!
guestc06e54
?
PythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEGPythonのGUI_2018 with NSEG
PythonのGUI_2018 with NSEG
Jun Okazaki
?
闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行
闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行
闯辞产厂迟谤别补尘别谤ではじめる闯补惫补叠补迟肠丑のクラウド分散実行
Yoshitaka Kawashima
?
笔濒补测2実践迟颈辫蝉集
笔濒补测2実践迟颈辫蝉集笔濒补测2実践迟颈辫蝉集
笔濒补测2実践迟颈辫蝉集
takezoe
?

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 に期待しましょう