SlideShare a Scribd company logo
1 of 97
Download to read offline
Java EE 7から加わるバッチ仕様
Batch Applications for
the Java Platform - JSR 352
GlassFish_jp 勉強会2013#1
2013/06/14
@n_agetsu
http://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 for
The Java Platform
GlassFish_jp 勉強会2013#1
jbatch は Java EE 7 へ
Portable
Extensions
JSP 2.2 JSF 2.2
JAX-RS
2.0
EL 3.0
Servlet 3.1
Concurrency
Utilities for EE
Batch
Applications
(JSR 352)
Java API for JSON
(JSR-353)
Java API for
WebSocket
(JSR-355)
JSP2.2 JSP2.2 CDI 1.1
BeanValidation1.1
Managed Beans 1.0 EJB 3.2
Connector
1.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で処理の順序を定義することができる
STEP1
STEP2-1
Flow1
STEP2-2
Decision (分岐)
STEP3-1
Split
Flow
Flow
Flow
Split (並行実行)
start
end
GlassFish_jp 勉強会2013#1
Flow (グループ化)
start end
commit
▼
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.
999999
99999
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.
999999
99999
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.
999999
99999
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.
999999
99999
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.
999999
99999
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.
999999
99999
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-RS2.0
EJB/JPA...
Cron
他のJava EE 仕様と同様にAPIを提供するのが役割
APIの利用
データベース
ファイル
(CSV/XML 等)
jbatch を起動する
GlassFish_jp 勉強会2013#1
Java EE サーバ
ユーザアプリケーション
jbatch
JTACDI
JAX-RS2.0
EJB/JPA...
Cron
時刻起動
http post http://localhost:8080/batch/job/1
データベース
ファイル
(CSV/XML 等)
GlassFish_jp 勉強会2013#1
Java EE サーバ
ユーザアプリケーション
jbatch
JTACDI
JAX-RS2.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開発者にも馴染みやすく
JobOperator
Step2
JobRepository
Item
Reader
Item
Processor
Item
Writer
Step1 Step3
Job
batchlet
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成
✗ ステップ全体に関わる設定はジョブに設定
✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperator
Step2
JobRepository
Item
Reader
Item
Processor
Item
Writer
Step1 Step3
Job
batchlet
ジョブ : トップレベル要素
GlassFish_jp 勉強会2013#1
✗ ジョブは1つ以上のステップから構成
✗ ステップ全体に関わる設定はジョブに設定
✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperator
Step2
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つ以上のステップから構成
✗ ステップ全体に関わる設定はジョブに設定
✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperator
Step2
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つ以上のステップから構成
✗ ステップ全体に関わる設定はジョブに設定
✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperator
Step2
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つ以上のステップから構成
✗ ステップ全体に関わる設定はジョブに設定
✗ リスタート可能かどうか? ジョブ設定プロパティ 等
JobOperator
Step2
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,000
6/14 ¥25,000
6/15 ¥43,000
6/15 6/14分リスタート
売上テーブル
GlassFish_jp 勉強会2013#1
ステップ : ジョブに含まれるタスク
✗ 各ステップの処理内容はユーザがコーディングする
✗ ステップの実装方法
✗ chunk方式 : reader processor writer を実装
✗ batchlet方式 : batchletインタフェース のみ実装
JobOperator
Step2
JobRepository
Item
Reader
Item
Processor
Item
Writer
Step1 Step3
Job
batchlet
GlassFish_jp 勉強会2013#1
STEP ItemReader Item
Processor ItemWriter
chunk方式 の登場人物
GlassFish_jp 勉強会2013#1
STEP ItemReader Item
Processor ItemWriter
ItemReader 実装方法
GlassFish_jp 勉強会2013#1
@Named
public 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 Item
Processor
ItemProcessor 実装方法
GlassFish_jp 勉強会2013#1
@Named
public class MyProcessor implements ItemProcessor {
@Override
public Object processItem(Object item)
throws Exception {..}
}
STEP ItemWriter
ItemWriter
ItemWriter の実装方法
GlassFish_jp 勉強会2013#1
STEP ItemReader Item
Processor
@Named
public 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 Item
Processor ItemWriter
まずはオープンする
GlassFish_jp 勉強会2013#1
open
open
STEP ItemReader Item
Processor ItemWriter
アイテムを1件読む
GlassFish_jp 勉強会2013#1
open
open
readItem
item
STEP ItemReader Item
Processor ItemWriter
アイテムを1件処理する
GlassFish_jp 勉強会2013#1
open
open
readItem
item
processItem(item)
result
STEP ItemReader Item
Processor ItemWriter
次の1件を読みにいく
GlassFish_jp 勉強会2013#1
open
open
readItem
item
processItem(item)
result
readItem
item
STEP ItemReader Item
Processor ItemWriter
同じく1件処理する
GlassFish_jp 勉強会2013#1
open
open
readItem
item
processItem(item)
result
readItem
item
processItem(item)
result
STEP ItemReader Item
Processor ItemWriter
chunk処理ではすぐに書き出さない
GlassFish_jp 勉強会2013#1
open
open
readItem
item
processItem(item)
result
readItem
item
processItem(item)
result
1アイテム目の
読み込みと処理
2アイテム目の
...
デフォルトで10回、
読み込みと処理を繰り返す。
STEP ItemReader Item
Processor ItemWriter
10アイテム目の処理が終わると
GlassFish_jp 勉強会2013#1
readItem
item
processItem(item)
result
10アイテム目の
読み込みと処理
STEP ItemReader Item
Processor ItemWriter
まとめて書き込み処理を行う
GlassFish_jp 勉強会2013#1
readItem
item
processItem(item)
result
writeItems(results)
STEP ItemReader Item
Processor ItemWriter
chunk方式のゆえん
GlassFish_jp 勉強会2013#1
readItem
item
processItem(item)
result
writeItems(results)
10個ずつ纏めて塊を処理しているので、
chunk(塊)方式と呼ばれる。
STEP ItemReader Item
Processor ItemWriter
書いたらcheckpointを実行
GlassFish_jp 勉強会2013#1
readItem
item
processItem(item)
result
checkpointInfo
Checkpoint
data
writeItems(results)
Chunkの書き出しが終わると、
コミット前にcheckpointInfoが実行。
checkpointInfo
STEP ItemReader Item
Processor ItemWriter
checkpointInfoの実装
GlassFish_jp 勉強会2013#1
readItem
item
processItem(item)
result
◀ comit
writeItems(results)
checkpointInfo
Checkpoint
data
checkpointInfo
@Named
public class MyReader implements ItemReader {
@Override
public void open(Serializable checkPoint)
throws Exception {..}
@Override
public 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 Item
Processor ItemWriter
書いたらcheckpointを実行
GlassFish_jp 勉強会2013#1
readItem
item
processItem(item)
result
checkpointInfo
Checkpoint
data
writeItems(results)
checkpointが終わったら、
バッチランタイムは commit する。
(GlassFish であればJTAトランザクション)
checkpointInfo
◀ comit
STEP ItemReader Item
Processor ItemWriter
chunk処理終了時の流れ
GlassFish_jp 勉強会2013#1
readItem
読込対象のデータがなくなった!
STEP ItemReader Item
Processor ItemWriter
chunk処理終了時の流れ
GlassFish_jp 勉強会2013#1
readItem
ItemReaderから null を返す。null
STEP ItemReader Item
Processor ItemWriter
writeItemsを実行する
GlassFish_jp 勉強会2013#1
readItem
処理済みの分を書き出す。
null
writeItems(results)
STEP ItemReader Item
Processor ItemWriter
チェックポイントを実行する
GlassFish_jp 勉強会2013#1
readItem
null
writeItems(results)
checkpointInfo
checkpoint
checkpointInfo
checkpoint
STEP ItemReader Item
Processor ItemWriter
トランザクションをコミットする
GlassFish_jp 勉強会2013#1
readItem
null
writeItems(results)
checkpointInfo
checkpoint
checkpointInfo
checkpoint
◀ comit
STEP ItemReader Item
Processor ItemWriter
コミット後は close 処理
GlassFish_jp 勉強会2013#1
◀ comit
close
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 までは
こんなのもあった!
@Named
public 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など)
✗ 圧縮 解凍コマンドの実行
JobOperator
Step2
JobRepository
Item
Reader
Item
Processor
Item
Writer
Step1 Step3
Job
batchlet
GlassFish_jp 勉強会2013#1
JobOperator
✗ バッチ処理のコントロール役
✗ JobOperator経由でジョブ起動/再起動/停止
GlassFish_jp 勉強会2013#1
JobRepository : 永続化機構
JobOperator
Step2
JobRepository
Item
Reader
Item
Processor
Item
Writer
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 Batch
XMLベース
(ジョブ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
トランザクション
必要な
設定ファイル
ランタイム実装に
依存
Concurrency
Utilities 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 を今すぐダウンロード!
ご清聴ありがとうございました。

More Related Content

What's hot

なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?ichirin2501
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!yoshikawa_t
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVMHiroshi Maekawa
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM LoggingYuji Kubota
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)NTT DATA Technology & Innovation
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Norito Agetsuma
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックYoshio Hanawa
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriYuta Okamoto
 
