第3章 Mave リポジトリーを使用した HA CEP サーバーを実装して KJAR サービスを更新する手順

HA CEP サーバーを実装して、KJAR サービスと全依存関係を指定の Maven リポジトリーから取得できます。このような場合、Maven リポジトリーでサービスを更新して、クライアントコードから呼び出しを行うことで、いつでも KJAR サービスを更新できます。

ソースを準備して、ビルドし、Red Hat OpenShift Container Platform にデプロイします。サーバーをデプロイする前に、deployment.yaml ファイルに特定の環境変数を設定します。Maven リポジトリーを使用するには、UPDATABLEKJAR 変数を true に設定する必要があります。

前提条件

  • oc コマンドラインツールを使用して、管理者権限があるプロジェクトにログインしている。
  • Red Hat OpenShift Container Platform 環境からアクセス可能な Maven リポジトリーを設定している。

Procedure

  1. Red Hat カスタマーポータルの Software Downloads ページから rhdm-7.8.0-reference-implementation.zip 製品配信可能ファイルをダウンロードします。
  2. ファイルの内容を展開して、さらに rhdm-7.8.0-openshift-drools-hacep-distribution.zip ファイルを展開します。
  3. openshift-drools-hacep-distribution/sources ディレクトリーに移動します。
  4. sample-hacep-project/sample-hacep-project-kjar ディレクトリー内のサンプルプロジェクトをもとに、サーバーのコードを確認して変更します。複合イベント処理のロジックは、src/main/resources/org/drools/cep サブディレクトリーの DRL ルールで定義します。
  5. 標準の Maven コマンドを使用してプロジェクトをビルドします。

    mvn clean install -DskipTests

    作成した KJAR と必要な依存関係を Maven リポジトリーにアップロードします。

  6. Red Hat AMQ Streams 向けの OpenShift operator を有効にして、プロジェクトで AMQ Streams (kafka) クラスターを作成します。Red Hat AMQ Streams のインストールに関する情報は、『AMQStreams on OpenShift の使用 』を参照してください。
  7. サーバーの操作に必要な kafka のトピックを作成するには、openshift-drools-hacep-distribution/sources ディレクトリーで、以下のコマンドを実行します。

    oc apply -f kafka-topics/control.yaml
    oc apply -f kafka-topics/events.yaml
    oc apply -f kafka-topics/kiesessioninfos.yaml
    oc apply -f kafka-topics/snapshot.yaml
  8. アプリケーションが、リーダーの選択に使用する ConfigMap にアクセスできるように、ロールベースのアクセス制御を設定します。springboot ディレクトリーに移動して、以下のコマンドを入力します。

    oc create -f kubernetes/service-account.yaml
    oc create -f kubernetes/role.yaml
    oc create -f kubernetes/role-binding.yaml

    Red Hat OpenShift Container Platform のロールベースのアクセス制御に関する詳細は、Red Hat OpenShift Container Platform ドキュメントの「RBAC を使用したパーミッションの定義および適用 」を参照してください。

  9. springboot ディレクトリーで pom.xml ファイルを編集して、以下の依存関係を削除します。

    <dependency>
          <groupId>org.kie</groupId>
          <artifactId>sample-hacep-project-kjar</artifactId>
    </dependency>
  10. springboot ディレクトリーで、以下のコマンドを実行してデプロイメント用のイメージを作成し、OpenShift 環境用に設定したリポジトリーにプッシュします。

    oc new-build --binary --strategy=docker --name openshift-kie-springboot
    oc start-build openshift-kie-springboot --from-dir=. --follow
  11. 以下のコマンドを実行して、ビルドしたイメージの名前を検出します。

    oc get is/openshift-kie-springboot -o template --template='{{range .status.tags}}{{range .items}}{{.dockerImageReference}}{{end}}{{end}}'
  12. テキストエディターで kubernetes/deployment.yaml ファイルを開きます。
  13. 既存のイメージ URL を直前のコマンドの結果に置き換えます。
  14. 文頭に @ の記号がある行の最後にある文字をすべて削除し、その行に :latest を追加します。以下に例を示します。

    image: image-registry.openshift-image-registry.svc:5000/hacep/openshift-kie-springboot:latest
  15. containers: 行と env: 行の下で、以下の例のように環境変数を設定します。

    containers:
      - env:
        - name: UPDATABLEKJAR
          value: "true"
        - name: KJARGAV
          value: <GroupID>:<ArtifactID>:<Version>
        - name: MAVEN_LOCAL_REPO
          value: /app/.m2/repository
        - name: MAVEN_MIRROR_URL
          value: http://<nexus_url>/repository/maven-releases/
        - name: MAVEN_SETTINGS_XML
          value: /app/.m2/settings.xml

    この例では KJARGAV 変数は、KJAR サービスのグループ、アーティファクト、バージョン (GAV) に置き換え、MAVEN_MIRROR_URL 変数の値は、KJAR サービスを含む Maven リポジトリーの URL に置き換えます。

    必要に応じて他の変数を設定します。サポート対象の環境変数の一覧は、「HA CEP サーバーがサポートする環境変数 (オプション)」 を参照してください。

  16. ファイルを保存します。
  17. 以下のコマンドを実行してイメージをデプロイします。

    oc apply -f kubernetes/deployment.yaml

