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管理コンソールから行います。
管理コンソールにアクセスして、チェンジ・センターの[ロックして編集]ボタンをクリックします。
ドメイン構造の、[${ドメイン名}] > [サービス] > [データ・ソース]を選択します。
[JDBCデータ・ソースのサマリー]で、[新規] > [汎用データソース]を選択します。
[JDBCデータ・ソースのプロパティ]画面で、以下の値を設定し、[次]をクリックします。
- 名前: (任意の名前)
- スコープ: グローバル
- JNDI名: (任意のJNDI名)
- データベースのタイプ: Oracle
[JDBCデータ・ソースのプロパティ]画面(2枚目)で、以下の値を設定し、[次]をクリックします*1。
- データベース・ドライバ: Oracle's Driver (Thin XA) for Instance connections; Versions:Any
[トランザクション・オプション]画面では設定する項目はありません。[次]をクリックします。
[接続プロパティ]画面で、以下の値を設定し、[次]をクリックします。
- データベース名: (データベースのSID)
- ホスト名: (DBサーバーのホスト名またはIPアドレス)
- ポート: (DBのポート。Oracle DBでは1521が基本)
- データーベース・ユーザー名: repuser
- パスワード: reppswd
[データーベース接続のテスト]画面で[構成のテスト]をクリックして、接続テストが成功することを確認します。問題なければ[次]をクリックします。
[ターゲットの選択]画面で、バッチアプリケーションをデプロイする予定のターゲットを選択し、[終了]をクリックします。
3. バッチジョブとデータソースの関連付けの設定をおこなう
最後に、2.で作成したデータソースを、JobRepositoryにアクセスするときに利用するデータソースとして登録します。
ドメイン構造の[${ドメイン名}]をクリックし、画面右のタブで[構成] > [バッチ]を選択します。
以下の値を設定し、[保存]をクリックします。
最後に[チェンジ・センター]で[変更のアクティブ化]をクリックすると、必要な設定は完了です。
試しに、前回の記事で紹介したサンプルアプリを動かしてみたところ、ちゃんと結果が表示されることが確認できました。
上の画面は、ドメイン構造の[${ドメイン名}]をクリックし、画面右のタブで[モニタリング] > [バッチ・ジョブ]を選択すると表示されます。
おまけ: 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