Red Hat Training
A Red Hat training course is available for Red Hat Decision Manager
第3章 Decision Central を使用しないプロジェクトデプロイメント
Decision Central インターフェースにプロジェクトを開発およびデプロイする代わりに、独立した Maven プロジェクトまたは独自の Java アプリケーションを使用して、Red Hat Decision Manager プロジェクトを開発し、KIE コンテナー (デプロイメントユニット) のプロジェクトを、設定した Decision Server にデプロイします。Decision Server REST API を使用して、ビルドおよびデプロイしたサービスおよびプロジェクトバージョンを含む KIE コンテナーを起動、停止、または削除できます。このような柔軟性により、引き続き既存のアプリケーションのワークフローを使用して、Red Hat Decision Manager 機能を使用するビジネスアセットを開発できます。
Decision Central のプロジェクトは、プロジェクトをビルドしてデプロイする際に自動的にパッケージ化されます。Decision Central 以外のプロジェクト (独立した Maven プロジェクト、Java アプリケーションのプロジェクトなど) をビルドしてデプロイする場合は、追加した kmodule.xml ファイルに KIE モジュール記述子設定を追加するか、Java アプリケーションに直接指定する必要があります。
3.1. KIE モジュール記述子ファイルの設定
KIE モジュールは、追加メタデータファイル META-INF/kmodule.xml を持つ Maven プロジェクトまたはモジュールです。Red Hat Decision Manager プロジェクトを適切にパッケージングしてデプロイするには kmodule.xml ファイルが必要になります。この kmodule.xml ファイルは、プロジェクトのアセットの KIE ベースおよび KIE セッション設定を定義する KIE モジュール記述子ファイルです。KIE ベースには、Red Hat Decision Manager のルール、その他のビジネスアセットのすべてが含まれるリポジトリーですが、ランタイムデータは含まれません。KIE セッションは、ランタイムデータを保存および実行し、 kmodule.xml ファイルに KIE セッションを定義した場合は KIE ベース、または KIE コンテナーから直接作成されます。
Decision 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();
kmodule.xml ファイルの詳細は、Red Hat Decision Manager [VERSION] Source Distribution ZIP ファイルを Red Hat カスタマーポータル から取得し、$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 Decision 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 Decision 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">
...
</kbase>
...
</kmodule>
以下は、プロジェクトの KIE モジュール記述ファイル (kmodule.xml) でサポートされる kbase 属性および値です。
表3.1 KIE モジュールでサポートされる KIE ベース属性
| 属性 | サポートされている値 | 説明 |
|---|---|---|
|
|
すべての名前 |
|
|
|
KIE モジュールのその他の KIE ベースオブジェクトのコンマ区切り一覧 |
この KIE ベースに追加するその他の KIE ベースオブジェクトとアーティファクトを定義します。モジュールの |
|
|
KIE ベースに追加するパッケージのコンマ区切りの一覧
デフォルト値: |
(ルールやプロセスなど) この KIE ベースに追加するアーティファクトのパッケージを定義します。デフォルトでは、 |
|
|
デフォルト値: |
KIE ベースは、モジュールのデフォルトの KIE ベースで、名前を渡さずに KIE コンテナーから作成できます。各モジュールにはデフォルトの KIE ベースを 1 つだけ指定できます。 |
|
|
デフォルト値: |
新しいファクトが作業メモリーに挿入された場合の Red Hat Decision Manager の動作を定義します。 |
|
|
デフォルト値: |
イベントが 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 属性および値です。
表3.2 KIE モジュールでサポートされる KIE セッション属性
| 属性 | サポートされている値 | 説明 |
|---|---|---|
|
|
すべての名前 |
|
|
|
デフォルト値: |
KIE セッションの呼び出しと呼び出しの間にデータを保持 ( |
|
|
デフォルト値: |
KIE セッションをモジュールのデフォルトセッションにし、名前を渡さずに KIE コンテナーから作成できるようにするかどうかを指定します。各モジュールにはデフォルトの KIE セッションを 1 つだけ指定できます。 |
|
|
デフォルト値: |
イベントのタイムスタンプをシステムクロック、または疑似クロックから割り当てられるかどうかを指定します。このクロックは、一時的なルールをテストするユニットで特に便利です。 |
|
|
デフォルト値: |
KIE セッションが使用する信念体系の種類を定義します。信念体系は、ナレッジ (ファクト) から事実を推測します。たとえば、後ほどデシジョンエンジンから削除される別のファクトに基づいて新しいファクトが挿入されると、この体系では、新たに挿入されたファクトも削除する必要があると判断します。 |
3.2. Red Hat Decision Manager プロジェクトの Maven でのパッケージ化およびデプロイ
Decision Central 以外の Maven プロジェクトを、設定した Decision Server にデプロイする場合は、プロジェクトの pom.xml ファイルを編集して、プロジェクトを KJAR ファイルとしてパッケージ化し、プロジェクトのアセットに対する KIE ベースおよび KIE セッションの設定が含まれる kmodule.xml ファイルを追加します。
前提条件/事前作業
- Red Hat Decision Manager ビジネスアセットを含む Maven 化されたプロジェクトがあること
-
Decision Server がインストールされており、
kie-serverユーザーアクセスが設定されている。インストールオプションは『Red Hat Decision Manager インストールの計画』を参照してください。
手順
Maven プロジェクトの
pom.xmlファイルで、パッケージタイプをkjarに設定し、kie-maven-pluginビルドコンポーネントを追加します。<packaging>kjar</packaging> ... <build> <plugins> <plugin> <groupId>org.kie</groupId> <artifactId>kie-maven-plugin</artifactId> <version>${rhdm.version}</version> <extensions>true</extensions> </plugin> </plugins> </build>kjarパッケージングタイプは、kie-maven-pluginコンポーネントをアクティブにして、アーティファクトリソースを検証してプリコンパイルします。<version>は、プロジェクトで現在使用される Red Hat Decision Manager の Maven アーティファクトのバージョン (例: 7.11.0.Final-redhat-00002) で、デプロイメントに Maven プロジェクトを適切にパッケージがするのに必要です。注記個別の依存関係に対して Red Hat Decision Manager
<version>を指定するのではなく、Red Hat Business Automation 部品表 (BOM) の依存関係をプロジェクトのpom.xmlファイルに追加することを検討してください。Red Hat Business Automation BOM は、Red Hat Decision Manager と Red Hat Process Automation Manager の両方に適用します。BOM ファイルを追加すると、指定の Maven リポジトリーからの一時的な依存関係の内、正しいバージョンが、このプロジェクトに追加されます。BOM 依存関係の例:
<dependency> <groupId>com.redhat.ba</groupId> <artifactId>ba-platform-bom</artifactId> <version>7.1.0.GA-redhat-00002</version> <scope>import</scope> <type>pom</type> </dependency>
Red Hat Business Automation BOM (Bill of Materials) についての詳細情報は、What is the mapping between Red Hat Decision Manager and the Maven library version? を参照してください。
以下の依存関係を
pom.xmlファイルに追加して、ルールアセットから実行可能なルールモデルを生成します。-
drools-canonical-model: Red Hat Decision Manager から独立するルールセットモデルの実行可能な正規表現を有効にします。 -
drools-model-compiler: デシジョンエンジンでRed Hat Decision Manager の内部データ構造に実行可能なモデルをコンパイルします。
<dependency> <groupId>org.drools</groupId> <artifactId>drools-canonical-model</artifactId> <version>${rhdm.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-model-compiler</artifactId> <version>${rhdm.version}</version> </dependency>実行可能ルールモデルは埋め込み可能なモデルで、ビルド時に実行するルールセットの Java ベース表記を提供します。実行可能モデルは Red Hat Decision Manager の標準アセットパッケージングの代わりとなるもので、より効率的です。KIE コンテナーと KIE ベースの作成がより迅速にでき、DRL (Drools Rule Language) ファイルリストや他の Red Hat Decision Manager アセットが多い場合は、特に有効です。
実行可能ルールについての詳細は、Designing a decision service using DRL rules の "Executable rule models" を参照してください。
-
Maven プロジェクトの
~/resourcesディレクトリーに、最低でも以下の内容を含むMETA-INF/kmodule.xmlメタデータファイルを作成します。<?xml version="1.0" encoding="UTF-8"?> <kmodule xmlns="http://www.drools.org/xsd/kmodule"> </kmodule>
この
kmodule.xmlファイルは、すべての Red Hat Decision Manager プロジェクトに必要な KIE モジュール記述子です。KIE モジュールを使用して、1 つ以上の KIE ベースを定義し、各 KIE ベースに 1 つ以上の KIE セッションを定義します。kmodule.xml設定の詳細は「KIE モジュール記述子ファイルの設定」を参照してください。Maven プロジェクトの関連リソースで、
.javaクラスを設定して KIE コンテナーおよび KIE セッションを作成して、KIE ベースをロードします。import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; public void testApp() { // Load the KIE base: KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.getKieClasspathContainer(); KieSession kSession = kContainer.newKieSession(); }この例では、KIE コンテナーは、
testAppプロジェクトのクラスパスからビルドしたファイルを読み込みます。KieServicesAPI を使用すれば、KIE ビルド設定およびランタイム設定のすべてにアクセスできます。プロジェクトの
ReleaseIdをKieServicesAPI に渡して KIE コンテナーを作成することもできます。ReleaseIdは、プロジェクトのpom.xmlファイルのGroupId値、ArtifactId値、Version値 (GAV) から生成します。import org.kie.api.KieServices; import org.kie.api.runtime.KieContainer; import org.kie.api.runtime.KieSession; public void testApp() { // Identify the project in the local repository: ReleaseId rid = new ReleaseId(); rid.setGroupId("com.sample"); rid.setArtifactId("my-app"); rid.setVersion("1.0.0"); // Load the KIE base: KieServices ks = KieServices.Factory.get(); KieContainer kContainer = ks.newKieContainer(rid); KieSession kSession = kContainer.newKieSession(); }コマンドターミナルで Maven プロジェクトディレクトリーに移動して、以下のコマンドを実行し、実行可能なモデルからプロジェクトをビルドします。
mvn clean install -DgenerateModel=<VALUE>
ルールアセットが実行可能なルールでビルドされるように、
-DgenerateModel=<VALUE>プロパティーで、プロジェクトが DRL ベースの KJAR ではなく、モデルベースの KJAR としてビルドできるようにします。<VALUE>は、3 つの値のいずれかに置き換えます。-
YES: オリジナルプロジェクトの DRL ファイルに対応する実行可能なモデルを生成し、生成した KJAR から DRL ファイルを除外します。 -
WITHDRL: オリジナルプロジェクトの DRL ファイルに対応する実行可能なモデルを生成し、文書化の目的で、生成した KJAR に DRL ファイルを追加します (KIE ベースはいずれの場合でも実行可能なモデルからビルドされます)。 -
NO: 実行可能なモデルは生成されません。
ビルドコマンドの例:
mvn clean install -DgenerateModel=YES
ビルドに失敗したら、コマンドラインのエラーメッセージに記載されている問題に対応し、ビルドに成功するまでファイルの妥当性確認を行います。
-
プロジェクトをローカルで正常にビルドしてテストした後に、プロジェクトをリモートの Maven リポジトリーにデプロイします。
mvn deploy
3.3. Red Hat Decision Manager プロジェクトの Java アプリケーションでのパッケージ化およびデプロイ
お使いの Java アプリケーションから、設定した Decision Server にプロジェクトをデプロイする場合は、KieModuleModel インスタンスを使用して kmodule.xml ファイルをプログラムで作成して KIE ベースおよび KIE セッションを定義し、プロジェクトのすべてのリソースを、KIE 仮想ファイルシステム KieFileSystem に追加します。
前提条件/事前作業
- Red Hat Decision Manager ビジネスアセットを含む Java アプリケーションがあること
-
Decision Server がインストールされており、
kie-serverユーザーアクセスが設定されている。インストールオプションは『Red Hat Decision Manager インストールの計画』を参照してください。
手順
クライアントアプリケーションで、Java プロジェクトの関連のクラスパスに、以下の依存関係を追加して、ルールアセットから実行可能なルールモデルを生成します。
-
drools-canonical-model: Red Hat Decision Manager から独立するルールセットモデルの実行可能な正規表現を有効にします。 -
drools-model-compiler: デシジョンエンジンでRed Hat Decision Manager の内部データ構造に実行可能なモデルをコンパイルします。
<dependency> <groupId>org.drools</groupId> <artifactId>drools-canonical-model</artifactId> <version>${rhdm.version}</version> </dependency> <dependency> <groupId>org.drools</groupId> <artifactId>drools-model-compiler</artifactId> <version>${rhdm.version}</version> </dependency>実行可能ルールモデルは埋め込み可能なモデルで、ビルド時に実行するルールセットの Java ベース表記を提供します。実行可能モデルは Red Hat Decision Manager の標準アセットパッケージングの代わりとなるもので、より効率的です。KIE コンテナーと KIE ベースの作成がより迅速にでき、DRL (Drools Rule Language) ファイルリストや他の Red Hat Decision Manager アセットが多い場合は、特に有効です。
実行可能ルールについての詳細は、Designing a decision service using DRL rules の "Executable rule models" を参照してください。
<version>は、プロジェクトで現在使用する Red Hat Decision Manager の Maven アーティファクトバージョンです (例: 7.11.0.Final-redhat-00002)。注記個別の依存関係に対して Red Hat Decision Manager
<version>を指定するのではなく、Red Hat Business Automation 部品表 (BOM) の依存関係をプロジェクトのpom.xmlファイルに追加することを検討してください。Red Hat Business Automation BOM は、Red Hat Decision Manager と Red Hat Process Automation Manager の両方に適用します。BOM ファイルを追加すると、指定の Maven リポジトリーからの一時的な依存関係の内、正しいバージョンが、このプロジェクトに追加されます。BOM 依存関係の例:
<dependency> <groupId>com.redhat.ba</groupId> <artifactId>ba-platform-bom</artifactId> <version>7.1.0.GA-redhat-00002</version> <scope>import</scope> <type>pom</type> </dependency>
Red Hat Business Automation BOM (Bill of Materials) についての詳細情報は、What is the mapping between Red Hat Decision Manager and the Maven library version? を参照してください。
-
KieServicesAPI を使用して、必要な KIE ベースおよび KIE セッションを持つKieModuleModelインスタンスを作成します。KieServicesAPI を使用して、KIE ビルド設定およびランタイム設定にアクセスできます。KieModuleModelインスタンスは、プロジェクトのkmodule.xmlファイルを生成します。kmodule.xml設定の詳細は「KIE モジュール記述子ファイルの設定」を参照してください。KieModuleModelインスタンスを XML に変換し、XML を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") .setDefault(true) .setType(KieSessionModel.KieSessionType.STATEFUL) .setClockType(ClockTypeOption.get("realtime")); KieFileSystem kfs = kieServices.newKieFileSystem(); kfs.writeKModuleXML(kieModuleModel.toXML());プロジェクトで使用する残りの Red Hat Decision Manager アセットをすべて
KieFileSystemインスタンスに追加します。アーティファクトは、Maven プロジェクトファイル構造に含まれる必要があります。import org.kie.api.builder.KieFileSystem; KieFileSystem kfs = ... kfs.write("src/main/resources/KBase1/ruleSet1.drl", stringContainingAValidDRL) .write("src/main/resources/dtable.xls", kieServices.getResources().newInputStreamResource(dtableFileStream));この例では、プロジェクトアセットは、
String変数およびResourceインスタンスの両方として追加されます。ResourceインスタンスはKieResourcesファクトリーを使用して作成され、KieServicesインスタンスにより提供されます。KieResourcesクラスは、InputStreamオブジェクト、URLオブジェクト、およびFileオブジェクト、またはファイルシステムのパスを示すStringを、KieFileSystemが管理するResourceインスタンスに変換する factory メソッドを提供します。プロジェクトのアーティファクトを
KieFileSystemに追加する際に、ResourceTypeプロパティーをResourceオブジェクトに明示的に割り当てることもできます。import org.kie.api.builder.KieFileSystem; KieFileSystem kfs = ... kfs.write("src/main/resources/myDrl.txt", kieServices.getResources().newInputStreamResource(drlStream) .setResourceType(ResourceType.DRL));実行可能なモデルから
KieFileSystemのコンテンツをビルドするように、buildAll( ExecutableModelProject.class )を指定してKieBuilderを使用し、KIE コンテナーを作成して、デプロイします。2import org.kie.api.KieServices; import org.kie.api.KieServices.Factory; import org.kie.api.builder.KieFileSystem; import org.kie.api.builder.KieBuilder; import org.kie.api.runtime.KieContainer; KieServices kieServices = KieServices.Factory.get(); KieFileSystem kfs = ... KieBuilder kieBuilder = ks.newKieBuilder( kfs ); // Build from an executable model kieBuilder.buildAll( ExecutableModelProject.class ) assertEquals(0, kieBuilder.getResults().getMessages(Message.Level.ERROR).size()); KieContainer kieContainer = kieServices .newKieContainer(kieServices.getRepository().getDefaultReleaseId());実行可能なモデルから
KieFileSystemをビルドした後に、作成されたKieSessionは効率のあまりよくないmvel式ではなく、lambda 式をもとにした制約を使用します。実行可能なモデルなしに、標準の手法でプロジェクトをビルドするには、buildAll()で引数を指定しないでください。ERRORビルドは、プロジェクトのコンパイルに失敗し、KieModuleが作成されず、KieRepositoryシングルトンに何も追加されないことを示しています。WARNINGまたはINFOの結果は、プロジェクトのコンパイルが成功したことと、ビルドプロセスの詳細を示しています。
3.4. Decision Server でのサービスの起動
Decision Central 以外の Maven または Java プロジェクトから Red Hat Decision Manager アセットをデプロイした場合は、Decision Server REST API コールを使用して、KIE コンテナー (デプロイメントユニット) およびそのサービスを起動できます。Decision Server REST API を使用して、デプロイメントの種類 (Decision Central からのデプロイメントを含む) に拘わらず、サービスを起動できますが、Decision Central からデプロイしたプロジェクトは自動的に起動するか、Decision Central インターフェース内で起動できます。
前提条件
Decision Server がインストールされており、kie-server ユーザーアクセスが設定されている。インストールオプションは『Red Hat Decision Manager インストールの計画』を参照してください。
手順
コマンドターミナルで以下の API 要求を実行し、Decision Server の KIE コンテナーにサービスをロードして起動します。
$ curl --user "<username>:<password>" -H "Content-Type: application/json" -X PUT -d '{"container-id" : "<containerID>","release-id" : {"group-id" : "<groupID>","artifact-id" : "<artifactID>","version" : "<version>"}}' http://<serverhost>:<serverport>/kie-server/services/rest/server/containers/<containerID>以下の値を置き換えてください。
-
<username>、<password>:
kie-serverロールを持つユーザーのユーザー名およびパスワード。 - <containerID>: KIE コンテナー (デプロイメントユニット) の識別子。ランダムの識別子を使用することもできますが、コマンドの URL およびデータの両方で同じものを使用する必要があります。
- <groupID>、<artifactID>、<version>: プロジェクトの GAV 値。
-
<serverhost>: Decision Server のホスト名 (Decision Server と同じホストでコマンドを実行する場合は
localhost)。 - <serverport>: Decision Server のポート番号。
例:
curl --user "rhdmAdmin:password@1" -H "Content-Type: application/json" -X PUT -d '{"container-id" : "kie1","release-id" : {"group-id" : "org.kie.server.testing","artifact-id" : "container-crud-tests1","version" : "2.1.0.GA"}}' http://localhost:39043/kie-server/services/rest/server/containers/kie13.5. Decision Server でのサービスの停止および削除
Decision Central 以外の Maven または Java プロジェクトから Red Hat Decision Manager サービスを起動した場合は、Decision Server REST API コールを使用して、サービスを含む KIE コンテナー (デプロイメントユニット) を停止して削除できます。Decision Server REST API を使用して、デプロイメントの種類 (Decision Central からのデプロイメントを含む) にかかわらずサービスを停止できますが、Decision Central からのサービスは Decision Central インターフェース内で停止できます。
前提条件
Decision Server がインストールされており、kie-server ユーザーアクセスが設定されている。インストールオプションは『Red Hat Decision Manager インストールの計画』を参照してください。
手順
コマンドターミナルで、以下の API 要求を実行して、Decision Server のサービスで KIE コンテナーを停止および削除します。
$ curl --user "<username>:<password>" -X DELETE http://<serverhost>:<serverport>/kie-server/services/rest/server/containers/<containerID>
以下の値を置き換えてください。
-
<username>、<password>:
kie-serverロールを持つユーザーのユーザー名およびパスワード。 - <containerID>: KIE コンテナー (デプロイメントユニット) の識別子。ランダムの識別子を使用することもできますが、コマンドの URL およびデータの両方で同じものを使用する必要があります。
-
<serverhost>: Decision Server のホスト名 (Decision Server と同じホストでコマンドを実行する場合は
localhost)。 - <serverport>: Decision Server のポート番号。
例:
curl --user "rhdmAdmin:password@1" -X DELETE http://localhost:39043/kie-server/services/rest/server/containers/kie1