Oracle Database Express EditionにjBatchのJobRepositoryを構成する(Dockerコンテナもあります)

jBatchを使うには、JobRepositoryと呼ばれる、ジョブのステータスやシリアライズされたcheckpointinfoを保持するデータベースが必要です。
Oracle WebLogic Serverでは、デフォルトではDerbyの組み込みデータベースを利用しています。しかし、これはあくまで開発用で、本番環境はもちろん、UTより後のテスト工程では別途データベースを構成する必要があるものと思います。

今回は、Oracle Database Express Editionを使ってJobRepositoryを構成して見たので、手順を紹介します。

1. データベースにJobRepository用のスキーマを作成する

まず、WebLogic Server 12.2.1がインストールされた環境から、テーブルを作成するためのスクリプトを取得します。
スクリプトは、以下のパスに格納されています。

${ORACLE_HOME}/oracle_common/common/sql/wlservices/batch/Oracle

今回は、このパス配下のスクリプトを、DBサーバーの "/tmp/jbatch/" にコピーしておきます。

続いて、DB上にJobRepository用のユーザーを作成し、必要なアクセス権を付与します。
例えば以下の様な感じです。

$ sqlplus system/oracle
SQL> CREATE USER repuser IDENTIFIED BY reppswd
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP
  4  ;
SQL> GRANT CONNECT, RESOURCE TO repuser;

作成したユーザーで再接続し、テーブルを作成するスクリプトを実行します。

SQL> CONNECT repuser/reppswd;
SQL> @/tmp/jbatch/jbatch.sql

2. JobRepositroryに接続するためのデータソースを作成する

データソースの作成は、WebLogic Server管理コンソールから行います。

管理コンソールにアクセスして、チェンジ・センターの[ロックして編集]ボタンをクリックします。

f:id:charlier_shoe:20160114020753p:plain

ドメイン構造の、[${ドメイン名}] > [サービス] > [データ・ソース]を選択します。

f:id:charlier_shoe:20160114020757p:plain

[JDBCデータ・ソースのサマリー]で、[新規] > [汎用データソース]を選択します。

f:id:charlier_shoe:20160114020801p:plain

[JDBCデータ・ソースのプロパティ]画面で、以下の値を設定し、[次]をクリックします。

  • 名前: (任意の名前)
  • スコープ: グローバル
  • JNDI名: (任意のJNDI名)
  • データベースのタイプ: Oracle

f:id:charlier_shoe:20160114020944p:plain

[JDBCデータ・ソースのプロパティ]画面(2枚目)で、以下の値を設定し、[次]をクリックします*1

  • データベース・ドライバ: Oracle's Driver (Thin XA) for Instance connections; Versions:Any

f:id:charlier_shoe:20160114020950p:plain

[トランザクション・オプション]画面では設定する項目はありません。[次]をクリックします。

f:id:charlier_shoe:20160114020956p:plain

[接続プロパティ]画面で、以下の値を設定し、[次]をクリックします。

  • データベース名: (データベースのSID)
  • ホスト名: (DBサーバーのホスト名またはIPアドレス
  • ポート: (DBのポート。Oracle DBでは1521が基本)
  • データーベース・ユーザー名: repuser
  • パスワード: reppswd

f:id:charlier_shoe:20160114021051p:plain

[データーベース接続のテスト]画面で[構成のテスト]をクリックして、接続テストが成功することを確認します。問題なければ[次]をクリックします。

f:id:charlier_shoe:20160114021106p:plain

[ターゲットの選択]画面で、バッチアプリケーションをデプロイする予定のターゲットを選択し、[終了]をクリックします。

f:id:charlier_shoe:20160114021123p:plain

3. バッチジョブとデータソースの関連付けの設定をおこなう

最後に、2.で作成したデータソースを、JobRepositoryにアクセスするときに利用するデータソースとして登録します。

ドメイン構造の[${ドメイン名}]をクリックし、画面右のタブで[構成] > [バッチ]を選択します。

以下の値を設定し、[保存]をクリックします。

  • データソースJNDI名: (2.の[JDBCデータ・ソースのプロパティ]画面(一枚目)で指定したJNDI名)
  • スキーマ名: repuser

f:id:charlier_shoe:20160114021136p:plain

最後に[チェンジ・センター]で[変更のアクティブ化]をクリックすると、必要な設定は完了です。

試しに、前回の記事で紹介したサンプルアプリを動かしてみたところ、ちゃんと結果が表示されることが確認できました。

f:id:charlier_shoe:20160114021145p:plain

上の画面は、ドメイン構造の[${ドメイン名}]をクリックし、画面右のタブで[モニタリング] > [バッチ・ジョブ]を選択すると表示されます。

おまけ: JobRepostitoryを構成済みの、Oracle Database XEのDockerコンテナ

JobRepositoryを構成済みのDockerコンテナを作成する、スクリプトを作ってみました。こちらはgithubに公開してあります。
ベースとなるOracle Express Editionのイメージはwnamelessさんのものを利用させて頂いています。

ダウンロードしたら、tablesフォルダに上記のsqlスクリプト群を配置し、以下のコマンドを実行してください。

$ docker build -t [タグ名] ./
$ docker run  sudo docker run -d -p 1521:1521 --name=[コンテナ名] [タグ名]

JobRepositoryのユーザー名、パスワードは以下のとおりとなっています。この辺はDockerfileを適当に編集して、好きなものに変更してください。

  • ユーザー名: repuser
  • パスワード: reppswd

*1:マニュアルによると、JobRepositoryへのアクセスに使用するデータ・ソースは、XAトランザクションに対応したドライバを使用する必要があります