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.23.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.4.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 コンテナーを作成して、デプロイします。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の結果は、プロジェクトのコンパイルが成功したことと、ビルドプロセスの詳細を示しています。