第6章 自己完結型 Red Hat Decision Manager Spring Boot JAR ファイルの作成

KIE Server および 1 つ以上の KJAR ファイルなど、完全なサービスを含む、自己完結型 Red Hat Decision Manager Spring Boot JAR ファイル 1 つを作成できます。Red Hat Decision Manager Spring Boot JAR ファイルは、ランタイム時に読み込まれる KJAR ファイルには依存しません。

必要に応じて、Red Hat Decision Manager Spring Boot JAR ファイルには、モジュールを含む、同じ KJAR ファイルの複数のバージョンを含めることができます。これらの KJAR ファイルは、artifactID 属性値と groupID 属性値が同じですが、version の値は異なります。

含める KJAR ファイルは、クラ出力ダーの衝突を避けるために BOOT-INF/lib ディレクトリーの JAR ファイルから分離されています。各 KJAR クラスパスコンテナーファイルは、他の KJAR クラスパスコンテナーファイルから分離され、Spring Boot クラ出力ダーに依存しません。

前提条件

  • 既存の Red Hat Decision Manager Spring Boot プロジェクトがある。
  • プロジェクトの KJAR ファイル 1 つ以上の開発を完了している。

手順

  1. プロジェクトの KJAR ファイルをすべてビルドします。デフォルトのビジネスアプリケーションでは、KJAR ソースは <BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-kjar ディレクトリーに含まれます。BUSINESS-APPLICATION はビジネスアプリケーションの名前に置き換えます。プロジェクトには、他の KJAR ソースディレクトリーが含まれている可能性があります。

    すべての KJAR ソースのディレクトリーの KJAR ファイルをビルドするには、以下の手順を実行します。

    1. KJAR ソースディレクトリーに移動します。
    2. 以下のコマンドを入力します。

      mvn install

      このコマンドは、KJAR ファイルをビルドし、ローカルの Maven リポジトリーに配置します。デフォルトでは、このリポジトリーは ~/.m2/repo ディレクトリーに配置されます。

  2. <BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-service/src/main/resources ディレクトリーで、Spring Boot アプリケーションの application.properties ファイルに以下のプロパティーを追加します。

    kieserver.classPathContainer=true

    このプロパティーを true に設定すると、KIE Server はコンテナーが使用するクラ出力ダーを使用して KJAR ファイルとその依存関係を読み込みます。

  3. KIE Server が必要な KJAR モジュールを読み込むには、以下のいずれかのアクションを実行します。

    • KIE Server を設定して、Spring Boot アプリケーションで利用可能なすべての KJAR モジュールをスキャンし、デプロイするには、以下のプロパティーを application.properties ファイルに追加します。

      kieserver.autoScanDeployments=true

      このプロパティーを true に設定すると、プログラムを使用して宣言されているか、Maven プラグインを介して宣言されているかに関係なく、KIE Server はアプリケーションで利用可能なすべての KJAR モジュールをデプロイします。

      このオプションは、すべての KJAR モジュールを含める最も簡単な方法です。ただし、欠点が 2 つあります。

      • アプリケーションは、すべての KJAR モジュールのグループ、アーティファクト、バージョン (GAV) に基づいて、すべてのコンテナー ID およびエイリアスを自動的に設定します。KJAR モジュールのカスタムコンテナー ID またはエイリアスを設定できません。
      • 起動時に、アプリケーションは JAR ファイルおよび KJAR モジュールのクラスパスをスキャンします。そのため、起動期間は長くなる可能性があります。

      このような欠点を回避するには、以下のいずれかのオプションで説明されているように application.properties ファイルを使用するか、Java ソースコードを使用して、すべての KJAR モジュールを個別に設定できます。

    • サービスに追加する KJAR モジュールごとに、application.properties ファイルを使用して、すべての KJAR モジュールを個別に設定するには、以下のプロパティーを application.properties ファイルに追加します。

      kieserver.deployments[<n>].containerId=<container>
      kieserver.deployments[<n>].alias=<alias>
      kieserver.deployments[<n>].artifactId=<artifact>
      kieserver.deployments[<n>].groupId=<group>
      kieserver.deployments[<n>].version=<version>

      以下の値を置き換えます。

      • <n>: 連番: 1 番目の KJAR モジュールは 0、2 番目のモジュールの場合は 1 など。
      • <container>: KJAR モジュールのコンテナー ID
      • <alias>: KJAR モジュールのエイリアス
      • <artifact>: KJAR モジュールのアーティファクト ID
      • <group>: KJAR モジュールのグループ ID
      • <version>: KJAR モジュールのバージョン ID

      以下の例では、Evaluation 用の KJAR モジュールの 2 つのバージョンを設定します。

      kieserver.deployments[0].alias=evaluation_v1
      kieserver.deployments[0].containerId=evaluation_v1
      kieserver.deployments[0].artifactId=Evaluation
      kieserver.deployments[0].groupId=com.myspace
      kieserver.deployments[0].version=1.0.0-SNAPSHOT
      
      kieserver.deployments[1].alias=evaluation_v2
      kieserver.deployments[1].containerId=evaluation_v2
      kieserver.deployments[1].artifactId=Evaluation
      kieserver.deployments[1].groupId=com.myspace
      kieserver.deployments[1].version=2.0.0-SNAPSHOT
    • Java ソースコードを使用してすべての KJAR モジュールを個別に設定するには、以下の例のように、ビジネスアプリケーションサービスにクラスを作成します。

      @Configuration
      public class KieContainerDeployer {
      
          @Bean
          public KieContainerResource evaluation_v1() {
              KieContainerResource container = new KieContainerResource("evaluation_v1", new ReleaseId("com.myspace", "Evaluation", "1.0.0-SNAPSHOT"), STARTED);
              container.setConfigItems(Arrays.asList(new KieServerConfigItem(KieServerConstants.PCFG_RUNTIME_STRATEGY, "PER_PROCESS_INSTANCE", "String")));
              return container;
          }
      
          @Bean
          public KieContainerResource evaluation_v2() {
              KieContainerResource container = new KieContainerResource("evaluation_v2", new ReleaseId("com.myspace", "Evaluation", "2.0.0-SNAPSHOT"), STARTED);
              container.setConfigItems(Arrays.asList(new KieServerConfigItem(KieServerConstants.PCFG_RUNTIME_STRATEGY, "PER_PROCESS_INSTANCE", "String")));
              return container;
          }
      }

      追加するすべての KJAR モジュールについて、このクラスに KieContainerResource Bean を作成します。Bean の名前はコンテナー名であり、KieContainerResource() の最初のパラメーターはエイリアス名で、ReleaseId() のパラメーターは、KJAR モジュールのグループ ID、アーティファクト ID、およびバージョン ID です。

  4. 必要に応じて、ビジネスアプリケーションを Red Hat OpenShift Container Platform Pod で実行するか、現在のディレクトリーが書き込み可能ではない他の環境で実行する場合は、spring.jta.log-dir プロパティーを application.properties ファイルに追加し、書き込み可能な場所に設定します。以下に例を示します。

    spring.jta.log-dir=/tmp

    このパラメーターは、トランザクションログの場所を設定します。

  5. <BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-service ディレクトリーの Spring Boot pom.xml ファイルに以下の Maven プラグインを追加します。<GROUP_ID><ARTIFACT_ID> および <VERSION> は、プロジェクトが使用する KJAR アーティファクトのグループ、アーティファクト、バージョン (GAV) に置き換えます。これらの値は、KJAR ソースディレクトリーにある pom.xml ファイルにあります。

    注記

    アーティファクトのバージョンを複数追加できます。

      <build>
        <plugins>
          <plugin>
            <groupId>org.kie</groupId>
            <artifactId>kie-maven-plugin</artifactId>
            <version>${version.org.kie}</version>
            <executions>
              <execution>
                <id>copy</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>package-dependencies-kjar</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId><GROUP_ID></groupId>
                  <artifactId><ARTIFACT_ID></artifactId>
                  <version><VERSION></version>
                </artifactItem>
              </artifactItems>
            </configuration>
          </plugin>
        <plugins>
      <build>

    KJAR の実行に必要なアーティファクトは、ビルド時に解決されます。

    以下の例では、Evaluation アーティファクトのバージョンを 2 つ追加します。

      <build>
        <plugins>
          <plugin>
            <groupId>org.kie</groupId>
            <artifactId>kie-maven-plugin</artifactId>
            <version>${version.org.kie}</version>
            <executions>
              <execution>
                <id>copy</id>
                <phase>prepare-package</phase>
                <goals>
                  <goal>package-dependencies-kjar</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>com.myspace</groupId>
                  <artifactId>Evaluation</artifactId>
                  <version>1.0.0-SNAPSHOT</version>
                </artifactItem>
                <artifactItem>
                  <groupId>com.myspace</groupId>
                  <artifactId>Evaluation</artifactId>
                  <version>2.0.0-SNAPSHOT</version>
                </artifactItem>
              </artifactItems>
            </configuration>
          </plugin>
        </plugins>
      </build>
  6. 自己完結型 Spring Boot イメージをビルドするには、<BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-service ディレクトリーで以下のコマンドを入力します。

    mvn install
  7. オプション: 自己完結型 Spring Boot イメージを実行するには、target サブディレクトリーで JAR ファイルを見つけ、以下のコマンドを入力します。

    java -jar <FILENAME>.jar

    このコマンドで <FILENAME> は JAR ファイルの名前に置き換えます。