Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

JSR 352 “Batch Applications for the Java Platform”

12,083 views

Published on

GlassFish_JP 2013#01 のセッション資料です。

  • Be the first to comment

JSR 352 “Batch Applications for the Java Platform”

  1. 1. Java EE 7から加わるバッチ仕様Batch Applications forthe Java Platform - JSR 352GlassFish_jp 勉強会2013#12013/06/14@n_agetsuhttp://n-agetsuma.hatenablog.com
  2. 2. GlassFish_jp 勉強会2013#1自己紹介上妻 宜人 (あげつま のりと)✗ 電話の裏側を作っている会社で働いています.✗ APサーバなどの社内技術サポートを担当.✗ Java Batch は Public Review あたりから楽しみながら眺めていました.
  3. 3. GlassFish_jp 勉強会2013#1バッチってなんだろう?
  4. 4. GlassFish_jp 勉強会2013#1深夜に起動(非対話型)ジョブ計算量が多い順序制御 並列実行月次締め処理銀行勘定システム 在庫管理
  5. 5. GlassFish_jp 勉強会2013#1深夜に起動(非対話型)ジョブ計算量が多い順序制御 並列実行月次締め処理銀行勘定システム 在庫管理多くの業種にバッチ処理(会計 金融 流通 ...)
  6. 6. GlassFish_jp 勉強会2013#1深夜に起動(非対話型)ジョブ計算量が多い順序制御 並列実行月次締め処理銀行勘定システム 在庫管理業種は違えど、処理の背景は同じ
  7. 7. GlassFish_jp 勉強会2013#1深夜に起動(非対話型)ジョブ計算量が多い順序制御 並列実行月次締め処理銀行勘定システム 在庫管理バッチに求められる機能も業種をまたがって同じ
  8. 8. GlassFish_jp 勉強会2013#1異なる業種が類似の処理の背景を持って、同じような機能を作る
  9. 9. GlassFish_jp 勉強会2013#1D R Y !!!同じことを何度も繰り返すべからず
  10. 10. GlassFish_jp 勉強会2013#1標準化しようスペックリードhttp://www.beyondnlptraining.co.uk/wp-content/uploads/2013/03/leadership.jpg
  11. 11. GlassFish_jp 勉強会2013#1JSR352Batch Application forThe Java Platform
  12. 12. GlassFish_jp 勉強会2013#1jbatch は Java EE 7 へPortableExtensionsJSP 2.2 JSF 2.2JAX-RS2.0EL 3.0Servlet 3.1ConcurrencyUtilities for EEBatchApplications(JSR 352)Java API for JSON(JSR-353)Java API forWebSocket(JSR-355)JSP2.2 JSP2.2 CDI 1.1BeanValidation1.1Managed Beans 1.0 EJB 3.2Connector1.0JPA 2.1 JTA 1.1 JMS 2.0が Java EE 7 で新たに盛り込まれる仕様
  13. 13. GlassFish_jp 勉強会2013#1正式な仕様名は(Batch Application for the java Platform)とても長いので、
  14. 14. GlassFish_jp 勉強会2013#1ここからは jbatch で.
  15. 15. GlassFish_jp 勉強会2013#1今日話すこと✗ jbatch の概要✗ アーキテクチャ✗ ユーザは何を実装するのか✗ chunk方式の処理の流れ✗ Spring Batchとの違い✗ Java SE / EE の違い
  16. 16. GlassFish_jp 勉強会2013#1今日話さないこと✗ 順序遷移の詳細な話✗ <flow> <split> <decision>✗ エラーハンドリングの詳細な話✗ <skippable-exception-classes>✗ <retryable-exception-classes>✗ 並行処理の話✗ Step partitioning✗ 並列実行プラン : <plan partition=”3”>Java Day Tokyoのセッションで触れている箇所があるため、是非Java Day Tokyoの資料を参照してください。
  17. 17. GlassFish_jp 勉強会2013#1jbatch の概要
  18. 18. GlassFish_jp 勉強会2013#1✗ jbatch って何が仕様化されてるの?✗ どんなことができるの?
  19. 19. jbatch 仕様 3つの構成GlassFish_jp 勉強会2013#11. バッチ用語と関連性の定義 (DSL)JobOperator Job StepJobRepositoryItemReader<job id="samplejob"><step id="step1"/></job>2. ジョブXMLの定義 3. APIの定義public interface ItemReader {Object readItem(Object item);}ItemProcessorItemWriter
  20. 20. jbatch 仕様 3つの構成GlassFish_jp 勉強会2013#11. バッチ用語と関連性の定義 (DSL)<job id="samplejob"><step id="step1"/></job>2. ジョブXMLの定義 3. APIの定義public interface ItemReader {Object readItem(Object item);}どのような構成で作るのか(アーキテクチャ定義)JobOperator Job StepJobRepositoryItemReaderItemProcessorItemWriter
  21. 21. 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 StepJobRepositoryItemReaderItemProcessorItemWriterアーキテクチャをどうやって実装するか(XML/API 定義)
  22. 22. jbatchの機能1 - 順序制御ジョブXMLで処理の順序を定義することができるSTEP1STEP2-1Flow1STEP2-2Decision (分岐)STEP3-1SplitFlowFlowFlowSplit (並行実行)startendGlassFish_jp 勉強会2013#1Flow (グループ化)
  23. 23. start endcommit▼10行処理障害発生GlassFish_jp 勉強会2013#1デフォルトでは10レコードごとにコミットされるjbatchの機能2 - チェックポイントcommit▼10行処理…×ロールバックは最終コミットまで途中からでリスタートも可能
  24. 24. jbatchjbatchの機能3 - エラーハンドリングGlassFish_jp 勉強会2013#1壊れたデータをスキップして処理を継続することができるNo msg001 I love GlassFish4.002 I love Java EE 7.99999999999Bad Record.004 I love modern framework.success
  25. 25. jbatchjbatchの機能3 - エラーハンドリングGlassFish_jp 勉強会2013#1壊れたデータをスキップして処理を継続することができるNo msg001 I love GlassFish4.002 I love Java EE 7.99999999999Bad Record.004 I love modern framework.success
  26. 26. jbatchjbatchの機能3 - エラーハンドリングGlassFish_jp 勉強会2013#1壊れたデータをスキップして処理を継続することができるNo msg001 I love GlassFish4.002 I love Java EE 7.99999999999Bad Record.004 I love modern framework.
  27. 27. jbatchjbatchの機能3 - エラーハンドリングGlassFish_jp 勉強会2013#1壊れたデータをスキップして処理を継続することができるNo msg001 I love GlassFish4.002 I love Java EE 7.99999999999Bad Record.004 I love modern framework.error
  28. 28. jbatchjbatchの機能3 - エラーハンドリングGlassFish_jp 勉強会2013#1壊れたデータをスキップして処理を継続することができるNo msg001 I love GlassFish4.002 I love Java EE 7.99999999999Bad Record.004 I love modern framework.Skip
  29. 29. jbatchjbatchの機能3 - エラーハンドリングGlassFish_jp 勉強会2013#1壊れたデータをスキップして処理を継続することができるNo msg001 I love GlassFish4.002 I love Java EE 7.99999999999Bad Record.004 I love modern framework.successsuccessskipsuccess
  30. 30. ジョブスケジューラ(cron/JP1/Tivoliなど)スケジューリング(時刻・周期起動)実行権限の管理GlassFish_jp 勉強会2013#1ジョブスケジューラ と jbatchジョブ実行順序管理JP1:ジョブネット
  31. 31. ジョブスケジューラ(cron/JP1/Tivoliなど)スケジューリング(時刻・周期起動)ジョブ実行順序管理JP1:ジョブネットjbatch:ジョブ定義XML実行権限の管理GlassFish_jp 勉強会2013#1ジョブスケジューラ と jbatchjbatchジョブ実装サポート(API/例外制御)
  32. 32. スケジューリング(時刻・周期起動)実行権限の管理GlassFish_jp 勉強会2013#1ジョブスケジューラ と jbatchjbatchジョブ実装サポート(API/例外制御)jbatchはスケジューリング機能を持っていない。ジョブ実行順序管理JP1:ジョブネットjbatch:ジョブ定義XMLジョブスケジューラ(cron/JP1/Tivoliなど)
  33. 33. スケジューリング(時刻・周期起動)ジョブ実行順序管理JP1:ジョブネットjbatch:ジョブ定義XML実行権限の管理GlassFish_jp 勉強会2013#1ジョブスケジューラ と jbatchjbatchジョブ実装サポート(API/例外制御)被る部分は使い分けを整理する必要がある。ジョブスケジューラ(cron/JP1/Tivoliなど)
  34. 34. データベースファイル(CSV/XML 等)jbatch の位置付けGlassFish_jp 勉強会2013#1Java EE サーバユーザアプリケーションjbatchJTACDIJAX-RS2.0EJB/JPA...Cron他のJava EE 仕様と同様にAPIを提供するのが役割APIの利用
  35. 35. データベースファイル(CSV/XML 等)jbatch を起動するGlassFish_jp 勉強会2013#1Java EE サーバユーザアプリケーションjbatchJTACDIJAX-RS2.0EJB/JPA...Cron時刻起動http post http://localhost:8080/batch/job/1
  36. 36. データベースファイル(CSV/XML 等)GlassFish_jp 勉強会2013#1Java EE サーバユーザアプリケーションjbatchJTACDIJAX-RS2.0EJB/JPA...Cron時刻起動http post http://localhost:8080/batch/jobs/1@Path("/jobs/{jobId}")public class BatchResource {@POSTpublic void start(@PathParam("jobId") String jobId) {// バッチジョブの起動JobOperator jobOperator =BatchRuntime.getJobOperator();jobOperator.start(jobId, null);}}
  37. 37. GlassFish_jp 勉強会2013#1Java EE のコードから簡単にバッチ起動が可能です。(JAX-RS EJB Servlet 等)
  38. 38. アーキテクチャGlassFish_jp 勉強会2013#1
  39. 39. アーキテクチャGlassFish_jp 勉強会2013#1✗ メインフレームのバッチを移行させるため、✗ JCLやCOBOL開発者にも馴染みやすくJobOperatorStep2JobRepositoryItemReaderItemProcessorItemWriterStep1 Step3Jobbatchlet
  40. 40. ジョブ : トップレベル要素GlassFish_jp 勉強会2013#1✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等JobOperatorStep2JobRepositoryItemReaderItemProcessorItemWriterStep1 Step3Jobbatchlet
  41. 41. ジョブ : トップレベル要素GlassFish_jp 勉強会2013#1✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等JobOperatorStep2JobRepositoryItemReader ItemProcessor ItemWriterStep1 Step3Job<job id="samplejob"><step id="step1" next="step2" /><step id="step2" /><properties><property name="filePath" value="input.txt"></properties></job>
  42. 42. ジョブ : トップレベル要素GlassFish_jp 勉強会2013#1✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等JobOperatorStep2JobRepositoryItemReader ItemProcessor ItemWriterStep1 Step3Job<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);
  43. 43. ジョブ : トップレベル要素GlassFish_jp 勉強会2013#1✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等JobOperatorStep2JobRepositoryItemReader ItemProcessor ItemWriterStep1 Step3Job<job id="samplejob"><step id="step1" next="step2" /><step id="step2" /><properties><property name="filePath" value="input.txt"></properties></job>ステップの流れを定義する.最低1つ以上のステップが必要.
  44. 44. ジョブ : トップレベル要素GlassFish_jp 勉強会2013#1✗ ジョブは1つ以上のステップから構成✗ ステップ全体に関わる設定はジョブに設定✗ リスタート可能かどうか? ジョブ設定プロパティ 等JobOperatorStep2JobRepositoryItemReader ItemProcessor ItemWriterStep1 Step3Job<job id="samplejob"><step id="step1" next="step2" /><step id="step2" /><properties><property name="filePath" value="input.txt"></properties></job>ジョブ全体で使うプロパティ.オプション要素.
  45. 45. JobJobInstanceJobExecution**『ファイル取り込み』ジョブ2013/06/14 に実行する『ファイル取り込み』ジョブJobExecutionJobInstanceジョブインスタンスの考え方✗ スケジュールごとにJobInstanceが生成される✗ 実行ごとにJobExecutionが生成される✗ JobInstanceは再実行に備えて永続化(シリアライズ)GlassFish_jp 勉強会2013#12013/06/14 に実行する『ファイル取り込み』ジョブ の1回目
  46. 46. ジョブインスタンスが永続化される訳✗ 6/14のジョブインスタンスは、6/15に再実行しても、6/14分のデータにアクセスする。✗ 対象データが異なる場合は、前日のリスタート分と当日分のジョブを並行処理させることも可能。JobInstanceJobExecution*JobExecution6月14日分のジョブ6/14 1回目の実行(失敗)再開時も6/14分のデータを処理実行インスタンスは実行毎に生成date sales amount6/14 ¥30,0006/14 ¥25,0006/15 ¥43,0006/15 6/14分リスタート売上テーブルGlassFish_jp 勉強会2013#1
  47. 47. ステップ : ジョブに含まれるタスク✗ 各ステップの処理内容はユーザがコーディングする✗ ステップの実装方法✗ chunk方式 : reader processor writer を実装✗ batchlet方式 : batchletインタフェース のみ実装JobOperatorStep2JobRepositoryItemReaderItemProcessorItemWriterStep1 Step3JobbatchletGlassFish_jp 勉強会2013#1
  48. 48. STEP ItemReader ItemProcessor ItemWriterchunk方式 の登場人物GlassFish_jp 勉強会2013#1
  49. 49. STEP ItemReader ItemProcessor ItemWriterItemReader 実装方法GlassFish_jp 勉強会2013#1@Namedpublic class MyReader implements ItemReader {@Overridepublic void open(Serializable checkPoint)throws Exception {..}@Overridepublic Object readItem() throws Exception {..}@Overridepublic void close() throws Exception {..}...}
  50. 50. ItemReader ItemProcessorItemProcessor 実装方法GlassFish_jp 勉強会2013#1@Namedpublic class MyProcessor implements ItemProcessor {@Overridepublic Object processItem(Object item)throws Exception {..}}STEP ItemWriter
  51. 51. ItemWriterItemWriter の実装方法GlassFish_jp 勉強会2013#1STEP ItemReader ItemProcessor@Namedpublic class MyWriter implements ItemWriter {@Overridepublic void open(Serializable checkPoint)throws Exception {..}@Overridepublic Object writeItems(List<Object> items)throws Exception {..}@Overridepublic void close() throws Exception {..}...}
  52. 52. STEP ItemReader ItemProcessor ItemWriterまずはオープンするGlassFish_jp 勉強会2013#1openopen
  53. 53. STEP ItemReader ItemProcessor ItemWriterアイテムを1件読むGlassFish_jp 勉強会2013#1openopenreadItemitem
  54. 54. STEP ItemReader ItemProcessor ItemWriterアイテムを1件処理するGlassFish_jp 勉強会2013#1openopenreadItemitemprocessItem(item)result
  55. 55. STEP ItemReader ItemProcessor ItemWriter次の1件を読みにいくGlassFish_jp 勉強会2013#1openopenreadItemitemprocessItem(item)resultreadItemitem
  56. 56. STEP ItemReader ItemProcessor ItemWriter同じく1件処理するGlassFish_jp 勉強会2013#1openopenreadItemitemprocessItem(item)resultreadItemitemprocessItem(item)result
  57. 57. STEP ItemReader ItemProcessor ItemWriterchunk処理ではすぐに書き出さないGlassFish_jp 勉強会2013#1openopenreadItemitemprocessItem(item)resultreadItemitemprocessItem(item)result1アイテム目の読み込みと処理2アイテム目の...デフォルトで10回、読み込みと処理を繰り返す。
  58. 58. STEP ItemReader ItemProcessor ItemWriter10アイテム目の処理が終わるとGlassFish_jp 勉強会2013#1readItemitemprocessItem(item)result10アイテム目の読み込みと処理
  59. 59. STEP ItemReader ItemProcessor ItemWriterまとめて書き込み処理を行うGlassFish_jp 勉強会2013#1readItemitemprocessItem(item)resultwriteItems(results)
  60. 60. STEP ItemReader ItemProcessor ItemWriterchunk方式のゆえんGlassFish_jp 勉強会2013#1readItemitemprocessItem(item)resultwriteItems(results)10個ずつ纏めて塊を処理しているので、chunk(塊)方式と呼ばれる。
  61. 61. STEP ItemReader ItemProcessor ItemWriter書いたらcheckpointを実行GlassFish_jp 勉強会2013#1readItemitemprocessItem(item)resultcheckpointInfoCheckpointdatawriteItems(results)Chunkの書き出しが終わると、コミット前にcheckpointInfoが実行。checkpointInfo
  62. 62. STEP ItemReader ItemProcessor ItemWritercheckpointInfoの実装GlassFish_jp 勉強会2013#1readItemitemprocessItem(item)result◀ comitwriteItems(results)checkpointInfoCheckpointdatacheckpointInfo@Namedpublic class MyReader implements ItemReader {@Overridepublic void open(Serializable checkPoint)throws Exception {..}@Overridepublic Serializable checkpointInfo()throws Exception {// 読み込んだ行数をチェックポイントにするreturn readedCount; // => 10}}
  63. 63. GlassFish_jp 勉強会2013#1チェックポイントはリスタート時に使われる。
  64. 64. スタートとリスタートは違う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文字列を指定する。
  65. 65. スタートとリスタートは違うGlassFish_jp 勉強会2013#1// バッチジョブの起動JobOperator jobOperator = BatchRuntime.getJobOperator();long jobExecId = jobOperator.start(“myjob”, null);// ジョブのリスタートlong jobExecId = jobOperator.restart(jobExecId, null);リスタートするときは restart で起動する。初回起動時に取得したジョブ実行ID(long)を引数に指定する。
  66. 66. スタートとリスタートは違う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が常に渡される。
  67. 67. STEP ItemReader ItemProcessor ItemWriter書いたらcheckpointを実行GlassFish_jp 勉強会2013#1readItemitemprocessItem(item)resultcheckpointInfoCheckpointdatawriteItems(results)checkpointが終わったら、バッチランタイムは commit する。(GlassFish であればJTAトランザクション)checkpointInfo◀ comit
  68. 68. STEP ItemReader ItemProcessor ItemWriterchunk処理終了時の流れGlassFish_jp 勉強会2013#1readItem読込対象のデータがなくなった!
  69. 69. STEP ItemReader ItemProcessor ItemWriterchunk処理終了時の流れGlassFish_jp 勉強会2013#1readItemItemReaderから null を返す。null
  70. 70. STEP ItemReader ItemProcessor ItemWriterwriteItemsを実行するGlassFish_jp 勉強会2013#1readItem処理済みの分を書き出す。nullwriteItems(results)
  71. 71. STEP ItemReader ItemProcessor ItemWriterチェックポイントを実行するGlassFish_jp 勉強会2013#1readItemnullwriteItems(results)checkpointInfocheckpointcheckpointInfocheckpoint
  72. 72. STEP ItemReader ItemProcessor ItemWriterトランザクションをコミットするGlassFish_jp 勉強会2013#1readItemnullwriteItems(results)checkpointInfocheckpointcheckpointInfocheckpoint◀ comit
  73. 73. STEP ItemReader ItemProcessor ItemWriterコミット後は close 処理GlassFish_jp 勉強会2013#1◀ comitclosecloseItemReaderとItemWriterのclose処理してchunk方式のステップは完了。
  74. 74. 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>
  75. 75. chunk方式 : chunkタグとオプションGlassFish_jp 勉強会2013#1Stepの子要素として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>
  76. 76. chunk方式 : reader/processor/writerGlassFish_jp 勉強会2013#1ItemReader 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>
  77. 77. GlassFish_jp 勉強会2013#1全てのメソッドの実装を強制されると困ります...(open close処理がない など)F A Q
  78. 78. 空実装されたAbstractReaderを継承GlassFish_jp 勉強会2013#1public class MyReader extends AbstractItemReader {@Overridepublic Object readItem() throws Exception {// read処理の実装}}✗ デフォルト実装は空実装 (何もしない)✗ openやcloseが呼ばれても何もしない
  79. 79. GlassFish_jp 勉強会2013#1Abstractクラスを使うと、他クラスを継承できないので困る(POJOが一番嬉しい...)F A Q
  80. 80. GlassFish_jp 勉強会2013#1public review まではこんなのもあった!
  81. 81. @Namedpublic class MyItemReader {@ReadItemObject read() throws Exception {// レコード読み取り処理}}GlassFish_jp 勉強会2013#1アノテーションでItemReaderが定義できた今後盛り込まれることを期待。
  82. 82. process()ExitStatusもう1つのStep実装方式 : batchletGlassFish_jp 勉強会2013#1STEP batchletpublic class MyBatchlet implements Batchlet {@Overridepublic String process() throws Exception {// 処理をここに実装}@Overridepublic void stop() throws Exception {// JobOperator.stop()で強制停止した時の// 処理をここに実装}}Stepとbatchletが1対1。非常にシンプルな実装。<step id="step1"><batchlet ref="myBatchlet" /></step>
  83. 83. chunkとbatchletの使い分けGlassFish_jp 勉強会2013#1✗ Chunk方式✗ バルクオペレーション全般✗ ファイル、DBレコードを1件ずつ処理✗ batchlet方式✗ コマンド処理全般✗ 他サーバへのファイル転送 (ftpなど)✗ 圧縮 解凍コマンドの実行
  84. 84. JobOperatorStep2JobRepositoryItemReaderItemProcessorItemWriterStep1 Step3JobbatchletGlassFish_jp 勉強会2013#1JobOperator✗ バッチ処理のコントロール役✗ JobOperator経由でジョブ起動/再起動/停止
  85. 85. GlassFish_jp 勉強会2013#1JobRepository : 永続化機構JobOperatorStep2JobRepositoryItemReaderItemProcessorItemWriterStep1 Step3Jobbatchlet✗ ジョブインスタンスやチェックポイント情報を保存✗ 仕様上ではあまり詳細については言及されず✗ Glassfish4 同梱のRIでは組み込みderbyに永続化
  86. 86. アーキテクチャの振り返りGlassFish_jp 勉強会2013#1✗ Jobには1つ以上のStepが含まれる✗ JobやStepはXMLで表現する✗ Stepの実装方法は2つある✗ chunk : 読む/処理/書くを繰り返す処理向き✗ batchlet : コマンド向き✗ chunk/batchletはjavaで実装する✗ JobOperatorからジョブを起動する✗ JobRepositoryにジョブ情報は永続化される
  87. 87. Spring Batch と jbatchGlassFish_jp 勉強会2013#1
  88. 88. Spring Batch と jbatchGlassFish_jp 勉強会2013#1基本的な作りjbatch Spring BatchXMLベース(ジョブXML)XMLベース(ジョブXML)ユーリティクラスの充実現状はなし(シンプルに標準化)ファイル操作サポートJPA連携サポート複数サーバ分散処理なし ありJSR準拠標準仕様(ベンダフリー)現状は未準拠
  89. 89. Spring Batchがjbatch実装になる?!GlassFish_jp 勉強会2013#1✗ Java EEになるべく依存しない気配を感じる✗ 依存するDIコンテナをCDIに限定していない✗ 仕様書上もSpringやGuiceのキーワードあり✗ 似ているので、Spring Batchは仕様準拠しやすい✗ Expert GroupにVMWare社もいる現状は、SpringBatchから汎用部分を標準化したのがjbatch
  90. 90. GlassFish_jp 勉強会2013#1Java Batch 動作環境
  91. 91. GlassFish_jp 勉強会2013#1対応しているJDKJDK6 以上(もうサポート切れなので、是非JDK7を)
  92. 92. 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.xmlJava EE 環境で使った方が良いと思います。
  93. 93. GlassFish_jp 勉強会2013#1もっと jbatch を知る
  94. 94. GlassFish_jp 勉強会2013#1java.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
  95. 95. GlassFish_jp 勉強会2013#1書籍で学ぶ✗ Spring Batchと異なる点もあるので注意✗ batchlet -> tasklet✗ reader をchunkタグの属性で定義<reader> -> reader=”...”✗ 実装の実践的な例として役立つ本✗ 英語だけど怖くない
  96. 96. GlassFish_jp 勉強会2013#1サンプルアプリ作ってみたhttps://github.com/n-agetsu/JBatchDemo
  97. 97. GlassFish4 を今すぐダウンロード!ご清聴ありがとうございました。

×