Submit Search
Upload
JobStreamerではじめるJavaBatchのクラウド分散実行
•
40 likes
•
11,450 views
Yoshitaka Kawashima
Follow
JJUG CCC 2015 Spring F-7のセッションです。
Read less
Read more
Software
Report
Share
Report
Share
1 of 51
Download now
Download to read offline
Recommended
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Norito Agetsuma
JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”
Norito Agetsuma
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
Java web application testing
Java web application testing
Tokuhiro Matsuno
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
Masuji Katoda
Recommended
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Norito Agetsuma
JSR 352 “Batch Applications for the Java Platform”
JSR 352 “Batch Applications for the Java Platform”
Norito Agetsuma
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
Java web application testing
Java web application testing
Tokuhiro Matsuno
プログラミング言語Clojureのニャンパスでの活用事例
プログラミング言語Clojureのニャンパスでの活用事例
sohta
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
Masuji Katoda
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
Tsunenaga Hanyuda
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
Takashi Aoe
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
Y Watanabe
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
spring_raining
Introduction to Spock
Introduction to Spock
Takahiro Sugiura
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Java女子部
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
Gradle handson
Gradle handson
Nemoto Yusuke
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
Gradleどうでしょう
Gradleどうでしょう
Takuma Watabiki
Hello Java
Hello Java
Chihiro Ito
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
賢 秋穂
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
大樹 小倉
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
Yuki Fujisawa
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
Takashi Aoe
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
Droid kaigiプレゼン
Droid kaigiプレゼン
Suguru Oho
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
kyon mm
More Related Content
What's hot
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
Tsunenaga Hanyuda
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
Y Watanabe
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
Takashi Aoe
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
Y Watanabe
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
spring_raining
Introduction to Spock
Introduction to Spock
Takahiro Sugiura
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Java女子部
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
torutk
Gradle handson
Gradle handson
Nemoto Yusuke
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Shunji Konishi
Gradleどうでしょう
Gradleどうでしょう
Takuma Watabiki
Hello Java
Hello Java
Chihiro Ito
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
JustSystems Corporation
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
Yuki Okada
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
賢 秋穂
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
大樹 小倉
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
Yuki Fujisawa
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
Takashi Aoe
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Y Watanabe
What's hot
(20)
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
JavaOne2013報告会 JavaFX Update
JavaOne2013報告会 JavaFX Update
テストゼロからイチに進むための戦略と戦術
テストゼロからイチに進むための戦略と戦術
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
Introduction to Spock
Introduction to Spock
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Spring Bootでチャットツールを作りながらWebの仕組みを理解しよう!
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Jjug ccc 2016 spring i 5 javaデスクトッププログラムを云々
Gradle handson
Gradle handson
Javascriptのあれやこれやをまとめて説明してみる
Javascriptのあれやこれやをまとめて説明してみる
Gradleどうでしょう
Gradleどうでしょう
Hello Java
Hello Java
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
Javaチョットデキルへの道〜JavaコアSDKに見る真似したいコード10選〜
【Camphor ×サイボウズ】selenium勉強会
【Camphor ×サイボウズ】selenium勉強会
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
モダンJavaScript環境構築一歩目
モダンJavaScript環境構築一歩目
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
20150131_jQueryのようにWebテストが書けるGeb Navigator APIの紹介
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
Java Day Tokyo 2013 Java the Night 監視ツールでみるJavaFXとJava EEの魅力
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
JavaでWebサービスを作り続けるための戦略と戦術 JJUG-CCC-2018-Spring-g1
Viewers also liked
Droid kaigiプレゼン
Droid kaigiプレゼン
Suguru Oho
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
kyon mm
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
Takao Sumitomo
データモデルは時空を越える
データモデルは時空を越える
terahide
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Fumihiko Shiroyama
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
Shinobu Okano
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
Shinichi Kozake
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
Takahiro YAMADA
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Yoshitaka Kawashima
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Yuki Anzai
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
YUKI YAMAGUCHI
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
bitter_fox
Viewers also liked
(12)
Droid kaigiプレゼン
Droid kaigiプレゼン
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
出来るチューリング完全!SQLでもいろいろ出来る! #syoboben
開発を効率的に進めるられるまでの道程
開発を効率的に進めるられるまでの道程
データモデルは時空を越える
データモデルは時空を越える
絶対落ちないアプリの作り方
絶対落ちないアプリの作り方
Android学ぶを君へ。生き抜くためのナレッジ共有
Android学ぶを君へ。生き抜くためのナレッジ共有
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
あなたとAndroid 今すぐダウンロード!? Android開発で変わる SIerのJava技術事情について
DB設計でこだわりたい三つの要素
DB設計でこだわりたい三つの要素
イミュータブルデータモデル(世代編)
イミュータブルデータモデル(世代編)
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
Activity, Fragment, CustomView の使い分け - マッチョなActivityにさよならする方法 -
マテリアルデザインを用いたデザインリニューアル [フリル編]
マテリアルデザインを用いたデザインリニューアル [フリル編]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
徹底解説!Project Lambdaのすべて[JJUG CCC 2013 Fall H-2]
Similar to JobStreamerではじめるJavaBatchのクラウド分散実行
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Koichi Sakata
Maven2 プラグイン入門
Maven2 プラグイン入門
guestd4898b
R5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
REST with Spring Boot #jqfk
REST with Spring Boot #jqfk
Toshiaki Maki
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
Yoshiharu Hashimoto
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
HTTPとサーブレット
HTTPとサーブレット
Takashi Makino
Struts2を始めよう!
Struts2を始めよう!
Shinpei Ohtani
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
Toshiaki Maki
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
JustSystems Corporation
はじめてのJPA
はじめてのJPA
kawaba
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
Heap statsfx analyzer
Heap statsfx analyzer
Yasumasa Suenaga
LogicFlow 概要
LogicFlow 概要
Tomoyuki Obi
Quartzでcronを範囲検索したい
Quartzでcronを範囲検索したい
chibochibo
chat bot framework for Java8
chat bot framework for Java8
masahitojp
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2
Yoshi Nagase
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Yoshitaka Kawashima
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
Toshiaki Maki
CLRH_120414_WFTDD
CLRH_120414_WFTDD
Tomoyuki Obi
Similar to JobStreamerではじめるJavaBatchのクラウド分散実行
(20)
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
JJUG CCC 2016 fall バイトコードが君のトモダチになりたがっている
Maven2 プラグイン入門
Maven2 プラグイン入門
R5 3 type annotation
R5 3 type annotation
REST with Spring Boot #jqfk
REST with Spring Boot #jqfk
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
JRoRの力をJava EE技術を使ってさらに高める10の方法(発動編)
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
HTTPとサーブレット
HTTPとサーブレット
Struts2を始めよう!
Struts2を始めよう!
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
どこよりも早い Spring Boot 1.2 解説 #渋谷Java
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
Spring Boot の Web アプリケーションを Docker に載せて AWS ECS で動かしている話
はじめてのJPA
はじめてのJPA
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Heap statsfx analyzer
Heap statsfx analyzer
LogicFlow 概要
LogicFlow 概要
Quartzでcronを範囲検索したい
Quartzでcronを範囲検索したい
chat bot framework for Java8
chat bot framework for Java8
Rablock applicatin dev_guide_v1.2
Rablock applicatin dev_guide_v1.2
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
Javaの進化にともなう運用性の向上はシステム設計にどういう変化をもたらすのか
続・Twitter bootstrap入門 #html5j
続・Twitter bootstrap入門 #html5j
CLRH_120414_WFTDD
CLRH_120414_WFTDD
More from Yoshitaka Kawashima
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Yoshitaka Kawashima
Are Design Patterns Dead?
Are Design Patterns Dead?
Yoshitaka Kawashima
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
Yoshitaka Kawashima
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Yoshitaka Kawashima
Tackling Complexity
Tackling Complexity
Yoshitaka Kawashima
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
Yoshitaka Kawashima
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
Yoshitaka Kawashima
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
Yoshitaka Kawashima
本番障害に至る病
本番障害に至る病
Yoshitaka Kawashima
システムダウンのひみつ
システムダウンのひみつ
Yoshitaka Kawashima
Mavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
アンチフラジャイルの世界
アンチフラジャイルの世界
Yoshitaka Kawashima
Atomic Architecture
Atomic Architecture
Yoshitaka Kawashima
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
Yoshitaka Kawashima
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
Yoshitaka Kawashima
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
Yoshitaka Kawashima
How to find tech books
How to find tech books
Yoshitaka Kawashima
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
Yoshitaka Kawashima
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
Yoshitaka Kawashima
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
Yoshitaka Kawashima
More from Yoshitaka Kawashima
(20)
ブルックスのいう銀の弾丸とは何か?
ブルックスのいう銀の弾丸とは何か?
Are Design Patterns Dead?
Are Design Patterns Dead?
強いて言えば「集約どう実装するのかな、を考える」な話
強いて言えば「集約どう実装するのかな、を考える」な話
ソフトウェアにおける 複雑さとは何なのか?
ソフトウェアにおける 複雑さとは何なのか?
Tackling Complexity
Tackling Complexity
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
ソフトウェア開発における『知の高速道路』
ソフトウェア開発における『知の高速道路』
ソフトウェア設計における 意思決定とそのレビューの秘訣
ソフトウェア設計における 意思決定とそのレビューの秘訣
本番障害に至る病
本番障害に至る病
システムダウンのひみつ
システムダウンのひみつ
Mavenの真実とウソ
Mavenの真実とウソ
アンチフラジャイルの世界
アンチフラジャイルの世界
Atomic Architecture
Atomic Architecture
それはYAGNIか? それとも思考停止か?
それはYAGNIか? それとも思考停止か?
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
思考停止しないアーキテクチャ設計 ➖ JJUG CCC 2018 Fall
ウォーターフォールとアジャイルのフェアな比較
ウォーターフォールとアジャイルのフェアな比較
How to find tech books
How to find tech books
Antifragile Java - Java Day Tokyo 2017 D1-E1
Antifragile Java - Java Day Tokyo 2017 D1-E1
たとえ日本人同士でも必要な異文化理解力
たとえ日本人同士でも必要な異文化理解力
SIerにとっての越境 @ DevLOVE 199
SIerにとっての越境 @ DevLOVE 199
JobStreamerではじめるJavaBatchのクラウド分散実行
1.
JobStreamerではじめる JavaBatchのクラウド分散実行 kawasima 川島義隆 JJUG CCC 2015
Spring F-7 kawasima
2.
https://github.com/kawasima/ http://twitter.com/kawasima/ http://www.slideshare.net/kawasima/ http://qiita.com/kawasima/ Javaな場でしゃべるのは 初めてなので、 お手柔らかにお願いします!
3.
JavaBatchを 始めてみよう
4.
JSR352 JavaBatchとは Job JobInstance Step Batchlet Chunk ItemReader ItemProcessor ItemWriter JobExecution StepExecution 実装するコンポーネント XMLで定義する ジョブ実行をあらわすコンポーネント *1 1 0..1 0..1
5.
JSR352 JavaBatchのはじめ方 ①Batchlet または
ItemReader / ItemProcessor / ItemWriterを実装する。 ②batch-jobs.xmlを書く。 ③起動するプログラムを書く。
6.
Batchletを実装する @Named public class MyBatchlet
extends AbstractBatchlet { @Inject JobContext jobContext; private Properties jobProperties; @Override public String process() throws Exception { jobProperties = jobContext.getProperties(); String value1 = jobProperties.getProperty("jobProp1"); // ... return "Processed"; } } 基本的にはこの1メソッド を実装するだけ まぁ簡単
7.
batch-jobs.xml <job id="jasperReportsTest" xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0"> <step
id="step1"> <batchlet ref="jasperReportsBatchlet"> <properties> <property name="resource" value="movies-2012.csv"/> <property name="useFirstRowAsHeader" value="true"/> <!-- n as record/row delimiter --> <property name="recordDelimiter" value="
"/> <property name="charset" value="UTF-8"/> <property name="template" value="movies.jasper"/> <property name="outputType" value="pdf"/> <property name="outputFile" value="#{systemProperties['java.io.tmpdir']}/report.pdf"/> <property name="reportParameters" value="#{jobParameters['reportParameters']}"/> </properties> </batchlet> </step> </job> It's so easy!!!!...?
8.
起動プログラム ExcelにジョブのIDをかくじゃろ ( ^ω^) ⊃ ⊂ というストーリーがみえる これをこうして… (
^ω^) ≡⊃⊂≡ こうじゃ ( ^ω^) ⊃ ⊂
9.
JSR352 JavaBatchを始めると… ①Batchlet または
ItemReader / ItemProcessor / ItemWriterを実装する。 ②batch-jobs.xmlを書く。 ③起動する。 ツライ… くやしい… でも…ジェネレータ作っちゃう!
10.
ジョブの組み立てをもっと簡単に! ジョブの起動をもっと簡単に!
11.
バッチコンテナの運用 ● 常駐コンテナで動かすことのメリット – 小さなジョブがたくさん動いても、JVM起動のオーバ ヘッドがない。 ●
常駐サーバで複数ジョブ動かすことへの漠然とし た不安 – サーバが死んだときのリカバリは? – 特定のジョブが別の重いジョブに影響を与えるのは避 けたい?
12.
Disposable batch containers ジョブの実行環境は、リソース専有することな く、使い捨てできるとよい。 –
空いてるサーバに優先的にディスパッチ – 複数のバッチサーバがいて、1台死んでも簡単に フェイルオーバーできるといいなぁ でも、バッチアプリのデプロイが面倒そうだ
13.
ジョブの実行環境をDistributedに! Deployの手間はゼロに!
14.
ジョブスケジューラにまつわる思い出 • 動いちゃいけないのに、動いてしまった。 • 日付を間違えて登録して、起動しなかった。 •
GUIから漂う昭和感。
15.
ジョブがいつ動くかをもっと分かりやすく! できればもっとモダンに!
16.
なので つくってみた https://github.com/job-streamer (EPLライセンス)
17.
JobStreamerが変える世界 できるようになること 不要になるもの 管理コンソール上でのGUIによる ジョブ組み立て ジョブ XML REST
APIによるジョブの起動 ジョブ起動用のJavaアプリ スケジュール実行 JP1のようなスケジューラ シンプルな分散実行 バッチサーバのフェイルオーバー設計 エージェントへを起動するだけでジョブが動く、 ノーデプロイ・ノーコンフィギュレーション環境 VagrantやDockerなどによるバッチサーバの設 定やデプロイの自動化 エージェントの稼働状況モニタリング ZABBIXなどによるバッチサーバの監視 リアルタイムなログ収集 fluentdなどによるログの収集 すべてがS式になる Emacs以外の環境
18.
JobStreamerの構成 管理コンソール Jobの定義 Jobの実行ログ コントロールバス JavaBatchコンポーネント ● Batchlet ● ItemReader ●
ItemProcessor ● ItemWriter Load class ● ジョブの登録/編集/削除 ● スケジューリング ● ジョブの実行 ● 実行結果の確認 ジョブの実行リクエスト ● Load class ● 実行状態の送信 ● サーバ負荷状態の送信 実行エージェント Datomic No deploy, no configuration
19.
コントロールバス ● ジョブの登録やジョブのディスパッチなどを司 る。 – ジョブの登録/編集/削除 – ジョブのスケジューリング –
ジョブのディスパッチ/実行結果・ログの収集 – エージェントのモニタリング ● REST APIですべての操作が可能。
20.
管理コンソール ● コントロールバスのWebインタフェース – ジョブのGUI組み立て – 実行ログの閲覧 –
ジョブのタイムライン表示 ● Single page applicationでサクサク動く!
21.
エージェント ● 実際にジョブが実行されるサーバ ● REST APIですべての操作が可能。 ● 実装はJBossのJberet – クラスローダをWebSocketClassLoaderに入れ替えて 使う。 ● Dockerfileもついてるので、docker
runして使う ことも可能。
22.
Datomic (おまけ) ● Jobの定義や実行ログなどは、すべてDatomic に格納される。 ● SPoFのコントローラバスからのみ繋ぐので、 Freeライセンスでも本番運用可能。 http://www.datomic.com/
23.
Datomicとは... 今をときめくAppend-onlyなデータベース – ストレージ(としてのDB) は別に選択できる。 ● Dynamo DB ● Infinispan ● Mysql などなど
24.
Why Datomic? Clojureから自然な形でクエリが書ける。 ※ クエリはDatalogという論理プログラミングの伝統的な記法
25.
Demo
26.
Jobの実行状況をみる(一覧)
27.
Jobの実行状況をみる(タイムライン)
28.
アプリケーションを登録する 専用のMavenプラグインがあります % mvn job-streamer:deploy
29.
Jobを新規登録する
30.
Jobの詳細をみる
31.
Jobをスケジューリングする
32.
実行履歴とログをみる
33.
エージェントをみる
34.
エージェントをモニタリングする
35.
例) CSVをJPAでOracleにロードする
36.
例) シェルスクリプトを動かす シェルスクリプトをクラスパスに入れておき… こんなジョブを流す エージェントで実行され、STDINがログとして記録される
37.
Architecture
38.
WebSocketClassLoader クラスロードをWebSocket経由でリモートからよぶ。 リソースファイルもロード可能。 https://github.com/kawasima/websocket-classloader/ Maven Centralにおいてあるので、 お気軽にお試しください
39.
WebSocketClassLoaderのしくみ WebSocketClassLoaderClassProvider WebSocket Handshake /
Connect LoadClass request Class binary format Encoded by fressian JSR356準拠で動くので、dependenciesは0 (EEサーバ以外で動かすには、Undertowなどにデプロイする) JSR356のServerEndpointを 実装している。 JSR356のClientEndpointを 使ってloadClassリクエストを 送る。 ローカルキャッシュに最新の クラスがあればそっちを使う。
40.
JberetでのClassLoaderの置き換え BatchSEEnvironmentクラスにて... こんな実装になっちゃっているので、 WebSocketClassLoaderを返すように置き換え ている。
41.
Jobが実行されるまでの流れ
42.
Full clojure ①サーバ実装 →
liberator ②Javascript → Clojurescript →Om (React layer) ③ Stylesheet → garden ④ SQL → datalog すべてがS式に!
43.
om ReactをClojurescriptから使うことができる。 Circle CIのUIはomで作られています。 (https://github.com/circleci/frontend) https://github.com/omcljs/om
44.
liberator APIを宣言的に書くことができる。
45.
liberatorのデシジョングラフ どこを、どう通ってレスポンスを返したか、 リクエストごとに表示される
46.
サーバ間WebSocket(JSR356) Agentの状態の変化をリアルタイムにControl Busが受け取るために、WebSocketを使って通知 JSR356の仕様としてClientもあるので、実装は 非常に簡単。
47.
ログのリアルタイム書き込み (WebSocketAppender) logbackのアペンダとしてセットし、ログを WebSocket経由でログサーバにリアルタイムで 送る。 https://github.com/kawasima/logback-websocket-appender/ これもMaven Centralにおいてあるので、よろしければ どうぞお使いください
48.
RRD4J Agentのリソースモニタリングは、RRDToolの JavaクローンのRRD4Jを使うと簡単にPure Javaでグラフが書ける。 (https://github.com/rrd4j/rrd4j)
49.
今後の予定 ● SplitやDecisionなどのJSR352のフルサポート ● マルチプロジェクトのサポート ● 異常時の通知の仕組み実装 ● ファイル到着トリガやDBステータス変更トリ ガのサポート ● スケジュール登録機能の強化(ウィザードや営 業日カレンダーの登録など)
50.
まとめ ● JavaBatchに対する不満もJobStreamerを使 えば解消するよ ● No deploy, No
configurationなので、簡単に 分散実行できちゃうよ ● なによりJavaBatchを気軽に試せるよ
51.
みなさまの(or User Developer)としての ご参加を心よりお待ちしております! github.com/job-streamer
Download now