クライアントコードから KJAR の更新をトリガーする方法は、4章HA CEP クライアントの作成 を参照してください。

3.1. HA CEP サーバーがサポートする環境変数 (オプション)

オプションで、HA CEP サーバーの以下の環境変数を設定して、Maven リポジトリーを使用するように設定します。deployment.yaml ファイルを使用して、デプロイメント時の変数を設定します。

表3.1 HA CEP サーバーがサポートする環境変数 (オプション)

名前説明

MAVEN_LOCAL_REPO

ローカルの Maven リポジトリーとして使用するディレクトリー。

/root/.m2/repository

MAVEN_MIRROR_URL

アーティファクトの取得に使用可能な Maven ミラーのベース URL。

http://nexus3-my-kafka-project.192.168.99.133.nip.io/repository/maven-public/

MAVEN_MIRRORS

設定すると、マルチミラーサポートが有効になります。この値には、コンマで区切れたミラーのプリフィックス一覧が含まれます。この変数を設定した場合には、他の MAVEN_MIRROR_* 変数の名前に DEV_MAVEN_MIRROR_URLQE_MAVEN_MIRROR_URL などのプリフィックスを含める必要があります。

DEV,QE

MAVEN_REPOS

設定すると、マルチリポジトリーサポートが有効になります。この値には、コンマで区切れたリポジトリーのプリフィックス一覧が含まれます。この変数を設定した場合には、他の MAVEN_REPO_* 変数の名前に DEV_MAVEN_REPO_URLQE_MAVEN_REPO_URL などのプリフィックスを含める必要があります。

DEV,QE

MAVEN_SETTINGS_XML

使用するカスタムの Maven ファイル settings.xml の場所。

/root/.m2/settings.xml

prefix_MAVEN_MIRROR_ID

指定のミラーに使用する ID。省略する場合には、一意の ID が生成されます。

internal-mirror

prefix_MAVEN_MIRROR_OF

このミラーでミラリングされるリポジトリー ID。デフォルト値は external:* です。

external:*,!my-repo

prefix_MAVEN_MIRROR_URL

ミラーの URL。

http://10.0.0.1:8080/repository/internal

prefix_MAVEN_REPO_HOST

Maven リポジトリーのホスト名。

repo.example.com

prefix_MAVEN_REPO_ID

Maven リポジトリー ID。

my-repo

prefix_MAVEN_REPO_LAYOUT

Maven リポジトリーのレイアウト。

default

prefix_MAVEN_REPO_USERNAME

Maven リポジトリーのユーザー名。

mavenUser

prefix_MAVEN_REPO_PASSPHRASE

Mavenリポジトリーのパスフレーズ。

maven1!

prefix_MAVEN_REPO_PASSWORD

Maven リポジトリーのパスワード。

maven1!

prefix_MAVEN_REPO_PATH

Maven リポジトリーのパス。

/maven2/

prefix_MAVEN_REPO_PORT

Maven リポジトリーのポート。

8080

prefix_MAVEN_REPO_PRIVATE_KEY

Maven リポジトリーに接続するのに使用する秘密鍵へのローカルパス。

${user.home}/.ssh/id_dsa

prefix_MAVEN_REPO_PROTOCOL

Maven リポジトリーのプロトコル。

http

prefix_MAVEN_REPO_RELEASES_ENABLED

Maven リポジトリーのリリースが有効。

true

prefix_MAVEN_REPO_RELEASES_UPDATE_POLICY

Maven リポジトリーリリース更新ポリシー。

always

prefix_MAVEN_REPO_SERVICE

Maven リポジトリーの OpenShift サービス。この値は、URL または host/port/protocol が指定されていない場合に使用します。

buscentr-myapp

prefix_MAVEN_REPO_SNAPSHOTS_ENABLED

Maven リポジトリーのスナップショットが有効。

true

prefix_MAVEN_REPO_SNAPSHOTS_UPDATE_POLICY

Maven リポジトリースナップショット更新ポリシー。

always

prefix_MAVEN_REPO_URL

Maven リポジトリーの完全修飾 URL

http://repo.example.com:8080/maven2/