シェアする

  • このエントリーをはてなブックマークに追加





【jbatch】step-partitioningによるトランザクション境界

シェアする

  • このエントリーをはてなブックマークに追加
  • 0

今、仕事でjbatchをさわってます。

jbatchは、JavaEE7で導入され、JSR352で定められた

javaにおけるbatch applicationの仕様です。原文仕様はこちら

タイトルの件、そんなことしないで、普通に実装するときはどうするのか?

とかは他の投稿でするとして、

今個人的にホットなstep-partitioningによるトランザクション境界

について実行することでわかったことをお話したいと思います。

そもそもjbatchのstep-partitioningって?

jbatchにおける並列処理の機能の1つ

通常のBatchlet、Chunkを並列に処理させる機能です。

それを実現するために、Reducer・Mapper・Collector・Analyzerという

緩衝領域が存在します。

Reducer:並列処理全体の前後処理などを実装

Mapper:分割単位、実行スレッド数などを実装

Collector:各並列処理ごとのAnalyzerへ渡すための中間処理を実装

Analyzer:各並列処理を統合する処理

最小構成で実装してみた

Batchlet

メインとなるBatchletです。

Reducer

中の実装は無しです。step-partitioningにおいてMapperなどの緩衝領域はすべてが

任意実装です。なければないで動作します。

※分割単位を定義するMapperは必要かと思いきや、

Mapperがなくてもjobの定義xmlにplanタグとして静的に設定可能すればOK

Mapper

property配列の要素がそれぞれpartitionに順番に割り当てられます。

配列の要素0は、1番目のpartitionに・・・という具合です。

Collector

Analyzer

job定義xml

Mapperから各batchlet(partition単位)へパラメータを渡すために、

#{partitionPlan[‘param’]}を定義しています。

これを各batchletは@BatchPropertyと@Injectをつけてnameと同じフィールド名で

定義するとpartition別にパラメータを取得できます。

動作させてみる

まずはストレートにそのまま

Mapperにてpartitionを2としています。

これは2つを並列実行させることを意味します。

普通はここで対象取得して、件数からpartition数判断させて設定って

感じになるでしょうか。

上記サンプルはそのまま実行すると、

Batchletで2件、Analyzerで2件、テストテーブルにinsertされ

計4件insertされます。

Analyzerのトランザクションは??

ここで不思議なことが起こっています。

AnalyzerはTransactional定義等していないのに、

insertされているのです。

Analyzerは並列処理を統合する役割を担っているので、

クラスとしてはSingletonに動作しています。

役割からjbatchのコントローラ側で

Defaultでトランザクションが張られているのだと思います。

では、Collectorではどうか?

上記サンプルで、Collectorにコメントアウトがあると思います。

それを外して実行してみたところ、

「Transaction is required」(トランザクションは必須ですよ)と

エラーになりました。

まとめ

step-partitioningにおけるトランザクションは、

Analyzerではデフォルトでトランザクションが用意されており、

それ以外はTransactionalアノテーションや、

UserTransactionなどで自前で定義する必要がある。

ということになります。

もっとこのあたりを掘り下げてほしいという要望など

ありましたらご連絡をいただければと思います。

近いうちに、jbatchのスタートアップな記事を書きたいと思います。

ブログランキング・にほんブログ村へ
にほんブログ村


人気ブログランキング

20代前半までは東京で音楽をやりながら両手の指以上の業種でアルバイト生活をしていましたが、某大手プロバイダのテレアポのバイトでPCの知識の無さに愕然とし、コンピュータをもっと知りたい!と思ったことをきっかけに25歳の時にITの世界に未経験で飛び込みました。
紆余曲折を経て、現在は個人事業主としてお仕事させていただいており、10年ほどになります。
web制作から企業システム構築、ツール開発など、フロントエンドもバックエンドもサーバーもDBAも依頼があれば何でもやってきた雑食系エンジニアです。

今風にいうとフルスタックエンジニアということになるのかしら??

→ 詳細プロフィールというか、生い立ちはこちら

→スキルシートをご覧になる場合はこちら

→お仕事のご依頼やお見積りなどお問い合わせはこちらから!

シェアする

  • このエントリーをはてなブックマークに追加

フォローはいかがですか?