Kohei Nozaki's blog 

WildFly8でJDBCジョブレポジトリを使ってみる


Posted on Saturday Feb 08, 2014 at 04:36PM in Technology


WildFly8.0.0.CR1ではジョブレポジトリがデフォルトではインメモリH2になっているが、スタンドアロンのDBにしてみる。現状H2しかサポートしてないようなのでサーバモードのH2を立ててやってみる

この例では普通のデータソースを使ってますが、バッチから他のデータベースも参照する場合は、XAデータソースにしておかないと問題が起こると思われるので注意

環境

  • WildFly8.0.0.CR1
  • H2 1.3.175 (2014-01-18)
  • Oracle JDK7u51
  • OS X 10.9.1

準備

プロジェクト

動かしてみるで作ったプロジェクトをそのまま使う。

H2を立ち上げる

  1. H2のzipファイルをとってきて展開する
  2. h2/binに存在するh2.shを実行する
  3. ブラウザにH2管理コンソールへのログイン画面が表示される。デフォルトでTCP接続のH2にログインする内容になっているのでそのままログインする
  4. 適当にSQLを実行してみて普通に動いている事を確認する

データソースを作る

jboss-cliで叩くコマンドはこんな感じ。この環境だとH2は最初から入っているようなので特にJDBCドライバのデプロイ等は不要。

data-source add \
      --name=JBatchDS \
      --driver-name=h2 \
      --connection-url=jdbc:h2:tcp://localhost/~/test \
      --jndi-name=java:jboss/jdbc/JBatchDS \
      --user-name=sa \
      --password=

一応接続チェック

[standalone@localhost:9990 /] /subsystem=datasources/data-source=JBatchDS:test-connection-in-pool
{
    "outcome" => "success",
    "result" => [true]
}

ジョブレポジトリを変更

JDBCレポジトリのデータソース名を設定

[standalone@localhost:9990 /] /subsystem=batch/job-repository=jdbc:write-attribute(name=jndi-name, value=java:jboss\/jdbc\/JBatchDS)
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-reload" => true,
        "process-state" => "reload-required"
    }
}

job-repository-typeをjdbcに設定

[standalone@localhost:9990 /] /subsystem=batch:write-attribute(name=job-repository-type, value=jdbc)
{
    "outcome" => "success",
    "response-headers" => {
        "operation-requires-restart" => true,
        "process-state" => "restart-required"
    }
}

restart-requiredだそうなので再起動する。

実行してみる

TestServletにアクセス

普通に動いているようです

DBを見てみる

事前にDDLを流したりは一切していないが、H2のWebコンソールから見てみると自動的に必要なテーブル等が作られている

備考

GlassFishにあるlist-batch-jobs的なコマンドがあれば良いのだけどまだ見つけられていない。また調べる

参考文献

  1. H2 Database Engine
  2. Wildfly Model Reference