その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・KLab Inc. / Tech
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術Kiyokuni Kawachiya
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ信之 岩永
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みChihiro Ito
 
UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015
UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015 UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015
UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015 Sociomedia
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪Takuto Wada
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsYoshifumi Kawai
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードShigenori Sagawa
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークke-m kamekoopa
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxShota Shinogi
 

What's hot (20)

なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!Chrome Developer Toolsを使いこなそう!
Chrome Developer Toolsを使いこなそう!
 
塹壕よりLivetとMVVM
塹壕よりLivetとMVVM塹壕よりLivetとMVVM
塹壕よりLivetとMVVM
 
Unified JVM Logging
Unified JVM LoggingUnified JVM Logging
Unified JVM Logging
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
バイトコードって言葉をよく目にするけど一体何なんだろう?(JJUG CCC 2022 Spring 発表資料)
 
Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2Javaトラブルに備えよう #jjug_ccc #ccc_h2
Javaトラブルに備えよう #jjug_ccc #ccc_h2
 
PHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニックPHP7の内部実装から学ぶ性能改善テクニック
PHP7の内部実装から学ぶ性能改善テクニック
 
なぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuriなぜリアクティブは重要か #ScalaMatsuri
なぜリアクティブは重要か #ScalaMatsuri
 
その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・その素敵なUI基盤を目指して・・・
その素敵なUI基盤を目指して・・・
 
