Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
Norito Agetsuma
PDF, PPTX
14,311 views
Jbatch実践入門 #jdt2015
Java Day Tokyo 2015 jBatch実践入門セッションのスライドです。
Software
◦
Read more
30
Save
Share
Embed
Embed presentation
Download
Download as PDF, PPTX
1
/ 73
2
/ 73
Most read
3
/ 73
4
/ 73
5
/ 73
6
/ 73
7
/ 73
8
/ 73
9
/ 73
10
/ 73
11
/ 73
12
/ 73
13
/ 73
14
/ 73
15
/ 73
16
/ 73
17
/ 73
18
/ 73
19
/ 73
20
/ 73
21
/ 73
22
/ 73
23
/ 73
24
/ 73
25
/ 73
26
/ 73
27
/ 73
28
/ 73
29
/ 73
30
/ 73
31
/ 73
32
/ 73
33
/ 73
34
/ 73
Most read
35
/ 73
36
/ 73
37
/ 73
38
/ 73
39
/ 73
40
/ 73
41
/ 73
42
/ 73
43
/ 73
44
/ 73
45
/ 73
46
/ 73
Most read
47
/ 73
48
/ 73
49
/ 73
50
/ 73
51
/ 73
52
/ 73
53
/ 73
54
/ 73
55
/ 73
56
/ 73
57
/ 73
58
/ 73
59
/ 73
60
/ 73
61
/ 73
62
/ 73
63
/ 73
64
/ 73
65
/ 73
66
/ 73
67
/ 73
68
/ 73
69
/ 73
70
/ 73
71
/ 73
72
/ 73
73
/ 73
More Related Content
PDF
20160215 04 java ee7徹底入門 jbatch
by
Jun Inose
PDF
Webアプリを並行開発する際のマイグレーション戦略
by
Takayuki Shimizukawa
PDF
PostgreSQLアンチパターン
by
Soudai Sone
PDF
マイクロサービスに至る歴史とこれから - XP祭り2021
by
Yusuke Suzuki
PDF
MySQLで論理削除と正しく付き合う方法
by
yoku0825
PDF
Javaのログ出力: 道具と考え方
by
Taku Miyakawa
PPTX
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
PDF
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
by
Teppei Sato
20160215 04 java ee7徹底入門 jbatch
by
Jun Inose
Webアプリを並行開発する際のマイグレーション戦略
by
Takayuki Shimizukawa
PostgreSQLアンチパターン
by
Soudai Sone
マイクロサービスに至る歴史とこれから - XP祭り2021
by
Yusuke Suzuki
MySQLで論理削除と正しく付き合う方法
by
yoku0825
Javaのログ出力: 道具と考え方
by
Taku Miyakawa
9/14にリリースされたばかりの新LTS版Java 17、ここ3年間のJavaの変化を知ろう!(Open Source Conference 2021 O...
by
NTT DATA Technology & Innovation
Node.js Native ESM への道 〜最終章: Babel / TypeScript Modules との闘い〜
by
Teppei Sato
What's hot
PDF
Ruby で高速なプログラムを書く
by
mametter
PPTX
KubernetesバックアップツールVeleroとちょっとした苦労話
by
imurata8203
PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
PPTX
やってはいけない空振りDelete
by
Yu Yamada
PDF
いまさら聞けないselectあれこれ
by
lestrrat
PDF
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
by
NTT DATA Technology & Innovation
PDF
日本語テストメソッドについて
by
kumake
PDF
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
PDF
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
PPTX
Docker超入門
by
VirtualTech Japan Inc.
PDF
쿠키런 1년, 서버개발 분투기
by
Brian Hong
PDF
MySQLアンチパターン
by
yoku0825
PDF
マイクロにしすぎた結果がこれだよ!
by
mosa siru
PPTX
GraphQLのsubscriptionで出来ること
by
Shingo Fukui
PDF
Where狙いのキー、order by狙いのキー
by
yoku0825
PDF
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
by
Takahiko Ito
PDF
アーキテクチャから理解するPostgreSQLのレプリケーション
by
Masahiko Sawada
PDF
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
PDF
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
PPTX
SQLチューニング入門 入門編
by
Miki Shimogai
Ruby で高速なプログラムを書く
by
mametter
KubernetesバックアップツールVeleroとちょっとした苦労話
by
imurata8203
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
by
Koichiro Matsuoka
やってはいけない空振りDelete
by
Yu Yamada
いまさら聞けないselectあれこれ
by
lestrrat
YugabyteDBを使ってみよう(NewSQL/分散SQLデータベースよろず勉強会 #1 発表資料)
by
NTT DATA Technology & Innovation
日本語テストメソッドについて
by
kumake
ストリーム処理を支えるキューイングシステムの選び方
by
Yoshiyasu SAEKI
イミュータブルデータモデルの極意
by
Yoshitaka Kawashima
Docker超入門
by
VirtualTech Japan Inc.
쿠키런 1년, 서버개발 분투기
by
Brian Hong
MySQLアンチパターン
by
yoku0825
マイクロにしすぎた結果がこれだよ!
by
mosa siru
GraphQLのsubscriptionで出来ること
by
Shingo Fukui
Where狙いのキー、order by狙いのキー
by
yoku0825
Elasticsearch の検索精度のチューニング 〜テストを作って高速かつ安全に〜
by
Takahiko Ito
アーキテクチャから理解するPostgreSQLのレプリケーション
by
Masahiko Sawada
怖くないSpring Bootのオートコンフィグレーション
by
土岐 孝平
Linuxにて複数のコマンドを並列実行(同時実行数の制限付き)
by
Hiro H.
SQLチューニング入門 入門編
by
Miki Shimogai
Viewers also liked
PDF
Java Batch 仕様 (Public Review時点)
by
Norito Agetsuma
PDF
JSR 352 “Batch Applications for the Java Platform”
by
Norito Agetsuma
PDF
AeroGear & Java EE 7 で簡単プッシュ
by
Norito Agetsuma
PDF
JJUG 11月ナイトセミナー CDIをはじめよう
by
Norito Agetsuma
PDF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
by
Masuji Katoda
PDF
JobStreamerではじめるJavaBatchのクラウド分散実行
by
Yoshitaka Kawashima
PDF
Java EE 再入門
by
minazou67
PDF
Strutsから移行する人のためのjsf基礎
by
Satoshi Kubo
PDF
Solr AutoComplete and Did You Mean?
by
Minoru Osuka
PDF
ニコニコ動画を検索可能にしてみよう
by
genta kaneyama
PDF
ドメイン駆動設計 実践ガイド
by
増田 亨
PDF
Java の Collection 関連について整理してみました
by
Gaprot
PDF
プログラミング超超超入門
by
rigibun
PPTX
Google検索だけで満足しない、一歩先をいく収集・整理術(1day)
by
龍太郎(Ryutaro) 井元(Imoto)
PDF
情報編集 (web) 第4回:HTML入門 3 情報を整理する - リスト、テーブル
by
Atsushi Tadokoro
PDF
僕のデスクトップ整理方法
by
Kenta Komori
PDF
Doma SQLテンプレートのしくみ
by
Toshihiro Nakamura
PDF
データを整理するための基礎知識
by
Gen Fujita
PPTX
再入門、サーバープッシュ技術
by
Shin Sekaryo
PDF
201412ことばの理解とワーキングメモリ:基本概念の整理(公開)
by
Kosuke Sugai
Java Batch 仕様 (Public Review時点)
by
Norito Agetsuma
JSR 352 “Batch Applications for the Java Platform”
by
Norito Agetsuma
AeroGear & Java EE 7 で簡単プッシュ
by
Norito Agetsuma
JJUG 11月ナイトセミナー CDIをはじめよう
by
Norito Agetsuma
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
by
Masuji Katoda
JobStreamerではじめるJavaBatchのクラウド分散実行
by
Yoshitaka Kawashima
Java EE 再入門
by
minazou67
Strutsから移行する人のためのjsf基礎
by
Satoshi Kubo
Solr AutoComplete and Did You Mean?
by
Minoru Osuka
ニコニコ動画を検索可能にしてみよう
by
genta kaneyama
ドメイン駆動設計 実践ガイド
by
増田 亨
Java の Collection 関連について整理してみました
by
Gaprot
プログラミング超超超入門
by
rigibun
Google検索だけで満足しない、一歩先をいく収集・整理術(1day)
by
龍太郎(Ryutaro) 井元(Imoto)
情報編集 (web) 第4回:HTML入門 3 情報を整理する - リスト、テーブル
by
Atsushi Tadokoro
僕のデスクトップ整理方法
by
Kenta Komori
Doma SQLテンプレートのしくみ
by
Toshihiro Nakamura
データを整理するための基礎知識
by
Gen Fujita
再入門、サーバープッシュ技術
by
Shin Sekaryo
201412ことばの理解とワーキングメモリ:基本概念の整理(公開)
by
Kosuke Sugai
Similar to Jbatch実践入門 #jdt2015
PPTX
Batchは作ったことあるけど、 初めてSpring Batchを使ってみた
by
Hideyuki SASAKURA
PDF
20170525 jsug バッチは地味だが役に立つ
by
Yuichi Hasegawa
PPTX
バッチは地味だが役に立つ
by
apkiban
PPTX
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
PDF
新しいTERASOLUNA Batch Frameworkとは
by
apkiban
PDF
Asakusa fwはじめの一歩 0.7.0
by
鉄平 土佐
PDF
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
by
日本Javaユーザーグループ
PDF
About Jobs
by
Shinichi Kozake
PDF
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
by
Akabane Hiroyuki
PDF
Active Object
by
y-uti
PPT
Asakusa Enterprise Batch Processing Framework for Hadoop
by
Takashi Kambayashi
PPTX
BPMNの紹介
by
Katsunori Seki
PPTX
鹿駆動勉強会 青江発表資料
by
Takashi Aoe
PPTX
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
by
Daisuke Miyamoto
PDF
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
by
Takakiyo Tanaka
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
by
なおき きしだ
PDF
IoT時代におけるストリームデータ処理と急成長の Apache Flink
by
Takanori Suzuki
PDF
Akka stream
by
Masaki Toyoshima
PDF
Java concurrency in_practice_chap06
by
ohtsuchi
PPTX
Beginning Java EE 6 勉強会(3) #bje_study
by
inatus
Batchは作ったことあるけど、 初めてSpring Batchを使ってみた
by
Hideyuki SASAKURA
20170525 jsug バッチは地味だが役に立つ
by
Yuichi Hasegawa
バッチは地味だが役に立つ
by
apkiban
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
by
NTT DATA Technology & Innovation
新しいTERASOLUNA Batch Frameworkとは
by
apkiban
Asakusa fwはじめの一歩 0.7.0
by
鉄平 土佐
JJavaプログラム実行の仕組みと、高速・安定動作に向けた取り組み
by
日本Javaユーザーグループ
About Jobs
by
Shinichi Kozake
不安定な環境の中でのバッチ処理~JobQueueシステムQudoを使った事例~
by
Akabane Hiroyuki
Active Object
by
y-uti
Asakusa Enterprise Batch Processing Framework for Hadoop
by
Takashi Kambayashi
BPMNの紹介
by
Katsunori Seki
鹿駆動勉強会 青江発表資料
by
Takashi Aoe
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
by
Daisuke Miyamoto
タイムマシン採用:明日のエンタープライズJavaの世界を予想する -Java EE7/クラウド/Docker/etc.-
by
Takakiyo Tanaka
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
by
なおき きしだ
IoT時代におけるストリームデータ処理と急成長の Apache Flink
by
Takanori Suzuki
Akka stream
by
Masaki Toyoshima
Java concurrency in_practice_chap06
by
ohtsuchi
Beginning Java EE 6 勉強会(3) #bje_study
by
inatus
More from Norito Agetsuma
PDF
Quarkus入門
by
Norito Agetsuma
PDF
Java EEを補完する仕様 MicroProfile
by
Norito Agetsuma
PDF
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
PPTX
JavaOne2015報告会 Java EE アップデート #j1jp
by
Norito Agetsuma
PPTX
Java EE パフォーマンスTips #glassfish_jp
by
Norito Agetsuma
PPTX
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
PPTX
Java EE8 Report
by
Norito Agetsuma
PDF
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
PDF
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
PDF
プロになるためのJavaScript入門読書会 レジュメ
by
Norito Agetsuma
PDF
SQLアンチパターン読書会 レジュメ
by
Norito Agetsuma
PDF
Lt agetsuma 拡大するcdi
by
Norito Agetsuma
Quarkus入門
by
Norito Agetsuma
Java EEを補完する仕様 MicroProfile
by
Norito Agetsuma
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
by
Norito Agetsuma
JavaOne2015報告会 Java EE アップデート #j1jp
by
Norito Agetsuma
Java EE パフォーマンスTips #glassfish_jp
by
Norito Agetsuma
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
by
Norito Agetsuma
Java EE8 Report
by
Norito Agetsuma
Javaトラブルに備えよう #jjug_ccc #ccc_h2
by
Norito Agetsuma
Unixカーネルの設計 7 プロセスの制御
by
Norito Agetsuma
プロになるためのJavaScript入門読書会 レジュメ
by
Norito Agetsuma
SQLアンチパターン読書会 レジュメ
by
Norito Agetsuma
Lt agetsuma 拡大するcdi
by
Norito Agetsuma
Jbatch実践入門 #jdt2015
1.
jBatch実践入門 NTTコムウェア株式会社 上妻 宜人
(あげつま のりと) はてなブログ : 見習いプログラミング日記 【Java Day Tokyo 2015 6-5】
2.
上妻 宜人 あげつま
のりと • Javaトラブル解析/技術サポート業務に従事 • Java EE について調べて伝えることが好き • 日本Javaユーザグループでの講演 • JJUG CCC 2014, ナイトセミナ, JavaOne報告会 など
3.
『バッチジョブ』 どのように実装していますか?
4.
よくあるバッチアプリ構成を 思い浮かべてみます。
5.
よくあるバッチ構成例 ジョブスケジューラ ジョブネットA Job1 Job2-1 Job2-2 Job3 マシンA Job1
Job2 Job2 Job3 mainメソッドから始まるJavaプログラム マシンB
6.
ジョブスケジューラ ジョブネットA Job1 Job2-1 Job2-2 Job3 マシンA Job1
Job2 Job2 Job3 mainメソッドから始まるJavaプログラム マシンB • 試験期間の後半に問題が見つかる • 一度に大量ロードしてOutOfMemoryError • JDBCのexecuteBatch未使用による性能遅延 • 似たようなジョブでも構造がばらばら • 独自フレームワークは難読化と隣り合わせ よくある困ったジョブ実装
7.
ジョブ実装への様々な要求 • 耐エラー性 • 不正データが混在していても弾いて準正常終了 •
リスタート可能 • エラーによる再実行時には途中から再開可 • 多様な入出力形式 • CSVファイルやRDBMSが入力とは限らない • Web API によりjson形式の入力を持ってくる 等
8.
これら課題を解決するための、 1つの候補が Java EE7より導入 (2013/5
release)
9.
JSR 352 Batch Application
for The Java Platform
10.
本日のコンテンツ • jBatchとは何か • jBatchをどうやって使うのか •
メリット と デメリット • よくある疑問 • まとめ
11.
jBatchとは何か? • Java EE7
より導入されたバッチフレームワーク • 各ジョブの実装を楽にするのが目的 • Spring Batch の構造を引き継いで仕様化
12.
jBatchの全体像 1. バッチ用語とアーキテクチャの定義 JobOperator Job Item Processor Item Writer 2.
ジョブXML 3. ユーザが実装するAPI <job id=“monthly_billing”> <step id=“step1” next=“step2”> <step id=“step2”> </job> Step1 Step2 Step3 Job Repository Item Reader public interface ItemReader { Object readItem() throws ... }
13.
jBatch機能 #1 順序制御 ジョブスケジューラ Job1
job2 Cron or EJBタイマ 0 4 * * * batch.sh jBatch Job Step1 Step2 Step4 Decision (条件分岐) Step3-1 Step3-2Split (並行実行) Job XML </> ジョブフローはXML、ステップや分岐条件はJavaで実装 Java Java Java Java Java
14.
jBatch機能#2 処理のフレームワーク化 <<interface>> Item Processor <<interface>> Item Writer Step1 <<interface>> Item Reader • バッチ処理の多くは
『入力⇒処理⇒出力』 の流れ • 入出力と処理を分けて作成し、jBatchが呼び出す構造 • フレームワークによる設計の再利用 jBatch Runtime readItem() jBatch Job Java Java Java processItem() writeItems() Step2
15.
jBatch機能#3 チェックポイント • 異常終了に備えてチェックポイント情報を収集 •
デフォルト 10アイテム処理間隔 • リスタート時にItemReaderとItemWriterに渡す • 例えば、ファイルの途中から再処理が可能 Job Repository 10 30 ジョブ 完了 10行完了 COMIT 20 COMIT ×20行完了 restart 20行目から再処理 start
16.
jBatch機能#4 エラーハンドリング • スキップ •
例外が投げられたレコードの処理をスキップ • 例: 入力チェックエラー行はロギングのちスキップ • 上限を設定して、ジョブ自体の異常終了も可能 • リトライ • 例外が投げられたら該当のステップを自動リトライ • デフォルトはリトライなし。ジョブ異常終了。
17.
jBatchのアーキテクチャ JobOperator Job Item Processor Item Writer Step1 Step2
Step3 Job Repository Item Reader • JobOperatorからジョブ起動 • 1つのジョブは複数のステップより構成 • 各ステップは Read – Process – Write に分けて実装 • 起動終了時刻、終了ステータスをJobRepositoryに保存
18.
ジョブ 請求書発行ジョブ 【Step1】 請求額確定 【Step2】 PDF生成 【Step3】 メール送付 • トップレベル要素 • jBatchにジョブネットやジョブグループのような考え方はない •
ジョブは必ず1つ以上のステップを含む • パラメータ、再実行可否 を設定可能 • param : /var/file/売り上げデータ.csv • エラー時は途中ステップから再実行可 (例: メールサーバ異常時には、Step3から再実行) (デフォルト再実行可)
19.
ステップ • ユーザがJavaで実装する処理 • ステップ毎に2種類の実装方式が選べる •
チャンク: Reader, Processor, Writer を分けて実装 • バッチレット: 単純に1回だけ呼ばれるタスク
20.
ステップ: チャンク方式 • ItemReader、ItemProcessor、ItemWriter
の3つを実装 • 入力と処理を繰り返した後、一定数まとめて出力 • ファイルやDBなどのレコード単位の処理向け Item Processor Item Writer Step Item Reader jBatch Runtime read process 『入力 ⇒ 処理』 1レコードずつ 10回繰り返す Commit ▶ write10レコード分まとめて書き出す
21.
ステップ: チャンク方式のメリット • バッチ処理の一定の型を規定する •
似たような処理を一つの設計にまとめる • Reader / Writer を汎用ライブラリ化しやすい Item Processor Item Writer Item Reader • CSVなどの FlatFileReader • XML / JSON Reader • JDBC / JPA Reader • ビジネスロジック の実装 • Readerと同様に ライブラリ提供あり
22.
ステップ: バッチレット方式 • ステップ毎に1回だけ呼び出す方式 •
ファイル転送、ファイル圧縮、ジョブ完了メール通知 • Spring Batch では Tasklet と呼ばれている Step BatchletjBatch Runtime process() ステップの終了コード ファイル転送、 ファイル圧縮処理など
23.
ステップ以外のジョブ構成要素 #1 • Flow:
ステップをグループ化する • Decision: 条件分岐 • Split: 並列実行。Flow毎に可能 (Step毎は不可) ジョブ Step1-1 Step2-1 Step1-2 Flow2 Flow3 Flow1 Decision 終了 Split
24.
ステップ以外のジョブ構成要素 #2 • Listener:
各ジョブ要素の前後に呼ばれる • インターセプタのようなイメージ • 特にスキップ時のSkipListenerはよく使う (ロギング等) ジョブ Step1 Job Listener Item Processor Item Writer Item Reader Step Listener Skip Listener Retry Listener
25.
ここまでのまとめ • jBatchはバッチフレームワークの標準仕様 • アーキテクチャとジョブXML、APIを規定 •
XMLで順序定義し、ステップをAPIに沿って実装 • ジョブがトップレベル。1つ以上のステップを含 む • ステップは Chunk方式 or Batchlet方式 で実装 • Chunk方式ではReader/Processor/Writerを実装
26.
本日のコンテンツ • jBatchとは何か • jBatchをどうやって使うのか •
メリット と デメリット • よくある疑問 • まとめ
27.
jBatch利用の流れ 1. ジョブ設計 • ジョブとステップを抽出する 2.
ジョブ実装 • ジョブXMLの作成 • ステップの実装 (Reader/Processor/Writer) • ジョブの起動
28.
ジョブ設計 • ジョブをステップに分割 • 各ステップの入力と出力を決める 請求書発行ジョブ 【Step1】 請求額確定 【Step2】 請求書生成 【Step3】 メール送付 CSV aa,bb DBMS 入力
出力 PDF 入力 出力 請求先へ 他システムから 受領した売上データ 請求額TBL 請求書PDF
29.
ジョブ実装 #1 ジョブXMLの作成 <job
id=“issueBill”> <!-- Step1 請求額確定 --> <step id=“importInvoice” next=“genPDFBill” > <chunk item-count=“100”> <reader ref=“safesFileReader”/> <processor ref=“billProcessor”/> <writer ref=“billWriter”/> </chunk> </step> <step id=“genPDFBill”> ... チャンク方式でファイルを読み、DBに書くステップ定義 META-INF/batch-jobs/issueBill.xml 次ステップは請求書生成 読込⇒処理 x 100回後に 出力する(デフォルト10) ItemReader, ItemProcessor, ItemWriter定義 クラス名の頭を小文字 or FQCN で指定
30.
ジョブ実装 #1-1 ジョブプロパティ定義 <job
id=“issueBill”> <!-- Step1 請求額確定 --> <step id=“importInvoice” next=“genPDFBill” > <chunk item-count=“100”> <reader ref=“safesFileReader”> <properties> <property name=“fixedFileName” value=“input.csv”/> <property name=“fileName” value=“#{jobParameters[‘fileName’]}”/> </properties> </reader> <processor ref=“billProcessor”/> <writer ref=“billWriter”/> </chunk> </step> ... ItemReaderの入力ファイル名を定義する。 固定の場合と、可変の場合で定義方法は異なる。 固定的なプロパティは 値を直接ジョブXMLに定義する 可変プロパティはプロパティ名を定義 後述のジョブ起動引数で値を指定する
31.
ジョブ実装 #1-2 スキップ定義を追加 <job
id=“issueBill”> <!-- Step1 請求額確定 --> <step id=“importInvoice” next=“genPDFBill” > <chunk item-count=“100” skip-limit=“10”> <reader ref=“safesFileReader”> <properties> <property name=“fixedFileName” value=“input.csv”/> <property name=“fileName” value=“#{jobParameters[‘fileName’]}”/> </properties> </reader> <processor ref=“billProcessor”/> <writer ref=“billWriter”/> <skippable-exception-class> <include class=“sample.InvalidRecordException”/> </skippable-exception-class> </chunk> <listeners> <listener ref=“logErrorRecordListener” /> <listeners> </step> ... エラー行をスキップしたい場合は、さらに設定追加 10行までスキップする それ以上はジョブ異常終了 スキップ対象例外 (FQCN) スキップ時リスナの定義
32.
ジョブ実装 #2 ステップの実装 •
Chunkを構成する各クラスを実装する • スキップリスナを実装する 【Step1】 請求額確定 CSV aa,bb DBMS 入力 出力 請求額TBL Bill Processor SalesFile Reader Bill Writer LogErrorRecordListener 【Step2】 請求書生成 【Step3】 メール送付
33.
ジョブ実装 #2-1 ItemReaderの実装 @Named public
class SalesFileReader implements ItemReader { public void open(Serializable checkpoint) { } public Object readItem() throws Exception{ } public void close() { } public Serializable checkpointInfo() { } } ItemReaderには4つのAPIが定義されている
34.
ジョブ実装 #2-1-1 ItemReader @BatchPropertyによるパラメータ取得 @Named public
class SalesFileReader implements ItemReader { @Inject @BatchProperty(name=“fileName”) private String fileName; ... ジョブXMLのプロパティ名を @BatchProperty引数に指定 <property name=“fileName” value=“#{jobParameters[‘fileName’]}”/>
35.
ジョブ実装 #2-1-2 ItemReader.Open @Named public
class SalesFileReader implements ItemReader { ... private BufferedReader reader; private int rowNum; public void open(Serializable checkpoint) { reader = Files.newBufferedReader(Paths.get(fileName)); if (checkpoint != null) { // TODO skip reader } } public Serializable checkpointInfo() { return rowNum; }
36.
ジョブ実装 #2-1-2 ItemReader.Open @Named public
class SalesFileReader implements ItemReader { ... private BufferedReader reader; private int rowNum; public void open(Serializable checkpoint) { reader = Files.newBufferedReader(Paths.get(fileName)); if (checkpoint != null) { // TODO skip reader } } public Serializable checkpointInfo() { return rowNum; } チェックポイント毎に呼ばれる (item-count属性に設定した間隔) 初回スタート時はnull。 リスタート時には異常終了前最後 のcheckpointInfo()の値が渡される
37.
ジョブ実装 #2-1-3 ItemReader.readItem @Named public
class SalesFileReader implements ItemReader { ... public Object readItem() { String line = reader.readLine(); if (line == null) return null; // TODO1 line to Sales obj // TODO2 入力値チェック if (!isValid()) { throw new InvalidRecordException(rowNum, line); } rowNum++; return sales; } 入力値チェックもItemReaderの役 割。 エラー時はスキップ対象例外を返 す。 入力がなくなったらnullを返 す
38.
ジョブ実装 #2-1-4 ItemReader.close @Named public
class SalesFileReader implements ItemReader { ... public void open(Serializable checkpoint) { // 済 } public Serializable checkpointInfo() { //済 } public Object readItem() throws Exception { // 済 } public void close() { reader.close(); } ... リソースクローズ処理。 readItem()から null が返される or 異常終了時に呼ばれる。
39.
AbstractItemReaderにより省略可 @Named public class SalesFileReader
extends AbstractItemReader { @Override public Object readItem() throws Exception { ... } } 一部メソッドは実装不要時に使用。readItem()のみ必須。
40.
ジョブ実装 #2-2 ItemProcessorの実装 •
ItemReaderで読んだ値を引数に処理 • ビジネスロジック実装部分 【Step1】 請求額確定 CSV aa,bb DBMS 入力 出力 請求額TBL Bill Processor SalesFile Reader Bill Writer LogErrorRecordListener 【Step2】 請求書生成 【Step3】 メール送付 済
41.
ジョブ実装 #2-2-1 ItemProcessorの実装 @Named public
class BillProcessor implements ItemProcessor { @Override public Object processItem(Object item) throws Exception { Sales sales = (Sales) item; // ビジネスロジックをここに実装 // TODO 売上データ ⇒ 請求額 算出 return bill; } } ビジネスロジックをprocessItem()に実装する
42.
ジョブ実装 #2-3 ItemWriterの実装 •
ItemProcessorで処理した値を引数に • データを書き出す部分 【Step1】 請求額確定 CSV aa,bb DBMS 入力 出力 請求額TBL Bill Processor SalesFile Reader Bill Writer LogErrorRecordListener 【Step2】 請求書生成 【Step3】 メール送付 済 済
43.
ジョブ実装 #2-3-1 ItemWriterの実装 @Named public
class BillWriter implements ItemWriter { public void open(Serializable checkpoint) { } public void writeItems(List<Object> items) throws Exception { } public void close() { } public Serializable checkpointInfo() { } } ItemReaderとの違いはwriteItemsのみ
44.
ジョブ実装 #2-3-1 ItemWriterの実装 @Named public
class BillWriter implements ItemWriter { @Override public void writeItems(List<Object> items) throws Exception { List<Bill> bills = (List<Bill>) items; bills.stream() .forEach(this::insertToDB); } private void insertToDB(Bill bill) { .. } ... } 複数のRead => Process 結果のリストが引数に設定 コミットはwriteItemメソッドの呼び出し毎に実行
45.
ジョブ実装 #2-4 スキップリスナ •
スキップ対象例外の発生時に呼ばれる • エラーレコードをロギングしたい 【Step1】 請求額確定 CSV aa,bb DBMS 入力 出力 請求額TBL Bill Processor SalesFile Reader BillAmount Writer LogErrorRecordListener 【Step2】 請求書生成 【Step3】 メール送付 済 済 済
46.
ジョブ実装 #2-4-1 スキップリスナの実装 @Named public
class LogErrorRecordListener implements SkipReadListener { private static final Logger log = ...; @Override public void onSkipReadItem(Exception e) { InvalidRecordException ex = (InvalidRecordException) e; log.warn(“Row ”+ ex.getNum() + “ is Invalid Record.”); } } スキップした行情報のロギング。 スキップした行全体を別ファイルに書出すのもあり。
47.
ジョブ実装 #3 ジョブの起動 •
JobOperator経由で起動する • EJBタイマ、JAX-RS/Servletなど で起動 【Step1】 請求額確定 Bill Processor SalesFile Reader BillAmount Writer LoggingErrorRecordListener 【Step2】 請求書生成 【Step3】 メール送付 請求書発行ジョブ 済 済済 済 JobOperator EJBタイマ JAX-RS/Servlet
48.
ジョブ実装 #3-1 ジョブの起動 @ScheduleによるEJB
タイマー @javax.ejb.Singleton public class ScheduleTimer { @Schedule(hour=“4”, minute=“2”) public void timeout() { // start JobOperator jobOperator = BatchRuntime.getJobOperator(); Property props = new Property(); props.setProperty(“fileName”, “/var/xxx/input.csv”); jobOperator.start(“issueBill”, props); } } ジョブIDと、ジョブプロパティを引数に起 動
49.
ジョブ実装 #3-2 ジョブの起動 EEサーバ上なのでJAX-RS経由でも起動できる @Path(“/jobs/{jobId}”) public
class BatchResource { @POST public void start(@PathParam String jobId) { // start JobOperator jobOperator = BatchRuntime.getJobOperator(); Property props = new Property(); props.setProperty(“fileName”, “/var/xxx/input.csv”); jobOperator.start(“issueBill”, props); } ...
50.
ジョブ実装 #3-3 ジョブの停止 startの返り値のジョブ実行IDを引数に停止 @Path(“/jobs/{jobId}”) public
class BatchResource { @POST public void start(@PathParam String jobId) { // start JobOperator jobOperator = BatchRuntime.getJobOperator(); long execId = jobOperator.start(jobId, props); // stop jobOperator.stop(execId); } ...
51.
ジョブ実装 #3-4 ジョブの再実行 Reader/Writerのopen引数にチェックポイントが設定 @Path(“/jobs/{jobId}”) public
class BatchResource { @POST public void start(@PathParam String jobId) { // start JobOperator jobOperator = BatchRuntime.getJobOperator(); long execId = jobOperator.start(jobId, props); // restart jobOperator.restart(execId, props); } ...
52.
まとめ : jBatch利用の流れ 1.
ジョブ設計 • ジョブを抽出。ステップと入出力を定義する。 2. ジョブ実装 • ステップの流れ、プロパティをジョブXMLに定義 • ItemReader/ItemProcessor/ItemWriterのJava実装 • JobOperator経由で起動、停止、リスタート制御 • EJBタイマ、JAX-RS Web-API 等 から起動
53.
本日のコンテンツ • jBatchとは何か • jBatchをどうやって使うのか •
メリット と デメリット • よくある疑問 • まとめ
54.
jBatch適用のメリット • 一定の型に填めて開発できる • 1つ1つのジョブ構造のAP設計簡略化 •
第3者(保守・改造時) が構造を理解しやすい • チェックポイント等のバッチ共通機能の恩恵 • Java EE サーバの機能が使える • JAX-RS(REST入出力) / JMS連携 / CDIによるDI • リソース管理: DB接続プール、スレッドプール
55.
jBatch適用のデメリット • 型に填めにくい処理への適用が難しい • 複数入力(マスタ
/ トランザクション読込)、複数出力 • 読み込み方の工夫で解決できることもある CSV aa,bb 商品マスタ 【Step】 売上データ集計 ProcessorReader Writer CSV aa,bb 売上データ public class Aggregate { private Master master; private List<Transaction> trans; 1マスタ/複数トランザクションデータ毎 に読み込み DBMS 集計済 売り上げ
56.
jBatch適用のデメリット • 処理によっては記述が冗長 • XMLによる処理の流れの定義 •
java.nio.file.Files.linesメソッドで十分な場合もある // CSVファイルより、15歳以上のみ抽出して別ファイルへ try (Stream<String> stream = Files.lines(Paths.get(“csv.txt”)) { stream .map(line -> line.split(“,”)) .map(arr -> // TODO array to Student) .filter(student -> student.getAge() > 15) .forEachOrdered(s -> // write to file); } Reader Processor Writer
57.
本日のコンテンツ • jBatchとは何か • jBatchをどうやって使うのか •
メリット と デメリット • よくある疑問 • まとめ
58.
Question #1 Spring Batch
と何が違うのか?
59.
jBatch と SpringBatch
の違い #1 • jBatchは仕様、SpringBatchは実装 • jBatch実装: RI (GlassFish), JBeret (WildFly) • SpringBatch3.0より jBatchに準拠 • ライブラリの豊富さは先行のSpringBatch有利 SpringBatchの機能範囲 jBatch アーキテクチャ ジョブXML API定義 • 豊富なライブラリ群 • CSV/TSV, XML, JDBCページング • かゆいところに手が届く • 同一形式の複数ファイル読込 (stock_1.csv, stock_2.csv ...) • 複数行を1アイテムにマッピング
60.
jBatch と SpringBatch
の違い #2 • SpringBatchはジェネリクス対応 public class Reader implements ItemReader<Stock> { @Override public Stock read() { // read stock } } public class Processor implements ItemProcessor<Stock, Result> { @Override public Result process(Stock s) throws Exception { ... } } ジェネリクス対応により キャストが不要
61.
Question #2 もうXMLはつらいです。
62.
Spring Batchでは Java
でジョブ定義可能 @Bean public Job job() { return jobsBuilderFactory.get("myJob") .start(step1()).next(step2()) .build(); } @Bean protected Step step1(...) { return stepBuilderFactory.get("step1") .<Person, Person> chunk(10) .reader(reader).processor(processor).writer(writer) .build(); } Spring Batch - Reference Documentation http://docs.spring.io/spring-batch/trunk/reference/html/configureJob.html#javaConfig
63.
NetBeans “jBatch Suite” •
NetBeanプラグインによる jBatch サポート • ジョブXMLの生成 • ブランク ItemXXX/Batchlet 生成 ドラック & ドロップ で ステップの流れを作成
64.
Question #3 ジョブの流れ定義は ジョブスケジューラ or
jBatch ?
65.
やりたいことに応じて使い分ける • システム全体のジョブ管理にはスケジューラ • APサーバだけで完結しないジョブへの対応 •
例: ログバックアップ、サーバ再起動 • ジョブAP内の順序制御には jBatch • Javaコード (Decision) による複雑な条件判定も可 • job.xml変更時は *.war 再デプロイが必要
66.
jBatch実装のこれからに期待 GlassFish4はテーブル形式でジョブ履歴を表示 • 管理コンソールが強化されると jBatch
はより便利に • ジョブフロー状況の図示、ジョブ間の順序制御
67.
Question #4 スケールアウトは可能か?
68.
今のところ仕様上は未対応 • jBatchの仕様としては定義されていない • 同一ジョブを複数サーバにデプロイする等の対処 •
実装サーバでの対応に期待 • クラスタ機能と連携したジョブ分散 • ジョブ毎のリソース管理 (スレッド数、Javaヒープ等)
69.
本日のコンテンツ • jBatchとは何か • jBatchをどうやって使うのか •
メリット と デメリット • よくある疑問 • まとめ
70.
まとめ #1 JobOperator Job Item Processor Item Writer <job
id=“monthly_billing”> <step id=“step1” next=“step2”> <step id=“step2”> </job> Step1 Step2 Step3 Job Repository Item Reader public interface ItemReader { Object readItem() throws ... } jBatchはジョブを実装する為のフレームワーク。
71.
まとめ #2 jBatchの利用により実現できること。 • ジョブXMLによる順序制御 •
APの構造を決める (Reader/Processor/Writer) • チェックポイント管理 • エラーハンドリング (スキップ/リトライ) • ジョブ実装で Java EE の各種機能が使える
72.
まとめ #3 【ここが嬉しい】 • Java
EE でバッチ処理が注目され始めた • 一定の型に填めてジョブ設計を再利用できる • ジョブに必要な共有機能が享受できる 【もう少しな部分】 • 型に填めにくい / 塡まらない場合もある • 現状は先発のSpring Batchの方が多機能
73.
最後に 既にjBatch対応製品がリリースされています。 OSS製品なので是非まずは試してみてください! OracleとJavaは、Oracle Corporation及びその子会社、関連会社の米国及びその他の国における登録商標です。 文中の社名、商品名等は各社の商標または登録商標である場合があります。 GlassFish4.1
Download