動かしてみる
TweetPosted on Tuesday Jan 21, 2014 at 06:40AM in JBatch
jbatch(JSR352)とはJavaEE7から入ったバッチフレームワークの規格です。WildFly8ではGlassFish4とは別の実装が使われています。すごく簡単なのをWildFly8で動かしてみます。
環境
- WildFly 8.0.0CR1
 - Eclipse等々はここで設定した状態
 
CDIの設定をする
プロジェクトの設定を開いてProject Facetsを選びCDIにチェックを入れてOKを押します。
ジョブXMLファイルを作る
ジョブを起動すると、まずこのXMLファイルがロードされます。JSR352ではアプリ開発者はこのXMLファイルとartifactと呼ばれるクラス群を作る必要があります。まずXMLファイルが読まれ、ここに書かれた通りにartifactが呼び出されます。
作る場所はこのへん.画像では/src/main/javaの下になっていますが,XMLファイル等のJavaソース以外のものは/src/main/resourcesに置くのが望ましいです.war内の位置で言うとclasses/META-INFの下になります。このファイルの名前がバッチの名前になります。
<?xml version="1.0" encoding="UTF-8"?> <job id="job001" version="1.0" xmlns="http://xmlns.jcp.org/xml/ns/javaee"> <step id="step001"> <batchlet ref="testBatchlet"/> </step> </job>
Batchletを作る
Batchletは簡単な処理を書くときに使います。バルク処理とかをやるときは、ここで紹介するBatchletではなく、chunk方式と呼ばれるartifactを使ったほうがよいです。作るクラス1つだけで簡単なのでここではBatchletを作ります。XMLファイルとartifactはCDIの名前でひも付けるので、作る場所はどこでも良いです。
package com.example;
import javax.batch.api.AbstractBatchlet;
import javax.inject.Named;
@Named
public class TestBatchlet extends AbstractBatchlet{
	@Override
	public String process() throws Exception {
		System.out.println("Hello JSR352");
		return "SUCCESS";
	}
}
Servletを作る
バッチを動かす際の起点にします。ブラウザでServletにGETを飛ばすとバッチが動き出す感じです。定時実行とかスケジュール実行がしたければEJBタイマでやることもできます。
package com.example;
import java.io.IOException;
import java.util.Properties;
import javax.batch.runtime.BatchRuntime;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		
		long executionId = BatchRuntime.getJobOperator().start("job001", new Properties());
		response.getWriter().write("execution id: " + executionId);
	}
}
動かしてみる
デプロイしたらブラウザでアクセスしてみましょう
動いているようです。それっぽいログも出ています
ジョブを実行するとDB等にかなり詳細な履歴が残せるのですが、WildFly8のデフォルトではインメモリデータベースに格納されるだけになっているようで、後から参照する方法とかは少し調べましたが不明です。DBに残すようにする設定の方法はまた別途調べる予定。
JobOperator#start()で返るのはexecutionIdといって、このIDを使って実行中のバッチを止めたり、途中で死んだバッチを再実行したりできます。バッチの実行ごとに採番されます。リロードすると数字がインクリメントされていきます。
Tags: jbatch