第68章 Java フレームワークとの統合
プロセスエンジンは、Apache Maven、CDI、Spring、EJB などの業界標準の Java フレームワークと統合できます。
68.1. Apache Maven との統合
プロセスエンジンは、2 つの主な目的で Maven を使用します。
- KJAR アーティファクト (プロセスエンジンが実行するためのランタイム環境にインストールできるデプロイメントユニット) を作成する
- プロセスエンジンが組み込まれたアプリケーションを構築する依存関係を管理するには
68.1.1. デプロイメントユニットとしての Maven アーティファクト
プロセスエンジンは、Apache Maven アーティファクトからプロセスをデプロイするメカニズムを提供します。これらのアーティファクトは JAR ファイル形式で、KJAR ファイル (非公式には KJAR) として知られています。KJAR ファイルには、KIE ベースおよび KIE セッションを定義する記述子が含まれています。また、プロセスエンジンは KIE ベースに読み込めるプロセス定義を含むビジネスアセットも含まれます。
KJAR ファイルの記述子は、kie-deployment-descriptor.xml という名前の XML ファイルで表されます。記述子は空にすることができます。この場合は、デフォルト設定が適用されます。KIE ベースおよび KIE セッションのカスタム設定も提供できます。
空の kie-deployment-descriptor.xml 記述子
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployment-descriptor xsi:schemaLocation="http://www.jboss.org/jbpm deployment-descriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit>org.jbpm.domain</persistence-unit>
<audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
<audit-mode>JPA</audit-mode>
<persistence-mode>JPA</persistence-mode>
<runtime-strategy>SINGLETON</runtime-strategy>
<marshalling-strategies/>
<event-listeners/>
<task-event-listeners/>
<globals/>
<work-item-handlers />
<environment-entries/>
<configurations/>
<required-roles/>
<remoteable-classes/>
</deployment-descriptor>
空の kie-deployment-descriptor.xml 記述子を使用すると、以下のデフォルト設定が適用されます。
1 つのデフォルト KIE ベースが、以下の特性で作成されます。
- KJAR ファイル内のすべてのパッケージからのアセットをすべて含む
-
そのイベント処理モードは
cloudに設定されている -
この等価動作が
identityに設定されている - 宣言型アジェンダが無効である
-
CDI アプリケーションの場合、そのスコープは
ApplicationScopeに設定されます。
単一のデフォルトステートレス KIE セッションが作成され、以下の特徴があります。
- 単一の KIE ベースにバインドされます
-
クロックタイプは、
real timeに設定される -
CDI アプリケーションの場合、そのスコープは
ApplicationScopeに設定されます。
単一のデフォルトのステートフル KIE セッションが作成され、以下の特徴があります。
- 単一の KIE ベースにバインドされます
-
クロックタイプは、
real timeに設定される -
CDI アプリケーションの場合、そのスコープは
ApplicationScopeに設定されます。
デフォルトを使用しない場合は、kie-deployment-descriptor.xml ファイルを使用してすべての設定を変更することができます。このファイルに対するすべての要素の完全な仕様は、XSD スキーマ にあります。
以下の例は、ランタイムエンジンを設定するカスタムの kie-deployment-descriptor.xml ファイルを示しています。この例では、最も一般的なオプションを設定し、1 つのワークアイテムハンドラーが含まれます。kie-deployment-descriptor.xml ファイルを使用して他のオプションを設定することもできます。
カスタム kie-deployment-descriptor.xml ファイルのサンプル
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<deployment-descriptor xsi:schemaLocation="http://www.jboss.org/jbpm deployment-descriptor.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<persistence-unit>org.jbpm.domain</persistence-unit>
<audit-persistence-unit>org.jbpm.domain</audit-persistence-unit>
<audit-mode>JPA</audit-mode>
<persistence-mode>JPA</persistence-mode>
<runtime-strategy>SINGLETON</runtime-strategy>
<marshalling-strategies/>
<event-listeners/>
<task-event-listeners/>
<globals/>
<work-item-handlers>
<work-item-handler>
<resolver>mvel</resolver>
<identifier>new org.jbpm.process.workitem.bpmn2.ServiceTaskHandler(ksession, classLoader)</identifier>
<parameters/>
<name>Service Task</name>
</work-item-handler>
</work-item-handlers>
<environment-entries/>
<configurations/>
<required-roles/>
<remoteable-classes/>
</deployment-descriptor>
RuntimeManager クラスを使用する場合、このクラスは KieContainer クラスではなく KieSession インスタンスを作成します。ただし、kie-deployment-descriptor.xml モデルは常に構築プロセスのベースとして使用されます。KieContainer クラスは常に KieBase インスタンスを作成します。
GAV (グループ、アーティファクト、バージョン) の値を使用して、他の Maven アーティファクトなどの KJAR アーティファクトを参照できます。KJAR ファイルからユニットをデプロイする場合、プロセスエンジンは GAV 値を KIE API のリリース ID として使用します。GAV 値を使用して、KJAR アーティファクトをランタイム環境 (例: KIE Server) にデプロイできます。
68.1.2. Maven を使用した依存関係管理
プロセスエンジンを組み込むプロジェクトをビルドする場合は、Apache Maven を使用してプロセスエンジンが必要とするすべての依存関係を設定します。
プロセスエンジンは、アーティファクトの依存関係を宣言するための一連の BOM (Bills of Material) を提供します。
プロジェクトの上部の pom.xml ファイルを使用して、以下の例のように、プロセスエンジンを埋め込む依存関係管理を定義します。この例には、アプリケーションがアプリケーションサーバーにデプロイされているか、サーブレットコンテナーにデプロイされているか、スタンドアロンアプリケーションとしてデプロイされているかに関係なく適用できる、メインのランタイム依存関係が含まれています。
この例には、プロセスエンジンを使用するアプリケーションが一般的に必要とするコンポーネントのバージョンプロパティーも含まれています。必要に応じて、コンポーネントおよびバージョンの一覧を調整します。製品チームが Github リポジトリーの親の pom.xml ファイル でテストしたサードパーティーの依存関係バージョンを確認することができます。
プロセスエンジンの埋め込み用 Maven 依存関係管理の設定
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<version.org.drools>7.48.0.Final-redhat-00004</version.org.drools>
<version.org.jbpm>7.48.0.Final-redhat-00004</version.org.jbpm>
<hibernate.version>5.3.17.Final</hibernate.version>
<hibernate.core.version>5.3.17.Final</hibernate.core.version>
<slf4j.version>1.7.26</slf4j.version>
<jboss.javaee.version>1.0.0.Final</jboss.javaee.version>
<logback.version>1.2.9</logback.version>
<h2.version>1.3.173</h2.version>
<narayana.version>5.9.0.Final</narayana.version>
<jta.version>1.0.1.Final</jta.version>
<junit.version>4.13.1</junit.version>
</properties>
<dependencyManagement>
<dependencies>
<!-- define Drools BOM -->
<dependency>
<groupId>org.drools</groupId>
<artifactId>drools-bom</artifactId>
<type>pom</type>
<version>${version.org.drools}</version>
<scope>import</scope>
</dependency>
<!-- define jBPM BOM -->
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-bom</artifactId>
<type>pom</type>
<version>${version.org.jbpm}</version>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
プロセスエンジン Java API (KIE API) を使用するモジュールでは、以下の例のように、必要なプロセスエンジンの依存関係やモジュールが必要とする他のコンポーネントを宣言します。
KIE API を使用するモジュールの依存関係
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-flow</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-flow-builder</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-bpmn2</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-persistence-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-human-task-core</artifactId>
</dependency>
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-runtime-manager</artifactId>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>${slf4j.version}</version>
</dependency>
アプリケーションが永続性およびトランザクションを使用する場合は、JTA フレームワークおよび JPA フレームワークを実装するアーティファクトを追加する必要があります。実際のデプロイメントの前にワークフローコンポーネントをテストするには、追加の依存関係が必要です。
以下の例は、JPA 用の Hibernate、永続性用の H2 データベース、JTA 用の Narayana、およびテストに必要なコンポーネントが含まれる依存関係を定義します。この例では、test スコープを使用します。アプリケーションに合わせて、この例を調整します。実稼働環境で使用する場合は、test スコープを削除します。
プロセスエンジンのテストモジュール依存関係の例
<!-- test dependencies -->
<dependency>
<groupId>org.jbpm</groupId>
<artifactId>jbpm-shared-services</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${logback.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>${hibernate.core.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>jboss-transaction-api_1.2_spec</groupId>
<artifactId>org.jboss.spec.javax.transaction</artifactId>
<version>${jta.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jboss.narayana.jta</groupId>
<artifactId>narayana-jta</artifactId>
<version>${narayana.version}</version>
<scope>test</scope>
</dependency>
この設定では、アプリケーションにプロセスエンジンを埋め込むことができ、KIE API を使用してプロセス、ルール、およびイベントと対話できます。
Maven リポジトリー
Maven 依存関係の Red Hat 製品バージョンを使用するには、トップレベルの pom.xml ファイルで Red Hat JBoss Enterprise Maven リポジトリーを設定する必要があります。このリポジトリーに関する詳細は、JBoss Enterprise Maven リポジトリー を参照してください。
または、Red Hat カスタマーポータルの Software Downloads ページから製品配信可能ファイル rhpam-7.10.0-maven-repository.zip をダウンロードし、このファイルの内容をローカルの Maven リポジトリーとして利用可能にします。