第3章 Business Central を使用しないプロジェクトデプロイメント
Business Central インターフェイスにプロジェクトを開発およびデプロイする代わりに、独立した Maven プロジェクトまたは独自の Java アプリケーションを使用して、Red Hat Process Automation Manager プロジェクトを開発し、KIE コンテナー (デプロイメントユニット) のプロジェクトを、設定した KIE Server にデプロイします。KIE Server REST API を使用して、ビルドおよびデプロイしたサービスおよびプロジェクトバージョンを含む KIE コンテナーを起動、停止、または削除できます。このような柔軟性により、引き続き既存のアプリケーションのワークフローを使用して、Red Hat Process Automation Manager 機能を使用するビジネスアセットを開発できます。
Business Central のプロジェクトは、プロジェクトをビルドしてデプロイする際に自動的にパッケージ化されます。Business Central 以外のプロジェクト (独立した Maven プロジェクト、Java アプリケーションのプロジェクトなど) をビルドしてデプロイする場合は、追加した kmodule.xml
ファイルに KIE モジュール記述子設定を追加するか、Java アプリケーションに直接指定する必要があります。
3.1. KIE モジュール記述子ファイルの設定
KIE モジュールは、追加メタデータファイル META-INF/kmodule.xml
を持つ Maven プロジェクトまたはモジュールです。Red Hat Process Automation Manager プロジェクトを適切にパッケージングしてデプロイするには kmodule.xml
ファイルが必要になります。この kmodule.xml
ファイルは、プロジェクトのアセットの KIE ベースおよび KIE セッション設定を定義する KIE モジュール記述子ファイルです。KIE ベースには、Red Hat Process Automation Manager のルール、プロセス、その他のビジネスアセットがすべて含まれるリポジトリーですが、ランタイムデータは含まれません。KIE セッションは、ランタイムデータを保存および実行し、kmodule.xml
ファイルに KIE セッションを定義した場合は KIE ベース、または KIE コンテナーから直接作成されます。
Business Central 以外のプロジェクト (独立した Maven プロジェクト、Java アプリケーションのプロジェクトなど) を作成する場合は、追加した kmodule.xml
ファイルに KIE モジュール記述子設定を指定するか、Java アプリケーションに直接指定することでプロジェクトをビルドしてデプロイします。
手順
プロジェクトの
~/resources/META-INF
ディレクトリーに、最低でも以下の内容を含むkmodule.xml
メタデータを作成します。<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://www.drools.org/xsd/kmodule"> </kmodule>
プロジェクトの
resources
パスで見つかったすべてのファイルを含むデフォルトの KIE ベースを 1 つ作成するには、この空のkmodule.xml
ファイルで十分です。デフォルトの KIE ベースには、ビルド時にアプリケーションに KIE コンテナーを作成する際に発生するデフォルト KIE セッションも 1 つ含まれます。以下は、より高度な
kmodule.xml
ファイルの例です。<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.drools.org/xsd/kmodule"> <configuration> <property key="drools.evaluator.supersetOf" value="org.mycompany.SupersetOfEvaluatorDefinition"/> </configuration> <kbase name="KBase1" default="true" eventProcessingMode="cloud" equalsBehavior="equality" declarativeAgenda="enabled" packages="org.domain.pkg1"> <ksession name="KSession1_1" type="stateful" default="true" /> <ksession name="KSession1_2" type="stateful" default="true" beliefSystem="jtms" /> </kbase> <kbase name="KBase2" default="false" eventProcessingMode="stream" equalsBehavior="equality" declarativeAgenda="enabled" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1"> <ksession name="KSession2_1" type="stateless" default="true" clockType="realtime"> <fileLogger file="debugInfo" threaded="true" interval="10" /> <workItemHandlers> <workItemHandler name="name" type="new org.domain.WorkItemHandler()" /> </workItemHandlers> <listeners> <ruleRuntimeEventListener type="org.domain.RuleRuntimeListener" /> <agendaEventListener type="org.domain.FirstAgendaListener" /> <agendaEventListener type="org.domain.SecondAgendaListener" /> <processEventListener type="org.domain.ProcessListener" /> </listeners> </ksession> </kbase> </kmodule>
この例では、KIE ベースが 2 つ定義されます。ルールアセットの特定の
パッケージ
は両方 KIE ベースに含まれます。このようにパッケージを指定した場合は、指定したパッケージを反映するディレクトリー構造にルールファイルを整理する必要があります。KIE ベースKBase1
から 2 つの KIE セッションをインスタンス化し、KBase2
から KIE セッションを 1 つインスタンス化します。KBase2
の KIE セッションはステートレス
な KIE セッションですが、これは 1 つ前の KIE セッションで呼び出されたデータ (1 つ前のセッションの状態) が、セッションの呼び出しと呼び出しの間で破棄されることを示しています。また、その KIE セッションには、ファイル (またはコンソール) ロガー、WorkItemHandler
、サポートされる 3 種類のリスナー (ruleRuntimeEventListener
、agendaEventListener
、およびprocessEventListener
) も指定されます。<configuration>
要素は、kmodule.xml
ファイルをさらにカスタマイズするのに使用できる任意のプロパティーを定義します。プロジェクトに
kmodule.xml
ファイルを手動で追加する代わりに、Java アプリケーションのKieModuleModel
インスタンスを使用するか、プログラムでkmodule.xml
ファイルを作成し、KIE ベースおよび KIE セッションを定義し、KIE 仮想ファイルシステムKieFileSystem
に、プロジェクトのリソースをすべて追加します。プログラムを使用して
kmodule.xml
を作成し、KieFileSystem
に追加import org.kie.api.KieServices; import org.kie.api.builder.model.KieModuleModel; import org.kie.api.builder.model.KieBaseModel; import org.kie.api.builder.model.KieSessionModel; import org.kie.api.builder.KieFileSystem; KieServices kieServices = KieServices.Factory.get(); KieModuleModel kieModuleModel = kieServices.newKieModuleModel(); KieBaseModel kieBaseModel1 = kieModuleModel.newKieBaseModel("KBase1") .setDefault(true) .setEqualsBehavior(EqualityBehaviorOption.EQUALITY) .setEventProcessingMode(EventProcessingOption.STREAM); KieSessionModel ksessionModel1 = kieBaseModel1.newKieSessionModel("KSession1_1") .setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL) .setClockType(ClockTypeOption.get("realtime")); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.writeKModuleXML(kieModuleModel.toXML());
手動またはプログラムで
kmodule.xml
ファイルをプロジェクトに設定したら、設定を検証する KIE コンテナーから KIE ベースおよび KIE セッションを取得します。KieServices kieServices = KieServices.Factory.get(); KieContainer kContainer = kieServices.getKieClasspathContainer(); KieBase kBase1 = kContainer.getKieBase("KBase1"); KieSession kieSession1 = kContainer.newKieSession("KSession1_1"), kieSession2 = kContainer.newKieSession("KSession1_2"); KieBase kBase2 = kContainer.getKieBase("KBase2"); StatelessKieSession kieSession3 = kContainer.newStatelessKieSession("KSession2_1");
kmodule.xml
ファイルに、KieBase
またはKieSession
をdefault="true"
と設定している場合は、先ほどのkmodule.xml
例のように、名前を渡さずに KIE コンテナーから取得できます。KieContainer kContainer = ... KieBase kBase1 = kContainer.getKieBase(); KieSession kieSession1 = kContainer.newKieSession(), kieSession2 = kContainer.newKieSession(); KieBase kBase2 = kContainer.getKieBase(); StatelessKieSession kieSession3 = kContainer.newStatelessKieSession();
Red Hat Process Automation Manager ディストリビューションの以下のシステムプロパティーの値を変更して、デシジョンエンジンにキャッシュする KIE モジュールまたはアーティファクトバージョンの最大数を増減できます。
-
kie.repository.project.cache.size
: デシジョンエンジンにキャッシュする最大 KIE モジュール数。デフォルト値は100
です。 -
kie.repository.project.versions.cache.size
: デシジョンエンジンにキャッシュする同一のアーティファクトに対して最大指定可能なバージョン数。デフォルト値は10
です。
KIE リポジトリー設定の完全一覧については、Red Hat カスタマーポータル から Red Hat Process Automation Manager 7.12.0 Source Distribution の ZIP ファイルをダウンロードして、
~/rhpam-7.12.0-sources/src/drools-$VERSION/drools-compiler/src/main/java/org/drools/compiler/kie/builder/impl/KieRepositoryImpl.java
に移動してください。-
kmodule.xml
ファイルの詳細は、(まだダウンロードしていない場合には) Red Hat カスタマーポータル から Red Hat Process Automation Manager 7.12.0 Source Distribution の ZIP ファイルをダウンロードし、$FILE_HOME/rhpam-$VERSION-sources/kie-api-parent-$VERSION/kie-api/src/main/resources/org/kie/api/
に保存してある XML スキーマ kmodule.xsd
を参照してください。
3.1.1. KIE モジュール設定のプロパティー
プロジェクトにおいて、KIE モジュール記述子ファイル (kmodule.xml
) の任意の <configuration>
要素は、プロパティーの キー
および 値
ペアを定義し、kmodule.xml
ファイルをさらにカスタマイズするのに使用できます。
kmodule.xml
ファイルの設定プロパティーの例
<kmodule> ... <configuration> <property key="drools.dialect.default" value="java"/> ... </configuration> ... </kmodule>
以下は、プロジェクトの KIE モジュール記述子ファイル (kmodule.xml
) でサポートされる <configuration>
プロパティーのキーおよび値です。
- drools.dialect.default
デフォルトの Drools 方言を設定します。
サポートされる値:
java
、mvel
<property key="drools.dialect.default" value="java"/>
- drools.accumulate.function.$FUNCTION
指定した関数名に累積関数を実装するクラスのリンク。デシジョンエンジンにカスタムの累積関数を追加できます。
<property key="drools.accumulate.function.hyperMax" value="org.drools.custom.HyperMaxAccumulate"/>
- drools.evaluator.$EVALUATION
デシジョンエンジンにカスタムのエバリュエーターを追加できるように、指定したエバリュエーター名にエバリュエーター定義を実装するクラスをリンクします。エバリュエーターは、カスタムオペレーターと類似しています。
<property key="drools.evaluator.soundslike" value="org.drools.core.base.evaluators.SoundslikeEvaluatorsDefinition"/>
- drools.dump.dir
Red Hat Process Automation Manager の
dump/log
ディレクトリーにパスを設定します。<property key="drools.dump.dir" value="$DIR_PATH/dump/log"/>
- drools.defaultPackageName
プロジェクトのビジネスアセットにデフォルトパッケージを設定します。
<property key="drools.defaultPackageName" value="org.domain.pkg1"/>
- drools.parser.processStringEscapes
文字列のエスケープ機能を設定します。このプロパティーを
false
に設定すると、\n
文字が改行文字として解釈されません。サポートされる値:
true
(デフォルト)、false
<property key="drools.parser.processStringEscapes" value="true"/>
- drools.kbuilder.severity.$DUPLICATE
KIE ベースがビルドされたときに報告される重複したルール、プロセス、または関数のインスタンスの重大度を設定します。たとえば、
duplicateRule
をERROR
に設定すると、KIE ベースのビルド時に検出された重複ルールに対してエラーが生成されます。サポートされるキー接尾辞:
duplicateRule
、duplicateProcess
、duplicateFunction
サポートされる値:
INFO
、WARNING
、ERROR
<property key="drools.kbuilder.severity.duplicateRule" value="ERROR"/>
- drools.propertySpecific
デシジョンエンジンのプロパティーの反応を設定します。
サポートされる値:
DISABLED
、ALLOWED
、ALWAYS
<property key="drools.propertySpecific" value="ALLOWED"/>
- drools.lang.level
DRL 言語レベルを設定します。
サポートされる値:
DRL5
、DRL6
、DRL6_STRICT
(デフォルト)<property key="drools.lang.level" value="DRL_STRICT"/>
3.1.2. KIE モジュールでサポートされる KIE ベース属性
KIE ベースは、プロジェクトの KIE モジュール記述子ファイル (kmodule.xml
) を定義するリポジトリーで、Red Hat Process Automation Manager のルール、プロセス、その他のビジネスアセットが含まれます。kmodule.xml
ファイルで KIE ベースを定義した場合は、特定の属性および値を指定して、KIE ベース設定をさらにカスタマイズできます。
kmodule.xml
ファイルの KIE ベース設定例
<kmodule> ... <kbase name="KBase2" default="false" eventProcessingMode="stream" equalsBehavior="equality" declarativeAgenda="enabled" packages="org.domain.pkg2, org.domain.pkg3" includes="KBase1" sequential="false"> ... </kbase> ... </kmodule>
以下は、プロジェクトの KIE モジュール記述ファイル (kmodule.xml
) でサポートされる kbase
属性および値です。
属性 | サポートされている値 | 説明 |
---|---|---|
| すべての名前 |
|
| KIE モジュールのその他の KIE ベースオブジェクトのコンマ区切り一覧 |
この KIE ベースに追加するその他の KIE ベースオブジェクトとアーティファクトを定義します。モジュールの |
| KIE ベースに追加するパッケージのコンマ区切りの一覧
デフォルト値: |
(ルールやプロセスなど) この KIE ベースに追加するアーティファクトのパッケージを定義します。デフォルトでは、 |
|
デフォルト値: | KIE ベースは、モジュールのデフォルトの KIE ベースで、名前を渡さずに KIE コンテナーから作成できます。各モジュールにはデフォルトの KIE ベースを 1 つだけ指定できます。 |
|
デフォルト値: |
新しいファクトが作業メモリーに挿入された場合の Red Hat Process Automation Manager の動作を定義します。 |
|
デフォルト値: |
イベントが KIE ベースで処理される方法を指定します。このプロパティーを |
|
デフォルト値: | 宣言型アジェンダが有効かどうかを指定します。 |
|
デフォルト値: | シーケンシャルモードが有効かどうかを判断します。順次モードでは、デシジョンエンジンは、ワーキングメモリーでの変更に関係なく、デシジョンエンジンアジェンダにリスト化された順番でルールを一度評価します。ステートレスの KIE セッションを使用しており、ルールを実行することで、アジェンダで次に出てくるルールに影響を与えないようにするには、このプロパティーを有効にします。 |
3.1.3. KIE モジュールでサポートされる KIE セッション属性
KIE セッションがランタイムデータを保存および実行し、プロジェクトの KIE モジュール記述子ファイル (kmodule.xml
) で KIE セッションを定義した場合は KIE ベース、または KIE コンテナーから直接作成されます。KIE ベースおよび KIE セッションを kmodule.xml
ファイルに定義すると、特定の属性および値を指定して、KIE セッション設定をさらにカスタマイズできます。
kmodule.xml
ファイルの KIE セッション設定例
<kmodule> ... <kbase> ... <ksession name="KSession2_1" type="stateless" default="true" clockType="realtime"> ... </kbase> ... </kmodule>
以下は、プロジェクトの KIE モジュール記述子ファイル (kmodule.xml
) でサポートされている ksession
属性および値です。
属性 | サポートされている値 | 説明 |
---|---|---|
| すべての名前 |
|
|
デフォルト値: |
KIE セッションの呼び出しと呼び出しの間にデータを保持 ( |
|
デフォルト値: | KIE セッションをモジュールのデフォルトセッションにし、名前を渡さずに KIE コンテナーから作成できるようにするかどうかを指定します。各モジュールにはデフォルトの KIE セッションを 1 つだけ指定できます。 |
|
デフォルト値: | イベントのタイムスタンプを、アプリケーションが制御するシステムクロック、または疑似クロックから割り当てられるかどうかを指定します。このクロックは、一時的なルールをテストするユニットで特に便利です。 |
|
デフォルト値: | KIE セッションが使用する信念体系の種類を定義します。信念体系は、ナレッジ (ファクト) から事実を推測します。たとえば、後ほどデシジョンエンジンから削除される別のファクトに基づいて新しいファクトが挿入されると、この体系では、新たに挿入されたファクトも削除する必要があると判断します。 |