第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 つ以上の開発を完了している。
手順
プロジェクトの KJAR ファイルをすべてビルドします。デフォルトのビジネスアプリケーションでは、KJAR ソースは
<BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-kjarディレクトリーに含まれます。BUSINESS-APPLICATIONはビジネスアプリケーションの名前に置き換えます。プロジェクトには、他の KJAR ソースディレクトリーが含まれている可能性があります。すべての KJAR ソースのディレクトリーの KJAR ファイルをビルドするには、以下の手順を実行します。
- KJAR ソースディレクトリーに移動します。
以下のコマンドを入力します。
mvn install
このコマンドは、KJAR ファイルをビルドし、ローカルの Maven リポジトリーに配置します。デフォルトでは、このリポジトリーは
~/.m2/repoディレクトリーに配置されます。
<BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-service/src/main/resourcesディレクトリーで、Spring Boot アプリケーションのapplication.propertiesファイルに以下のプロパティーを追加します。kieserver.classPathContainer=true
このプロパティーを
trueに設定すると、KIE Server はコンテナーが使用するクラ出力ダーを使用して KJAR ファイルとその依存関係を読み込みます。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 モジュールについて、このクラスに
KieContainerResourceBean を作成します。Bean の名前はコンテナー名であり、KieContainerResource()の最初のパラメーターはエイリアス名で、ReleaseId()のパラメーターは、KJAR モジュールのグループ ID、アーティファクト ID、およびバージョン ID です。
必要に応じて、ビジネスアプリケーションを Red Hat OpenShift Container Platform Pod で実行するか、現在のディレクトリーが書き込み可能ではない他の環境で実行する場合は、
spring.jta.log-dirプロパティーをapplication.propertiesファイルに追加し、書き込み可能な場所に設定します。以下に例を示します。spring.jta.log-dir=/tmp
このパラメーターは、トランザクションログの場所を設定します。
<BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-serviceディレクトリーの Spring Bootpom.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>自己完結型 Spring Boot イメージをビルドするには、
<BUSINESS-APPLICATION>/<BUSINESS-APPLICATION>-serviceディレクトリーで以下のコマンドを入力します。mvn install
オプション: 自己完結型 Spring Boot イメージを実行するには、
targetサブディレクトリーで JAR ファイルを見つけ、以下のコマンドを入力します。java -jar <FILENAME>.jar
このコマンドで
<FILENAME>は JAR ファイルの名前に置き換えます。