3.3. Java アプリケーションでの Red Hat Decision Manager プロジェクトのパッケージ化およびデプロイ
お使いの 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 アセットが多い場合は、特に有効です。
実行可能なルールモデルの詳細は、DRL ルールを使用したデシジョンサービスの作成を参照してください。
プロジェクト内にある DMN アセットの Decision Model and Notation (DMN) 実行可能モデルを有効にするには (該当する場合)、
pom.xml
ファイルにkie-dmn-core
の依存関係も追加します。<dependency> <groupId>org.kie</groupId> <artifactId>kie-dmn-core</artifactId> <scope>provided</scope> <version>${rhdm.version}</version> </dependency>
<version>
は、プロジェクトで現在使用する Red Hat Decision Manager の Maven アーティファクトバージョンです (例: 7.14.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.2.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? を参照してください。
-
KieServices
API を使用して、必要な KIE ベースおよび KIE セッションを持つKieModuleModel
インスタンスを作成します。KieServices
API を使用すれば、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 コンテナーを作成して、デプロイします。import 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
の結果は、プロジェクトのコンパイルが成功したことと、ビルドプロセスの詳細を示しています。