3.3. Red Hat Process Automation Manager プロジェクトの Java アプリケーションでのパッケージ化およびデプロイ

お使いの Java アプリケーションから、設定した KIE Server にプロジェクトをデプロイする場合は、KieModuleModel インスタンスを使用して kmodule.xml ファイルをプログラムで作成して KIE ベースおよび KIE セッションを定義し、プロジェクトのすべてのリソースを、KIE 仮想ファイルシステム KieFileSystem に追加します。

前提条件

  • Red Hat Process Automation Manager ビジネスアセットを含む Java アプリケーションがある。
  • KIE Server がインストールされており、kie-server ユーザーアクセスが設定されている。インストールオプションは、Red Hat Process Automation Manager インストールの計画 を参照してください。

手順

  1. 必要に応じて、プロジェクトに Decision Model and Notation (DMN) アセットが含まれる場合は、Java プロジェクトの該当のクラスパスに以下の依存関係を追加して、DMN 実行可能モデルを有効にしてください。DMN 実行可能モデルを使用すると、DMN プロジェクトの DMN デシジョンテーブルロジックをより効果的に評価できるようになります。

    <dependency>
      <groupId>org.kie</groupId>
      <artifactId>kie-dmn-core</artifactId>
      <scope>provided</scope>
      <version>${rhpam.version}</version>
    </dependency>

    <version> は、プロジェクトで現在使用している Red Hat Process Automation Manager の Maven アーティファクトバージョンです (例: 7.59.0.Final-redhat-00006)。

    注記

    個別の依存関係に対して Red Hat Process Automation Manager <version> を指定するのではなく、Red Hat Business Automation BOM (bill of materials) の依存関係をプロジェクトの 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.12.0.redhat-00008</version>
      <scope>import</scope>
      <type>pom</type>
    </dependency>

    Red Hat Business Automation BOM (Bill of Materials) に関する詳細情報は、What is the mapping between Red Hat Process Automation Manager and the Maven library version? を参照してください。

  2. KieServices API を使用して、必要な KIE ベースおよび KIE セッションを持つ KieModuleModel インスタンスを作成します。KieServices API を使用すれば、KIE ビルド設定およびランタイム設定のすべてにアクセスできます。KieModuleModel インスタンスは、プロジェクトの kmodule.xml ファイルを生成します。

    kmodule.xml 設定の詳細は 「KIE モジュール記述子ファイルの設定」 を参照してください。

  3. 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());

  4. プロジェクトで使用する残りの Red Hat Process Automation 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));
  5. 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>${rhpam.version}</version>
    </dependency>

    この依存関係は、Red Hat Process Automation Manager のルールアセットが実行可能なルールモデルからビルドされるために必要です。Red Hat Process Automation Manager のコアパッケージに、この依存関係は同梱されていますが、Red Hat Process Automation Manager のアップグレード履歴によっては、この依存関係を手動で追加して、実行可能なルールモデルの動作を有効にする必要がある場合があります。

    依存関係を確認したあとに、以下のように変更した buildAll() オプションを使用して実行可能なモデルを有効にします。

    kieBuilder.buildAll(ExecutableModelProject.class)

    実行可能なルールモデルの詳細は、「実行可能ルールモデル」 を参照してください。