3.4. 実行可能ルールモデル

Red Hat Process Automation Manager のルールアセットは、標準の kie-maven-plugin を使用して、デフォルトで実行可能なルールモデルからビルドされます。実行可能ルールモデルは埋め込み可能なモデルで、ビルド時に実行するルールセットの Java ベースの表記を提供します。実行可能モデルは、以前の Red Hat Process Automation Manager バージョンの標準アセットパッケージングの代わるもので、より効率的です。KIE コンテナーと KIE ベースの作成をより迅速に実行でき、DRL (Drools Rule Language) ファイルや他の Red Hat Process Automation Manager アセットの一覧のサイズが大きい場合にとくに効果的です。

kie-maven-plugin プラグインを使用しない場合や、必要な drools-model-compiler 依存関係がプロジェクトにない場合、ルールアセットは実行可能モデルなしでビルドされます。したがって、ビルド時に実行可能なモデルを生成するには、プロジェクトの pom.xml ファイルに kie-maven-plugin プラグインおよび drools-model-compiler 依存関係が追加されていることを確認します。

実行可能なルールモデルでは、プロジェクトにとって具体的に以下のような利点があります。

  • コンパイル時間: 従来のパッケージ化された Red Hat Process Automation Manager プロジェクト (KJAR) には、制限や結果を実装する事前生成済みのクラスと合わせて、ルールベースを定義する DRL ファイルのリストやその他の Red Hat Process Automation Manager アーティファクトが含まれています。これらの DRL ファイルは、KJAR が Maven リポジトリーからダウンロードされ、KIE コンテナーにインストールされた時点で、解析してコンパイルする必要があります。特に大規模なルールセットの場合など、このプロセスは時間がかかる可能性があります。実行可能なモデルでは、プロジェクト KJAR 内で、Java クラスをパッケージ化して、プロジェクトルールベースの実行可能なモデルを実装し、はるかに速い方法で KIE コンテナーと KIE ベースを再作成することができます。Maven プロジェクトでは、kie-maven-plugin プラグインを使用してコンパイルプロセス中に DRL ファイルから実行可能なモデルソースを自動的に生成します。
  • ランタイム: 実行可能なモデルでは、制約はすべて、Java lambda 式で定義されます。同じ lambda 式も制約評価に使用するため、mvel ベースの制約をバイトコードに変換するのに、解釈評価用の mvel 式も、Just-In-Time (JIT) プロセスも使用しません。これにより、さらに迅速で効率的なランタイムを構築できます。
  • 開発時間: 実行可能なモデルでは、DRL 形式で直接要素をエンコードしたり、DRL パーサーを対応するように変更したりする必要なく、デシジョンエンジンの新機能で開発および試行できます。
注記

実行可能なルールモデルのクエリー定義に使用できるのは、引数最大 10 個のみです。

実行可能なルールモデルのルール結果内にある変数で使用できるバインド変数は、最大 24 個のみとなっています (同梱されている drools 変数を含む)。たとえば、以下のルールの結果では、バインド変数を 24 個以上使用しているため、コンパイルエラーが発生します。

...
then
  $input.setNo25Count(functions.sumOf(new Object[]{$no1Count_1, $no2Count_1, $no3Count_1, ..., $no25Count_1}).intValue());
  $input.getFirings().add("fired");
  update($input);

3.4.1. Red Hat Process Automation Manager プロジェクトでの実行可能ルールモデルの変更または無効化

Red Hat Process Automation Manager のルールアセットは、標準の kie-maven-plugin を使用して、デフォルトで実行可能なルールモデルからビルドされます。実行可能モデルは、Red Hat Process Automation Manager のこれまでのバージョンで使用した標準アセットパッケージよりもより効率的です。ただし、必要に応じて、実行可能ルールモデルを変更または無効にして、デフォルトのモデルベースの KJAR ではなく、DRL ベースの KJAR として Red Hat Process Automation Manager プロジェクトをビルドできます。

手順

通常の方法で Red Hat Process Automation Manager プロジェクトをビルドします。ただし、プロジェクトの種類に合わせて、別のビルドオプションを用意してください。

  • Maven プロジェクトの場合は、コマンドターミナルで Maven プロジェクトディレクトリーに移動して、以下のコマンドを実行します。

    mvn clean install -DgenerateModel=<VALUE>

    <VALUE> は、3 つの値のいずれかに置き換えます。

    • YES_WITHDRL: (デフォルト) オリジナルプロジェクトの DRL ファイルに対応する実行可能なモデルを生成し、文書化の目的で、生成した KJAR に DRL ファイルを追加します (KIE ベースはいずれの場合でも実行可能なモデルからビルドされます)。
    • YES: オリジナルプロジェクトの DRL ファイルに対応する実行可能なモデルを生成し、生成した KJAR から DRL ファイルを除外します。
    • NO: 実行可能なモデルは生成されません。

    デフォルトの実行可能モデルの動作を無効にするビルドコマンドの例:

    mvn clean install -DgenerateModel=NO
  • プログラムで設定した Java アプリケーションの場合、実行可能なモデルはデフォルトで無効になっています。KIE 仮想ファイルシステム KieFileSystem にルールアセットを追加して、以下の buildAll() メソッドのいずれかと KieBuilder をあわせて使用してください。

    • buildAll() (デフォルト) または buildAll(DrlProject.class): 実行可能なモデルは生成されません。
    • buildAll(ExecutableModelProject.class): 元のプロジェクトにある DRL ファイルに対応する実行可能モデルが生成されます。

    実行可能モデルの動作を有効にするコードの例:

    import org.kie.api.KieServices;
    import org.kie.api.builder.KieFileSystem;
    import org.kie.api.builder.KieBuilder;
    
      KieServices ks = KieServices.Factory.get();
      KieFileSystem kfs = ks.newKieFileSystem()
      kfs.write("src/main/resources/KBase1/ruleSet1.drl", stringContainingAValidDRL)
      .write("src/main/resources/dtable.xls",
        kieServices.getResources().newInputStreamResource(dtableFileStream));
    
      KieBuilder kieBuilder = ks.newKieBuilder( kfs );
      // Enable executable model
      kieBuilder.buildAll(ExecutableModelProject.class)
      assertEquals(0, kieBuilder.getResults().getMessages(Message.Level.ERROR).size());