Java仮想マシンの実装技術
Java仮想マシンの実装技術Java仮想マシンの実装技術
Java仮想マシンの実装技術
 
async/await のしくみ
async/await のしくみasync/await のしくみ
async/await のしくみ
 
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組みJavaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
 
UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015
UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015 UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015
UXとデザインまとめ by 上野学 - presentation from UX まとめ 2015
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
C#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive ExtensionsC#次世代非同期処理概観 - Task vs Reactive Extensions
C#次世代非同期処理概観 - Task vs Reactive Extensions
 
プログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコードプログラムの処方箋~健康なコードと病んだコード
プログラムの処方箋~健康なコードと病んだコード
 
SQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォークSQLアンチパターン - ジェイウォーク
SQLアンチパターン - ジェイウォーク
 
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptxネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
ネットストーカー御用達OSINTツールBlackBirdを触ってみた.pptx
 

Viewers also liked

ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月Taku Miyakawa
 
Lambda: A Peek Under The Hood - Brian Goetz
Lambda: A Peek Under The Hood - Brian GoetzLambda: A Peek Under The Hood - Brian Goetz
Lambda: A Peek Under The Hood - Brian GoetzJAX London
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Norito Agetsuma
 
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要Java 7 invokedynamic の概要
Java 7 invokedynamic の概要Taku Miyakawa
 
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjpJSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjpToshiaki Maki
 

Viewers also liked (6)

Project Lambdaの基礎
Project Lambdaの基礎Project Lambdaの基礎
Project Lambdaの基礎
 
ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月ラムダと invokedynamic の蜜月
ラムダと invokedynamic の蜜月
 
Lambda: A Peek Under The Hood - Brian Goetz
Lambda: A Peek Under The Hood - Brian GoetzLambda: A Peek Under The Hood - Brian Goetz
Lambda: A Peek Under The Hood - Brian Goetz
 
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点) Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
 
