3.3. Java アプリケーションでの Red Hat Decision Manager プロジェクトのパッケージ化およびデプロイ
お使いの Java アプリケーションから、設定した KIE Server にプロジェクトをデプロイする場合は、KieModuleModel インスタンスを使用して kmodule.xml ファイルをプログラムで作成して KIE ベースおよび KIE セッションを定義し、プロジェクトのすべてのリソースを、KIE 仮想ファイルシステム KieFileSystem に追加します。
前提条件
- Red Hat Decision Manager ビジネスアセットを含む Java アプリケーションがある。
-
KIE Server がインストールされており、
kie-serverユーザーアクセスが設定されている。インストールオプションについては、Planning a Red Hat Decision Manager installation を参照してください。
手順
(オプション) プロジェクトに Decision Model and Notation (DMN) アセットが含まれる場合は、Java プロジェクトの該当のクラスパスに、以下の依存関係を追加して、DMN 実行可能モデルを有効にしてください。DMN 実行可能モデルを使用すると、DMN プロジェクトの DMN デシジョンテーブルロジックをより効果的に評価できるようになります。
<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.39.0.Final-redhat-00005)。注記個別の依存関係に対して 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.8.0.redhat-00005</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));buildAll()メソッドとKieBuilderを併用してKieFileSystemのコンテンツをビルドし、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 ); kieBuilder.buildAll() assertEquals(0, kieBuilder.getResults().getMessages(Message.Level.ERROR).size()); KieContainer kieContainer = kieServices .newKieContainer(kieServices.getRepository().getDefaultReleaseId());ERRORビルドは、プロジェクトのコンパイルに失敗し、KieModuleが作成されず、KieRepositoryシングルトンに何も追加されないことを示しています。WARNINGまたはINFOの結果は、プロジェクトのコンパイルが成功したことと、ビルドプロセスの詳細を示しています。注記実行可能なルールモデルから Java アプリケーションプロジェクトでルールアセットをビルドするには、プロジェクトの
pom.xmlファイルに以下の依存関係があることを確認します。<dependency> <groupId>org.drools</groupId> <artifactId>drools-model-compiler</artifactId> <version>${rhdm.version}</version> </dependency>この依存関係は、Red Hat Decision Manager のルールアセットが実行可能なルールモデルからビルドされるようにするために必要です。Red Hat Decision Manager のコアパッケージにこの依存関係は同梱されていますが、Red Hat Decision Manager のアップグレード履歴によっては、この依存関係を手動で追加して、実行可能なルールモデルの動作を有効にしないといけない場合があります。
依存関係を確認したあとに、以下のように変更した
buildAll()オプションを使用して実行可能なモデルを有効にします。kieBuilder.buildAll(ExecutableModelProject.class)
実行可能なルールモデルの詳細は、「実行可能ルールモデル」 を参照してください。