Upload
norito-agetsuma
View
7.144
Download
0
Embed Size (px)
DESCRIPTION
GlassFish_JP 2013#01 のセッション資料です。
Citation preview
Java EE 7から加わるバッチ仕様Batch Applications for the Java Platform - JSR 352
GlassFish_jp 勉強会2013#12013/06/14
@n_agetsuhttp://n-agetsuma.hatenablog.com
GlassFish_jp 勉強会2013#1
自己紹介
上妻 宜人 (あげつま のりと)✗ 電話の裏側を作っている会社で働いています.✗ APサーバなどの社内技術サポートを担当.✗ Java Batch は Public Review あたりから 楽しみながら眺めていました.
GlassFish_jp 勉強会2013#1
バッチってなんだろう?
GlassFish_jp 勉強会2013#1
深夜に起動(非対話型)
ジョブ
計算量が多い
順序制御 並列実行
月次締め処理
銀行勘定システム 在庫管理
GlassFish_jp 勉強会2013#1
深夜に起動(非対話型)
ジョブ
計算量が多い
順序制御 並列実行
月次締め処理
銀行勘定システム 在庫管理
多くの業種にバッチ処理(会計 金融 流通 ...)
GlassFish_jp 勉強会2013#1
深夜に起動(非対話型)
ジョブ
計算量が多い
順序制御 並列実行
月次締め処理
銀行勘定システム 在庫管理業種は違えど、
処理の背景は同じ
GlassFish_jp 勉強会2013#1
深夜に起動(非対話型)
ジョブ
計算量が多い
順序制御 並列実行
月次締め処理
銀行勘定システム 在庫管理
バッチに求められる機能も業種をまたがって同じ
GlassFish_jp 勉強会2013#1
異なる業種が
類似の処理の背景を持って、
同じような機能を作る
GlassFish_jp 勉強会2013#1
D R Y !!!同じことを何度も繰り返すべからず
GlassFish_jp 勉強会2013#1
標準化しよう
スペックリード
http://www.beyondnlptraining.co.uk/wp-content/uploads/2013/03/leadership.jpg
GlassFish_jp 勉強会2013#1
JSR352
Batch Application forThe Java Platform
GlassFish_jp 勉強会2013#1
jbatch は Java EE 7 へ
PortableExtensions
JSP 2.2 JSF 2.2JAX-RS
2.0 EL 3.0
Servlet 3.1
ConcurrencyUtilities for EE
BatchApplications
(JSR 352)
Java API for JSON(JSR-353)
Java API forWebSocket(JSR-355)
JSP2.2 JSP2.2 CDI 1.1
Be
an V
al idat io
n 1.1
Managed Beans 1.0 EJB 3.2
Connector1.0 JPA 2.1 JTA 1.1 JMS 2.0
が Java EE 7 で新たに盛り込まれる仕様
GlassFish_jp 勉強会2013#1
正式な仕様名は(Batch Application for the java Platform)
とても長いので、
GlassFish_jp 勉強会2013#1
ここからは jbatch で.
GlassFish_jp 勉強会2013#1
今日話すこと
✗ jbatch の概要✗ アーキテクチャ
✗ ユーザは何を実装するのか✗ chunk方式の処理の流れ
✗ Spring Batchとの違い✗ Java SE / EE の違い
GlassFish_jp 勉強会2013#1
今日話さないこと✗ 順序遷移の詳細な話
✗ <flow> <split> <decision>
✗ エラーハンドリングの詳細な話✗ <skippable-exception-classes>✗ <retryable-exception-classes>
✗ 並行処理の話✗ Step partitioning✗ 並列実行プラン : <plan partition=”3”>
Java Day Tokyoのセッションで触れている箇所があるため、是非Java Day Tokyoの資料を参照してください。
GlassFish_jp 勉強会2013#1
jbatch の概要
GlassFish_jp 勉強会2013#1
✗ jbatch って何が仕様化されてるの?✗ どんなことができるの?
jbatch 仕様 3つの構成
GlassFish_jp 勉強会2013#1
1. バッチ用語と関連性の定義 (DSL)
JobOperator Job Step
JobRepository
ItemReader
<job id="samplejob"> <step id="step1"/></job>
2. ジョブXMLの定義 3. APIの定義public interface ItemReader { Object readItem(Object item);}
ItemProcessor
ItemWriter
jbatch 仕様 3つの構成
GlassFish_jp 勉強会2013#1
1. バッチ用語と関連性の定義 (DSL)
<job id="samplejob"> <step id="step1"/></job>
2. ジョブXMLの定義 3. APIの定義public interface ItemReader { Object readItem(Object item);}
どのような構成で作るのか(アーキテクチャ定義)
JobOperator Job Step
JobRepository
ItemReader
ItemProcessor
ItemWriter
jbatch 仕様 3つの構成
GlassFish_jp 勉強会2013#1
<job id="samplejob"> <step id="step1"/></job>
2. ジョブXMLの定義 3. APIの定義public interface ItemReader { Object readItem(Object item);}
1. バッチ用語と関連性の定義 (DSL)
JobOperator Job Step
JobRepository
ItemReader
ItemProcessor
ItemWriterアーキテクチャをどうやって実装するか(XML/API 定義)
jbatchの機能1 - 順序制御ジョブXMLで処理の順序を定義することができる
STEP1STEP2-1
Flow1STEP2-2
Decision (分岐)
STEP3-1Sp
lit
Flow
FlowFlow
Split (並行実行)
start
end
GlassFish_jp 勉強会2013#1
Flow (グループ化)
start endcommit
▼
10行処理 障害発生
GlassFish_jp 勉強会2013#1
デフォルトでは10レコードごとにコミットされる
jbatchの機能2 - チェックポイント
commit▼
10行処理… ×
ロールバックは最終コミットまで
途中からでリスタートも可能
jbatch
jbatchの機能3 - エラーハンドリング
GlassFish_jp 勉強会2013#1
壊れたデータをスキップして処理を継続することができる
No msg
001 I love GlassFish4.002 I love Java EE 7.99999999999 Bad Record.004 I love modern framework.
success
jbatch
jbatchの機能3 - エラーハンドリング
GlassFish_jp 勉強会2013#1
壊れたデータをスキップして処理を継続することができる
No msg
001 I love GlassFish4.002 I love Java EE 7.99999999999 Bad Record.004 I love modern framework.
success
jbatch
jbatchの機能3 - エラーハンドリング
GlassFish_jp 勉強会2013#1
壊れたデータをスキップして処理を継続することができる
No msg
001 I love GlassFish4.002 I love Java EE 7.99999999999 Bad Record.004 I love modern framework.
jbatch
jbatchの機能3 - エラーハンドリング
GlassFish_jp 勉強会2013#1
壊れたデータをスキップして処理を継続することができる
No msg
001 I love GlassFish4.002 I love Java EE 7.99999999999 Bad Record.004 I love modern framework.
error
jbatch
jbatchの機能3 - エラーハンドリング
GlassFish_jp 勉強会2013#1
壊れたデータをスキップして処理を継続することができる
No msg
001 I love GlassFish4.002 I love Java EE 7.99999999999 Bad Record.004 I love modern framework.
Skip
jbatch
jbatchの機能3 - エラーハンドリング
GlassFish_jp 勉強会2013#1
壊れたデータをスキップして処理を継続することができる
No msg
001 I love GlassFish4.002 I love Java EE 7.99999999999 Bad Record.004 I love modern framework.
success
success
skip
success
ジョブスケジューラ(cron/JP1/Tivoliなど)
スケジューリング(時刻・周期起動)
実行権限の管理
GlassFish_jp 勉強会2013#1
ジョブスケジューラ と jbatch
ジョブ実行順序管理JP1:ジョブネット
ジョブスケジューラ(cron/JP1/Tivoliなど)
スケジューリング(時刻・周期起動)
ジョブ実行順序管理JP1:ジョブネット
jbatch:ジョブ定義XML
実行権限の管理
GlassFish_jp 勉強会2013#1
ジョブスケジューラ と jbatch
jbatch
ジョブ実装サポート(API/例外制御)
スケジューリング(時刻・周期起動)
実行権限の管理
GlassFish_jp 勉強会2013#1
ジョブスケジューラ と jbatch
jbatch
ジョブ実装サポート(API/例外制御)
jbatchはスケジューリング機能を持っていない。
ジョブ実行順序管理JP1:ジョブネット
jbatch:ジョブ定義XML
ジョブスケジューラ(cron/JP1/Tivoliなど)
スケジューリング(時刻・周期起動)
ジョブ実行順序管理JP1:ジョブネット
jbatch:ジョブ定義XML
実行権限の管理
GlassFish_jp 勉強会2013#1
ジョブスケジューラ と jbatch
jbatch
ジョブ実装サポート(API/例外制御)
被る部分は使い分けを整理する必要がある。
ジョブスケジューラ(cron/JP1/Tivoliなど)
データベース
ファイル(CSV/XML 等)
jbatch の位置付け
GlassFish_jp 勉強会2013#1
Java EE サーバ
ユーザアプリケーション
jbatch
JTACDI
JAX
-RS
2.0
EJB/JPA...
Cron
他のJava EE 仕様と同様にAPIを提供するのが役割
APIの利用
データベース
ファイル(CSV/XML 等)
jbatch を起動する
GlassFish_jp 勉強会2013#1
Java EE サーバ
ユーザアプリケーション
jbatch
JTACDI
JAX
-RS
2.0
EJB/JPA...
Cron
時刻起動
http post http://localhost:8080/batch/job/1
データベース
ファイル(CSV/XML 等)
GlassFish_jp 勉強会2013#1
Java EE サーバ
ユーザアプリケーション
jbatch
JTACDI
JAX
-RS
2.0
EJB/JPA...
Cron
時刻起動
http post http://localhost:8080/batch/jobs/1@Path("/jobs/{jobId}")public class BatchResource { @POST public void start( @PathParam("jobId") String jobId) {
// バッチジョブの起動 JobOperator jobOperator = BatchRuntime.getJobOperator(); jobOperator.start(jobId, null); }}
GlassFish_jp 勉強会2013#1
Java EE のコードから簡単にバッチ起動が可能です。(JAX-RS EJB Servlet 等)
アーキテクチャ
GlassFish_jp 勉強会2013#1
アーキテクチャ
GlassFish_jp 勉強会2013#1
✗ メインフレームのバッチを移行させるため、✗ JCLやCOBOL開発者にも馴染みやすく
JobOperatorStep2
JobRepository
ItemReader
ItemProcessor
ItemWriter
Step1 Step3
Job
batchlet
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperatorStep2
JobRepository
ItemReader
ItemProcessor
ItemWriter
Step1 Step3
Job
batchlet
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperatorStep2
JobRepository
ItemReader ItemProcessor ItemWriter
Step1 Step3
Job<job id="samplejob"> <step id="step1" next="step2" /> <step id="step2" /> <properties> <property name="filePath" value="input.txt"> </properties></job>
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperatorStep2
JobRepository
ItemReader ItemProcessor ItemWriter
Step1 Step3
Job<job id="samplejob"> <step id="step1" next="step2" /> <step id="step2" /> <properties> <property name="filePath" value="input.txt"> </properties></job>
ジョブID. 必須属性. 一意の識別子を設定.JobOperator.start(“samplejob”, null);
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperatorStep2
JobRepository
ItemReader ItemProcessor ItemWriter
Step1 Step3
Job<job id="samplejob"> <step id="step1" next="step2" /> <step id="step2" /> <properties> <property name="filePath" value="input.txt"> </properties></job>
ステップの流れを定義する.最低1つ以上のステップが必要.
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperatorStep2
JobRepository
ItemReader ItemProcessor ItemWriter
Step1 Step3
Job<job id="samplejob"> <step id="step1" next="step2" /> <step id="step2" /> <properties> <property name="filePath" value="input.txt"> </properties></job>
ジョブ全体で使うプロパティ.オプション要素.
Job
JobInstance
JobExecution
*
*
『ファイル取り込み』ジョブ
2013/06/14 に実行する『ファイル取り込み』ジョブ
JobExecution
JobInstance
ジョブインスタンスの考え方✗ スケジュールごとにJobInstanceが生成される✗ 実行ごとにJobExecutionが生成される✗ JobInstanceは再実行に備えて永続化(シリアライズ)
GlassFish_jp 勉強会2013#1
2013/06/14 に実行する『ファイル取り込み』ジョブ の1回目
ジョブインスタンスが永続化される訳✗ 6/14のジョブインスタンスは、6/15に再実行しても、 6/14分のデータにアクセスする。
✗ 対象データが異なる場合は、前日のリスタート分と 当日分のジョブを並行処理させることも可能。
JobInstance
JobExecution
*
JobExecution
6月14日分のジョブ
6/14 1回目の実行(失敗)
再開時も6/14分のデータを処理
実行インスタンスは実行毎に生成
date sales amount
6/14 ¥30,0006/14 ¥25,0006/15 ¥43,000
6/15 6/14分リスタート
売上テーブル
GlassFish_jp 勉強会2013#1
ステップ : ジョブに含まれるタスク✗ 各ステップの処理内容はユーザがコーディングする✗ ステップの実装方法
✗ chunk方式 : reader processor writer を実装✗ batchlet方式 : batchletインタフェース のみ実装
JobOperatorStep2
JobRepository
ItemReader
ItemProcessor
ItemWriter
Step1 Step3
Job
batchlet
GlassFish_jp 勉強会2013#1
STEP ItemReader ItemProcessor ItemWriter
chunk方式 の登場人物
GlassFish_jp 勉強会2013#1
STEP ItemReader ItemProcessor ItemWriter
ItemReader 実装方法
GlassFish_jp 勉強会2013#1
@Namedpublic class MyReader implements ItemReader { @Override public void open(Serializable checkPoint) throws Exception {..}
@Override public Object readItem() throws Exception {..}
@Override public void close() throws Exception {..} ...}
ItemReader ItemProcessor
ItemProcessor 実装方法
GlassFish_jp 勉強会2013#1
@Namedpublic class MyProcessor implements ItemProcessor {
@Override public Object processItem(Object item) throws Exception {..}
}
STEP ItemWriter
ItemWriter
ItemWriter の実装方法
GlassFish_jp 勉強会2013#1
STEP ItemReader ItemProcessor
@Namedpublic class MyWriter implements ItemWriter { @Override public void open(Serializable checkPoint) throws Exception {..}
@Override public Object writeItems(List<Object> items) throws Exception {..}
@Override public void close() throws Exception {..} ...}
STEP ItemReader ItemProcessor ItemWriter
まずはオープンする
GlassFish_jp 勉強会2013#1
open
open
STEP ItemReader ItemProcessor ItemWriter
アイテムを1件読む
GlassFish_jp 勉強会2013#1
open
open
readItemitem
STEP ItemReader ItemProcessor ItemWriter
アイテムを1件処理する
GlassFish_jp 勉強会2013#1
open
open
readItemitem
processItem(item)
result
STEP ItemReader ItemProcessor ItemWriter
次の1件を読みにいく
GlassFish_jp 勉強会2013#1
open
open
readItemitem
processItem(item)
result
readItemitem
STEP ItemReader ItemProcessor ItemWriter
同じく1件処理する
GlassFish_jp 勉強会2013#1
open
open
readItemitem
processItem(item)
result
readItemitem
processItem(item)
result
STEP ItemReader ItemProcessor ItemWriter
chunk処理ではすぐに書き出さない
GlassFish_jp 勉強会2013#1
open
open
readItemitem
processItem(item)
result
readItemitem
processItem(item)
result
1アイテム目の読み込みと処理
2アイテム目の...
デフォルトで10回、読み込みと処理を繰り返す。
STEP ItemReader ItemProcessor ItemWriter
10アイテム目の処理が終わると
GlassFish_jp 勉強会2013#1
readItemitem
processItem(item)
result
10アイテム目の読み込みと処理
STEP ItemReader ItemProcessor ItemWriter
まとめて書き込み処理を行う
GlassFish_jp 勉強会2013#1
readItemitem
processItem(item)
result
writeItems(results)
STEP ItemReader ItemProcessor ItemWriter
chunk方式のゆえん
GlassFish_jp 勉強会2013#1
readItemitem
processItem(item)
result
writeItems(results)
10個ずつ纏めて塊を処理しているので、chunk(塊)方式と呼ばれる。
STEP ItemReader ItemProcessor ItemWriter
書いたらcheckpointを実行
GlassFish_jp 勉強会2013#1
readItemitem
processItem(item)
result
checkpointInfo
Checkpointdata
writeItems(results)
Chunkの書き出しが終わると、コミット前にcheckpointInfoが実行。
checkpointInfo
STEP ItemReader ItemProcessor ItemWriter
checkpointInfoの実装
GlassFish_jp 勉強会2013#1
readItemitem
processItem(item)
result
◀ comit
writeItems(results)
checkpointInfo
Checkpointdata
checkpointInfo
@Namedpublic class MyReader implements ItemReader { @Override public void open(Serializable checkPoint) throws Exception {..}
@Overridepublic Serializable checkpointInfo()
throws Exception { // 読み込んだ行数をチェックポイントにする
return readedCount; // => 10}
}
GlassFish_jp 勉強会2013#1
チェックポイントはリスタート時に使われる。
スタートとリスタートは違う
GlassFish_jp 勉強会2013#1
// バッチジョブの起動JobOperator jobOperator = BatchRuntime.getJobOperator();long jobExecId = jobOperator.start(“myjob”, null);
// ジョブのリスタートlong jobExecId = jobOperator.restart(jobExecId, null);
初回起動時はjob.xmlの<job id=”myjob”> のid文字列を指定する。
スタートとリスタートは違う
GlassFish_jp 勉強会2013#1
// バッチジョブの起動JobOperator jobOperator = BatchRuntime.getJobOperator();long jobExecId = jobOperator.start(“myjob”, null);
// ジョブのリスタートlong jobExecId = jobOperator.restart(jobExecId, null);
リスタートするときは restart で起動する。初回起動時に取得したジョブ実行ID(long)を引数に指定する。
スタートとリスタートは違う
GlassFish_jp 勉強会2013#1
// バッチジョブの起動JobOperator jobOperator = BatchRuntime.getJobOperator();long jobExecId = jobOperator.start(“myjob”, null);
// ジョブのリスタートlong jobExecId = jobOperator.restart(jobExecId, null);
restart で起動すると、open(Serializable cp) にcheckpointInfo()で返された値が渡される。通常のstartでは、nullが常に渡される。
STEP ItemReader ItemProcessor ItemWriter
書いたらcheckpointを実行
GlassFish_jp 勉強会2013#1
readItemitem
processItem(item)
result
checkpointInfo
Checkpointdata
writeItems(results)
checkpointが終わったら、バッチランタイムは commit する。(GlassFish であればJTAトランザクション)
checkpointInfo
◀ comit
STEP ItemReader ItemProcessor ItemWriter
chunk処理終了時の流れ
GlassFish_jp 勉強会2013#1
readItem
読込対象のデータがなくなった!
STEP ItemReader ItemProcessor ItemWriter
chunk処理終了時の流れ
GlassFish_jp 勉強会2013#1
readItem
ItemReaderから null を返す。null
STEP ItemReader ItemProcessor ItemWriter
writeItemsを実行する
GlassFish_jp 勉強会2013#1
readItem
処理済みの分を書き出す。
null
writeItems(results)
STEP ItemReader ItemProcessor ItemWriter
チェックポイントを実行する
GlassFish_jp 勉強会2013#1
readItemnull
writeItems(results)
checkpointInfo
checkpoint
checkpointInfocheckpoint
STEP ItemReader ItemProcessor ItemWriter
トランザクションをコミットする
GlassFish_jp 勉強会2013#1
readItemnull
writeItems(results)
checkpointInfo
checkpoint
checkpointInfocheckpoint
◀ comit
STEP ItemReader ItemProcessor ItemWriter
コミット後は close 処理
GlassFish_jp 勉強会2013#1
◀ comitclose
close
ItemReaderとItemWriterのclose処理してchunk方式のステップは完了。
chunk方式 : job.xml (スキーマ指定削除)
GlassFish_jp 勉強会2013#1
<?xml version="1.0" encoding="UTF-8"?><job xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0" id="job1"> <step> <chunk item-count="100"> <reader ref="myReader"/> <processor ref="myProcessor"/> <writer ref="myWriter"/> </chunk> </step></job>
chunk方式 : chunkタグとオプション
GlassFish_jp 勉強会2013#1
Stepの子要素としてchunkを定義。コミット間隔チューニングは、item-count属性。デフォルトは10。
<?xml version="1.0" encoding="UTF-8"?><job xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0" id="job1"> <step> <chunk item-count="100"> <reader ref="myReader"/> <processor ref="myProcessor"/> <writer ref="myWriter"/> </chunk> </step></job>
chunk方式 : reader/processor/writer
GlassFish_jp 勉強会2013#1
ItemReader ItemProcessor ItemWriter のクラス名の先頭を小文字にして定義する。
<?xml version="1.0" encoding="UTF-8"?><job xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="1.0" id="job1"> <step> <chunk item-count="100"> <reader ref="myReader"/> <processor ref="myProcessor"/> <writer ref="myWriter"/> </chunk> </step></job>
GlassFish_jp 勉強会2013#1
全てのメソッドの実装を強制されると困ります...(open close処理がない など)
F A Q
空実装されたAbstractReaderを継承
GlassFish_jp 勉強会2013#1
public class MyReader extends AbstractItemReader { @Override public Object readItem() throws Exception { // read処理の実装 }}
✗ デフォルト実装は空実装 (何もしない)✗ openやcloseが呼ばれても何もしない
GlassFish_jp 勉強会2013#1
Abstractクラスを使うと、他クラスを継承できないので困る
(POJOが一番嬉しい...)
F A Q
GlassFish_jp 勉強会2013#1
public review まではこんなのもあった!
@Namedpublic class MyItemReader { @ReadItem Object read() throws Exception { // レコード読み取り処理 }}
GlassFish_jp 勉強会2013#1
アノテーションでItemReaderが定義できた
今後盛り込まれることを期待。
process()
ExitStatus
もう1つのStep実装方式 : batchlet
GlassFish_jp 勉強会2013#1
STEP batchlet public class MyBatchlet implements Batchlet { @Override public String process() throws Exception { // 処理をここに実装 }
@Override public void stop() throws Exception { // JobOperator.stop()で強制停止した時の // 処理をここに実装 }}
Stepとbatchletが1対1。非常にシンプルな実装。
<step id="step1"> <batchlet ref="myBatchlet" /></step>
chunkとbatchletの使い分け
GlassFish_jp 勉強会2013#1
✗ Chunk方式✗ バルクオペレーション全般✗ ファイル、DBレコードを1件ずつ処理
✗ batchlet方式✗ コマンド処理全般✗ 他サーバへのファイル転送 (ftpなど)✗ 圧縮 解凍コマンドの実行
JobOperatorStep2
JobRepository
ItemReader
ItemProcessor
ItemWriter
Step1 Step3
Job
batchlet
GlassFish_jp 勉強会2013#1
JobOperator
✗ バッチ処理のコントロール役✗ JobOperator経由でジョブ起動/再起動/停止
GlassFish_jp 勉強会2013#1
JobRepository : 永続化機構
JobOperatorStep2
JobRepository
ItemReader
ItemProcessor
ItemWriter
Step1 Step3
Job
batchlet
✗ ジョブインスタンスやチェックポイント情報を保存✗ 仕様上ではあまり詳細については言及されず✗ Glassfish4 同梱のRIでは組み込みderbyに永続化
アーキテクチャの振り返り
GlassFish_jp 勉強会2013#1
✗ Jobには1つ以上のStepが含まれる✗ JobやStepはXMLで表現する✗ Stepの実装方法は2つある
✗ chunk : 読む/処理/書くを繰り返す処理向き✗ batchlet : コマンド向き
✗ chunk/batchletはjavaで実装する✗ JobOperatorからジョブを起動する✗ JobRepositoryにジョブ情報は永続化される
Spring Batch と jbatch
GlassFish_jp 勉強会2013#1
Spring Batch と jbatch
GlassFish_jp 勉強会2013#1
基本的な作り
jbatch Spring BatchXMLベース
(ジョブXML)XMLベース
(ジョブXML)ユーリティ
クラスの充実現状はなし
(シンプルに標準化) ファイル操作サポートJPA連携サポート
複数サーバ分散処理なし あり
JSR準拠標準仕様(ベンダフリー) 現状は未準拠
Spring Batchがjbatch実装になる?!
GlassFish_jp 勉強会2013#1
✗ Java EEになるべく依存しない気配を感じる✗ 依存するDIコンテナをCDIに限定していない✗ 仕様書上もSpringやGuiceのキーワードあり
✗ 似ているので、Spring Batchは仕様準拠しやすい✗ Expert GroupにVMWare社もいる
現状は、SpringBatchから汎用部分を標準化したのがjbatch
GlassFish_jp 勉強会2013#1
Java Batch 動作環境
GlassFish_jp 勉強会2013#1
対応しているJDK
JDK6 以上(もうサポート切れなので、是非JDK7を)
Java SE 環境と EE環境の違い
GlassFish_jp 勉強会2013#1
トランザクション
Java SE Java EEローカル
トランザクションJTA
トランザクション
必要な設定ファイル
ランタイム実装に依存
ConcurrencyUtilities for JavaEE(コンテナ管理スレッド)
スレッドプール
・ /META-INF/batch-jobs/ job.xml・/META-INF/batch.xml
/META-INF/batch-jobs/job.xml
Java EE 環境で使った方が良いと思います。
GlassFish_jp 勉強会2013#1
もっと jbatch を知る
GlassFish_jp 勉強会2013#1
java.net から情報収集✗ 仕様書を読む
✗ http://jcp.org/aboutJava/communityprocess/final/jsr352/index.html
✗ Java EE 7 チュートリアルを読む✗ http://docs.oracle.com/javaee/7/tutorial/doc/home.htm
✗ GlassFish4 を動かしてみる✗ GlassFish4にはRIが同梱済み✗ Java SEで動かす場合は java.net からダウンロード
https://java.net/projects/jbatch/downloads/download/jsr352-SE-RI-1.0-2013.04.22.zip
GlassFish_jp 勉強会2013#1
書籍で学ぶ
✗ Spring Batchと異なる点もあるので注意✗ batchlet -> tasklet✗ reader をchunkタグの属性で定義<reader> -> reader=”...”
✗ 実装の実践的な例として役立つ本✗ 英語だけど怖くない
GlassFish_jp 勉強会2013#1
サンプルアプリ作ってみたhttps://github.com/n-agetsu/JBatchDemo
GlassFish4 を今すぐダウンロード!ご清聴ありがとうございました。