4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Java BatchをLibertyでためす

Last updated at Posted at 2025-09-29

目的

Java BatchアプリケーションをLibertyでためします。

Batchlet

AbstractBatchlet を ExtendsしたJob実行のクラスを用意します。

PdprofBatchlet.java
package pdprof.javabatch;

import javax.batch.api.AbstractBatchlet;
import javax.batch.api.BatchProperty;
import javax.inject.Inject;

public class PdprofBatchlet extends AbstractBatchlet {
	
	@Inject
	@BatchProperty(name="message")
	String message_property;
	private final String message_default = "Hello!!";

	@Override
	public String process() throws Exception {
		String message = "The message is from default : " + message_default;
		if (message_property != null) {
			message = "The message is from property : " + message_property;
		}
		System.out.println(message);
		return message;
	}
	
	@Override
	public void stop() throws Exception {
		System.out.println("= PdprofBatchlet stop is called");
	}

}

BatchPropertyとして message を受け取ります。

Job.xml

BatchJobを定義する xml を用意します。META-INF/batch-jobs/[jobXMLname].xml で配置します。[jobXMLname] は Jobを開始するときに使う名前です。

PdprofBatchlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<job id="pdprof-job" xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	version="1.0">
	<step id="PdprofStep">
		<batchlet ref="pdprof.javabatch.PdprofBatchlet">
			<properties>
				<property name="message" value="#{jobParameters['message']}" />
			</properties>
		</batchlet>
	</step>
</job>

batchlet ref= で Batchletのクラス名が指定されます。property name は BatchProperty name と関連付けられます。XML中の jobParameters['message'] は Jobを開始するときに渡す PropertiesのKey=message です。そのValueを propertyのname で指定されたものの値とします。

JobをStartするサーブレット

以下のようなコードでJobを開始します。

PdprofStartBatchServlet.java
package pdprof.javabatch;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;

import javax.batch.operations.JobOperator;
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;

/**
 * Servlet implementation class PdprofStartBatchServlet
 */
@WebServlet("/startbatch")
public class PdprofStartBatchServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PdprofStartBatchServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		JobOperator jobOperator = BatchRuntime.getJobOperator();
		Properties props =  new Properties();
		props.put("message", "Servlet Hello!!!");
		Long jobIdX = jobOperator.start("PdprofBatchlet", props);
		Long jobIdY = jobOperator.start("PdprofBatchlet", null);
		PrintWriter out = response.getWriter();
		out.println("Job ID : " + jobIdX + " started with props");
		out.println("Job ID : " + jobIdY + " started without props");

	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

ここで、props.put("message", "...") が jobParameters の message と関連付けられ、jobOperator.start("PdprofBatchlet") が PdprofBatchlet.xml のファイル名(拡張子除く)に関連付けられます。

これでJobに関連するクラスとXMLが用意でき、その関連付け方が分かりました。これらのファイルをWARとして用意すると実行できます。

Libertyテスト環境の自動構築

自分でWARファイルにパッケージできれば動作させられますが、環境をdockerで用意する方法です。

用意したGitレポジトリをクローンします。

git clone https://github.com/pdprof/java-batch.git
cd java-batch/java-batch-docker/

Libertyのイメージをビルドして開始します。

./setup-docker.sh
./start.sh

起動したら以下にアクセスします。

Screenshot from 2025-09-30 01-28-07.png

Propertiesの指定あり、なしでJobが開始されます。Jobを開始するサンプルの実行ができたので、これを元にテストしたい処理を追加します。

Job Persistence RepositoryにDBを使う

で使用しているDBやDataSourceを使うなどして構成します。

を参考にします。DefaultDataSourceを構成すると良いので、DriverやLibraryの構成はそのまま使用して以下を追加します。Db2の例です。

server.xml
<dataSource id="DefaultDataSource" jdbcDriverRef="Db2Driver"> 
    <properties.db2.jcc databaseName="PDPROF" 
        serverName="localhost" portNumber="50000"
        user="db2inst1" password="passw0rd"/>
</dataSource>

トラブルシューティング

毎度のことですが、よくつかう dockerコマンドを書いておきます。この文書でもpodman, dockerとまとまりがないですが、Linux では dockerがpodmanを呼び出すようになっていました。

docker ps # 動作中のContainer確認
docker logs -f java-batch # ログ確認
docker restart java-batch # 再起動
docker inspect java-batch # container 確認
docker exec -it java-batch bash # Container内状況確認

まとめ

LibertyでJava Batchアプリケーションをテストしました。

4
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?