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

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

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

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

前提条件

  • 既存の Red Hat Process Automation 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. オプション: WebSocket を使用して Business Central Monitoring インスタンスと通信できるように、KIE Server を設定可能にするには、以下の変更を加えます。

    1. 以下の行を pom.xml ファイルの <dependencies> タグの下に追加します。

      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-controller-websocket-client</artifactId>
        <version>${version.org.kie}</version>
      </dependency>

      Websocket と Business Central の Monitoring インスタンスとの通信は、Red Hat OpenShift Container Platform でインスタンスの実行など、すべてのケースでサポートされます。

    2. <BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-service/src/main/resources/application.properties ファイルで、以下のプロパティーを追加するか、変更します。

      kieserver.location=${org.kie.server.location}
      kieserver.controllers=${org.kie.server.controller}
  7. 自己完結型 Spring Boot イメージをビルドするには、<BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-service ディレクトリーで以下のコマンドを入力します。

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

    java -jar <FILENAME>.jar

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

    KIE Server が WebSocket を使用して Business Central の Monitoring インスタンスに接続し、イメージを実行するように設定するには、以下のコマンドを入力します。

    java -Dorg.kie.server.location=http://<LOCATION>:<PORT>/rest/server -Dorg.kie.server.controller=ws://<BC-HOSTNAME>:<BC-PORT>/websocket/controller -Dorg.kie.server.controller.user=<USER> -Dorg.kie.server.controller.pwd=<PASSWORD> -jar <FILENAME>.jar

    このコマンドでは、以下の値を置き換えてください。

    • <location>: サービスにアクセスするための完全修飾ホスト名を指定します。Business Central Monitoring はサービスにアクセスしてプロセス情報を取得し、このホスト名を持つサービスの URL を表示します。
    • <PORT>: サービスにアクセスするためのポート (例: 8090)
    • <BC-HOSTNAME>: Business Central Monitoring インスタンスの完全修飾名
    • <BC-PORT>: 8080 などの Business Central Monitoring インスタンスのポート
    • <user>: Business Central Monitoring インスタンスに設定したユーザーのユーザー名
    • <password>: Business Central Monitoring インスタンスに設定したユーザーのパスワード
    • <FILENAME>: JAR ファイルの名前

      注記

      この設定では、サービスにセキュアでない HTTP 通信を使用します。Spring Boot ビジネスアプリケーションを有効な SSL 証明書で設定する場合は、http:https: に置き換えてセキュアな HTTPS 通信を使用できます。Spring Boot での SSL の設定に関する詳細は、Spring Boot の ドキュメント を参照してください。

      注記

      Business Central Monitoring からプロセス情報を表示する場合は、Business Central にログインしたユーザーが、同じパスワードを使用してサービスで認証できるようにする必要があります。