4.2. 永続サービスの設定

4.2.1. データベース互換性

Hibernate と互換のあるデータベースであれば JBPM を実行できます。
サンプル設定ファイル src/config.files は、開発やテストに最適な H2 インメモリデータベースの使用を指定します (H2 はメモリ内のすべてのデータを保持し、ディスク上には何も保存しません)。

4.2.1.1. JDBC 接続の分離レベル

JDBC 接続のデータベース分離レベルは、最低でも READ_COMMITTED に設定してください。

警告

READ_UNCOMMITTED (分離レベル 0、H2 によってサポートされる唯一の分離レベル) に設定すると、job executor で競合状態が発生することがあります。また、複数のトークンが同期化されると競合状態が発生することもあります。

4.2.1.2. データベースの変更

JBPM が異なるデータベースを使用するよう再設定するには、次の手順に従います。
  • JDBC ドライバーライブラリアーカイブをクラスパスに置きます。
  • JBPM が使用する Hibernate 設定を更新します。
  • 新しいデータベースにスキーマを作成します。

4.2.1.3. データベーススキーマ

希望するデータベースを使用しやすくするため、jbpm.db サブプロジェクトにはドライバー、説明、スクリプトが含まれています。 詳細は、jbpm.db プロジェクトの root にある readme.html を参照してください。

注記

JBPM はすべてのデータベースに対して DDL を生成できますが、スキーマが常に最適化されているとは限りません。データベース管理者に依頼してカラムタイプとインデックスを最適化できるよう生成された DDL の確認をしてもらうとよいでしょう。
次の Hibernate 設定オプションが開発環境で使用されているかもしれません。 hibernate.hbm2ddl.autocreate-drop に設定すると、 データベースがアプリケーションで初めて使用されるとスキーマが自動的に作成されます。 アプリケーションが終了すると、 スキーマはドロップされます。
4.2.1.3.1. プログラムでデータベーススキーマ操作
JBPM は、 org.jbpm.JbpmConfigurationcreateSchemadropSchemaメソッドを使いデータベーススキーマを作成、削除するためのAPIを提供します。設定済みのデータベースユーザーが持つ権限以外に、これらのメソッドの呼び出しへの制限はありません。

重要

これらのメソッド呼び出しに関する制限は設定したデータベースユーザーの権限により左右される点に注意してください。

注記

前述したAPIは、 org.jbpm.db.JbpmSchema クラスが提供する幅広い機能の一部となっています。

4.2.1.4. Hibernate クラスとの統合

Hibernate と JBPM 永続クラスを統合すると、2 つの主な利点があります。1 つ目の利点は、接続とトランザクションの管理が簡単になることです。これは、1 つの Hibernate セッションファクトリとして統合することで 1 つの Hibernate セッションと 1 つの JDBC 接続のみになるからです。そのため、JBPM の更新がドメインモデルの更新と同じトランザクションになります これにより、トランザクションマネージャーが不要になります。
2 つ目の利点は、 余分な労力を使わず Hibernate 永続オブジェクトをプロセス変数にドロップできるようになることです。
統合するには、中心となる hibernate.cfg.xml ファイルを 1 つ作成します。デフォルトの JBPM hibernate.cfg.xml を使用し、独自の Hibernate マッピングファイルへの参照を追加してカスタマイズするのが最も簡単な方法でしょう。