Java 7 invokedynamic の概要
Java 7 invokedynamic の概要Java 7 invokedynamic の概要
Java 7 invokedynamic の概要
 
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjpJSFとJAX-RSで作る Thin Server Architecture #glassfishjp
JSFとJAX-RSで作る Thin Server Architecture #glassfishjp
 

Similar to JSR 352 “Batch Applications for the Java Platform”

Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 OSSラボ株式会社
 
Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語
Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語
Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語Takashi Someda
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624Yusuke Suzuki
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!IIJ
 
20120421中国gtug
20120421中国gtug20120421中国gtug
20120421中国gtugYusuke Sato
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話Hisateru Tanaka
 
運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用真治 米田
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...SwapSkills
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門guestd4898b
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Tokuhiro Matsuno
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotationEIICHI KIMURA
 
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
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオンkyon mm
 
事例紹介「なうまぴおん」
事例紹介「なうまぴおん」事例紹介「なうまぴおん」
事例紹介「なうまぴおん」Eiji Iwazawa
 
React Native performance optimization
React Native performance optimizationReact Native performance optimization
React Native performance optimizationTakahiko Wada
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacksHiro Yoshioka
 

Similar to JSR 352 “Batch Applications for the Java Platform” (20)

Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例 Jtf13 ossジョブ管理システムによる運用自動化事例
Jtf13 ossジョブ管理システムによる運用自動化事例
 
Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語
Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語
Backlog、Cacoo にみるAWS運用の勘所 - JAWS UG 三都物語
 
企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624企業におけるSpring@日本springユーザー会20090624
企業におけるSpring@日本springユーザー会20090624
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!
 
20120421中国gtug
20120421中国gtug20120421中国gtug
20120421中国gtug
 
関西Php勉強会のlimeの話
関西Php勉強会のlimeの話関西Php勉強会のlimeの話
関西Php勉強会のlimeの話
 
運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用運用の現場での監視運用ツールの活用
運用の現場での監視運用ツールの活用
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
HTML5を使うためのプログレッシブエンハンスメント 〜すべての人に確実に情報を届けるために〜SwapSkillsFreeEventProgressiv...
 
Maven2 プラグイン入門
Maven2 プラグイン入門Maven2 プラグイン入門
Maven2 プラグイン入門
 
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
R5 3 type annotation
R5 3 type annotationR5 3 type annotation
R5 3 type annotation
 
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 -
 
#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン#STAC2014 システムテスト自動化ハンズオン
#STAC2014 システムテスト自動化ハンズオン
 
事例紹介「なうまぴおん」
事例紹介「なうまぴおん」事例紹介「なうまぴおん」
事例紹介「なうまぴおん」
 
React Native performance optimization
React Native performance optimizationReact Native performance optimization
React Native performance optimization
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
Heap statsfx analyzer
Heap statsfx analyzerHeap statsfx analyzer
Heap statsfx analyzer
 
Programming camp 2010 debug hacks
Programming camp 2010 debug hacksProgramming camp 2010 debug hacks
Programming camp 2010 debug hacks
 

More from Norito Agetsuma

Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileJava EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileNorito Agetsuma
 
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cNorito Agetsuma
 
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpNorito Agetsuma
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaNorito Agetsuma
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Norito Agetsuma
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようNorito Agetsuma
 
AeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュAeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュNorito Agetsuma
 
プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメプロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメNorito Agetsuma
 
SQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメSQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメNorito Agetsuma
 
Lt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdiLt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdiNorito Agetsuma
 

More from Norito Agetsuma (12)

Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 
Java EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfileJava EEを補完する仕様 MicroProfile
Java EEを補完する仕様 MicroProfile
 
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4cCDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
 
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jpJavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
Java EE8 Report
Java EE8 ReportJava EE8 Report
Java EE8 Report
 
Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御Unixカーネルの設計 7 プロセスの制御
Unixカーネルの設計 7 プロセスの制御
 
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめようJJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
 
AeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュAeroGear & Java EE 7 で簡単プッシュ
AeroGear & Java EE 7 で簡単プッシュ
 
プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメプロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
 
SQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメSQLアンチパターン読書会 レジュメ
SQLアンチパターン読書会 レジュメ
 
Lt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdiLt agetsuma 拡大するcdi
Lt agetsuma 拡大するcdi
 

JSR 352 “Batch Applications for the Java Platform”