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 インストールの計画 を参照してください。

手順

  1. クライアントアプリケーションで、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? を参照してください。

  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 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));
  5. 実行可能なモデルから 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 の結果は、プロジェクトのコンパイルが成功したことと、ビルドプロセスの詳細を示しています。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.