PAMで利用するDBを変更する方法(PostgreSQLの場合)


Red Hat Process Automation Manager (PAM) は、デフォルトでは、H2DBを使うことができるようになっています。
H2DBは、Javaで実装された、軽量なインメモリデータベースですが、本番で使うことは推奨されていません。

本格的な開発に入る前に、DBを変更しましょう。

以下のDB用のDDLスクリプトがダウンロード可能になっています。

  • DB2
  • H2
  • MySQL
  • Oracle
  • PostgreSQL
  • SQLServer
  • Sybase

大まかな流れ

PAMがEAP上にデプロイされ、正常起動する状態を前提とします。ローカルへの環境構築方法は以下記事等を参照ください。
PAMの開発環境をローカルで作成して触ってみるための手順

  1. 必要なものをダウンロード(DDLスクリプト、JDBCドライバ、なければDB本体も)
  2. DBをインストール
  3. DDLスクリプトを流す
  4. JDBCドライバをEAPにモジュール登録
  5. PAMのデフォルトDB設定を変更

ここでの前提

DBはPostgerSQLを使います(バージョンは13.1)

必要なもの

  • DB本体
    • 各自入手ください。PostgreSQLはこのあたりからダウンロード https://www.postgresql.jp/download
    • macの場合、Homebrewでインストール可(バージョン13の場合の例)
$ brew install postgresql@13

手順を詳細解説

**DB本体のインストール方法、pgadminのインストール方法は、ここでは省略します。

DDLスクリプトを流す

DDLスクリプトが含まれている、add-ons.zipを解凍すると、複数のzipが出来ます。その中の「rhpam-7.x.x-migration-tool.zip」を更に解凍します。
すると、ddl-scriptsフォルダが出来ます。そこに各DB用のDDLスクリプトがあります。

たくさんありますが、新規作成時に必要なのは、postgresql-jbpm-schema.sql です。

DBをインストールして起動したら、ユーザを作りましょう。(まだやっていない場合)
以下はmacの場合の例

// PostgreSQLインストール
$ brew install postgresql
//  バージョン確認
$ psql --version
// postgresql起動
$ brew services start postgresql
// ユーザ作成
$ createuser -s -P ユーザ名

まず、PAM用のデータベースを作成します。

$ createdb DATABASE_NAME

(もしくは、psqlで接続して、# create database DATABASE_NAME)

次に、DDLスクリプトを流します。

$ psql DATABASE_NAME < /解凍したDDLスクリプトのパス/postgresql-jbpm-schema.sql 

各種テーブル(40数個)とインデックス等が生成されます。
これで、PAM用のデータベースが完成です。

pgadmin等でアクセスして、中身(データは空です)を確認してみましょう。
バージョン7.9では、以下のテーブルが作成されました。

テーブルたくさんありますが、よく使われるものは一部のみです。
どういうデータが入るかは、テーブル名からなんとなく想像できると思います。

JDBCドライバをEAPにモジュール登録する

次に、JDBCドライバをEAPに登録します。
ここでは、CLIを使うやり方を紹介します。(管理コンソールからも可能です)

CLIツールは、/EAP_HOME/bin/jboss-cli.sh です。

$ ./EAP_HOME/bin/jboss-cli.sh

CLIを起動後、以下のmodule addコマンドを実行し、モジュールを追加します。

module add --name=MODULE_NAME --resources=PATH_TO_JDBC_JAR --dependencies=DEPENDENCIES
// 以下は例
module add --name=org.postgresql --resources=/path/postgresql-42.2.18.jar --dependencies=javax.api,javax.transaction.api

続いて、同じくCLIで以下コマンドを実行し、JDBCドライバを登録します。

/subsystem=datasources/jdbc-driver=DRIVER_NAME:add(driver-name=DRIVER_NAME,driver-module-name=MODULE_NAME,driver-xa-datasource-class-name=XA_DATASOURCE_CLASS_NAME, driver-class-name=DRIVER_CLASS_NAME)
// 以下は例
/subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql,driver-module-name=org.postgresql,driver-xa-datasource-class-name=org.postgresql.xa.PGXADataSource))

driver-module-nameとmodule addした際のnameを一致させます。

さて、次に、データソースを作成します。
CLIでデータソースを作成します。non-XAとXAとがあります。ここでは、non-XAデータソースを作成します。
PAMと連携するアプリケーション側のDBが他のところにあり、2フェーズコミットが必要になる場合は、XAデータソースを作成します。

data-source add --name=DATASOURCE_NAME --jndi-name=JNDI_NAME --driver-name=DRIVER_NAME  --connection-url=CONNECTION_URL
// 以下は例
data-source add --name=PostgresDS --jndi-name=java:jboss/PostgresDS --driver-name=postgresql --connection-url=jdbc:postgresql://localhost:5432/postgresdb --user-name=admin --password=admin 

PAMのデフォルトDB設定を変更する

最後に、PAMのデフォルトDBが、H2DBになっているので、それを変更します。
/EAP_HOME/standalone/configuration/standalone-full.xmlを編集します。

system-propertiesの設定箇所で、以下のプロパティを探し、valueを以下のように編集します。
以下プロパティがない場合は、追加します。
- org.kie.server.persistence.ds
- org.kie.server.persistence.dialect

standalone-full.xml
<system-properties>
・・・
        <property name="org.kie.server.persistence.ds" value="java:jboss/PostgresDS"/>
        <property name="org.kie.server.persistence.dialect" value="org.hibernate.dialect.PostgreSQL82Dialect"/>
・・・
</system-properties>

EAP再起動で、PostgreSQLがデフォルトDBになります。