Red Hat JBoss BRMS Realtime Decision Server for OpenShift

Red Hat JBoss BRMS 6.4

Red Hat JBoss BRMS Realtime Decision Server for OpenShift の使用

Red Hat JBoss Middleware for OpenShift Documentation Team

概要

Red Hat JBoss BRMS Realtime Decision Server for OpenShift の使用ガイド

パート I. はじめに

第1章 Red Hat JBoss BRMS Realtime Decision Server とは

Red Hat JBoss BRMS Realtime Decision Server for OpenShift は、Red Hat JBoss BRMS Realtime Decision Server でビジネスルールを実行するためのプラットフォームを提供します。開発者は、ハイブリッド環境でデプロイされるアプリケーションのビルド、スケーリングおよびテストを迅速に行うことができます。

パート II. 操作を実行する前の準備

第2章 Red Hat JBoss BRMS と Realtime Decision Server for OpenShift の比較

このトピックでは、Realtime Decision Server for OpenShift と非 PaaS のフルリリース Red Hat JBoss BRMS との違いを詳述し、Realtime Decision Server for OpenShift の実行および設定に特化した情報を提供します。Realtime Decision Server for OpenShift に限定されない他の Red Hat JBoss BRMS 機能についてのドキュメントは、Red Hat カスタマーポータル上の Red Hat JBoss BRMS ドキュメント のページで参照できます。

本書および Red Hat JBoss BRMS ドキュメント に記載の EAP_HOME は、Decision Server をデプロイする JBoss EAP インストールディレクトリーに言及するために使用される用語です。Realtime Decision Server for OpenShift 内の EAP_HOME の場所は /opt/eap/ であり、デフォルトで JBOSS_HOME 環境変数も設定されます。

2.1. Realtime Decision Server for OpenShift の機能的な違い

Realtime Decision Server for OpenShift については主な機能的な相違点がいくつかあります。

  • Realtime Decision Server for OpenShift は EAP for OpenShift を拡張しますが、それが有する機能または制限はすべて Realtime Decision Server for OpenShift でも確認できます。
  • ステートレスなシナリオのみがサポートされます。
  • Decision Server web コンソールに接続するには、OpenShift web コンソールで Decision Server Podの Connect ボタンをクリックするか、または OpenShift 3.2 の Open Java Console ボタンをクリックします。
  • BRMS コンソールまたは API 経由のコンテンツのオーサリングに対するサポートはありません。

2.2. バージョン互換性およびサポート

OpenShift イメージのバージョン互換性についての詳細は、OpenShift and Atomic Platform Tested Integrations ページの xPaaS の部分を参照してください。

2.3. Realtime Decision Server for OpenShift イメージストリームおよびアプリケーションテンプレートの非推奨

重要

Realtime Decision Server for OpenShift イメージのバージョン 6.2 は非推奨となり、イメージおよびアプリケーションテンプレートの更新が受信されなくなりました。

Realtime Decision Server for OpenShift イメージのバージョン 6.3 は非推奨となり、イメージおよびアプリケーションテンプレートの更新が受信されなくなりました。

新規アプリケーションをデプロイするには、バージョン 6.4 の Realtime Decision Server for OpenShift イメージおよびアプリケーションテンプレートを使用することを推奨します。

2.4. Realtime Decision Server for OpenShift の管理

Realtime Decision Server for OpenShift は EAP for OpenShift とは別個にビルドされているため、トラブルシューティングの際にはコンテナーから JBoss EAP 管理 CLI にアクセスできます。

  1. 最初に、実行中の Pod に対してリモートシェルセッションを開きます。

    $ oc rsh <pod_name>
  2. 次に、リモートシェルセッションから以下を実行し、JBoss EAP 管理 CLI を起動します。

    $ /opt/eap/bin/jboss-cli.sh
警告

実行中のコンテナーで JBoss EAP 管理 CLI を使用して追加される設定の変更は、コンテナーが再起動すると失われます。

EAP for OpenShift 内での JBoss EAP インスタンスの設定変更プロセスは、標準リリースの JBoss EAP の場合とは異なります。

2.5. Realtime Decision Server for OpenShift のセキュリティー

アクセスは kie-server の権限ロールを持つユーザーに制限されます。このロールを持つユーザーは、KIE_SERVER_USER および KIE_SERVER_PASSWORD 環境変数で指定できます。

注記

HTTP/REST エンドポイントは、KIE コンテナーの実行および KIE サーバーリソースのクエリーのみを許可するように設定されます。コンテナーの作成または処理、ReleaseId またはスキャナーの更新などは制限されています。JMS エンドポイントは現時点で、それらの制限をサポートしていません。今後は、より詳細なセキュリティー設定がいずれのエンドポイントについても利用可能になるはずです。

2.6. 初期設定

本書のチュートリアルは、OpenShift Primer で作成されるインスタンスと同様の OpenShift インスタンスを使用することを前提としています。

パート III. スタート

第3章 Realtime Decision Server for OpenShift のデプロイメントについての考慮事項

3.1. キースストアの設定

Realtime Decision Server for OpenShift には 2 つのキーストアが必要です。

  • https トラフィックの暗号化用に秘密鍵と公開鍵を提供する SSL キーストア
  • クラスターのノード間のネットワークトラフィックの暗号化用に秘密鍵と公開鍵を提供する JGroups キーストア

これらのキーストアは、アプリケーションが単一ノードの OpenShift インスタンスで http のみを使用する場合でも、Realtime Decision Server for OpenShift によって使用されることが予想されます。自己署名型の証明書はセキュアな通信を提供せず、これは内部テスト目的での使用が意図されている点に注意してください。

警告

実稼働環境では、SSL で暗号化された接続 (HTTPS) について認定認証局 (CA) から購入する独自の SSL 証明書を使用することが推奨されます。

自己署名型または販売されている SSL 証明書を使用してキーストアを作成する方法についての詳細は、「Generate a SSL Encryption Key and Certificate」を参照してください。

3.2. シークレットの生成

OpenShift は、シークレット というオブジェクトを使用してパスワードやキーストアなどの機密情報を保持します。詳細は、OpenShift ドキュメントの「Secrets」の章を参照してください。

Realtime Decision Server for OpenShift には、前述の 2 つのキーストアを保持するシークレットが必要です。これは、プロジェクト内のアプリケーションに対する必要な権限を提供します。

Java および JGroup キーストアファイルを使用してプロジェクトのシークレットを作成します。

$ oc create secret generic <rds-secret-name> --from-file=<jgroups.jceks> --from-file=<keystore.jks>

シークレットの生成後に、これをサービスアカウントに関連付けることができます。

3.3. サービスアカウントの作成

サービスアカウントを使用するユーザーは、特定のシークレットおよびロールをプロジェクトの名前空間にあるアプリケーションに関連付けることができます。これにより、必要なすべての特権を使って実行するために必要な権限がアプリケーションに設定されます。

  1. Realtime Decision Server for OpenShift デプロイメントに使用されるサービスアカウントを作成します。

    $ oc create serviceaccount <service-account-name>
  2. 表示 (view) ロールをサービスアカウントに追加します。これにより、サービスアカウントを使い、OpenShift のアプリケーションの名前空間にあるすべてのリソースを表示することができます。これは、クラスターの管理に必要となります。

    $ oc policy add-role-to-user view system:serviceaccount:<project-name>:<service-account-name>
  3. プロジェクト用に作成されたシークレットをサービスアカウントに追加します。

    $ oc secret add sa/<service-account-name> secret/<secret-name>

第4章 Red Hat JBoss BRMS Project Repository for OpenShift の準備

4.1. ステートレスセッション

注記

Red Hat JBoss BRMS プロジェクトはステートレスになるように設定される必要があります。OpenShift は KIE サーバーでのステートフルセッションはサポートしません。

Red Hat JBoss BRMS で実行される Red Hat JBoss BRMS プロジェクトは、ステートフルまたはステートレスに設定することができます。Decision Server xPaaS イメージにデプロイされているプロジェクトはステートレスに設定されます。

Red Hat JBoss BRMS プロジェクトがステートレスであることを確認します。
Knowledge Session (web コンソールで Open Project EditorProject SettingsKnowledge bases and sessions に移動します) には、セッションが Stateless に設定されているかどうかが表示されます。

4.2. プロジェクトのリモートリポジトリーの設定

プロジェクトはリモートリポジトリーを使用するように設定し、Red Hat JBoss BRMS が変更をプッシュし、OpenShift がリポジトリーをプルしてアプリケーションをビルドできるようにする必要があります。

アプリケーションのリポジトリーファイル:

  1. pom.xml はリモートリポジトリーを使用するよう設定し、OpenShift がこれにアクセスできるようする必要があります。

    ...
    <distributionManagement>
      <repository>
        <id>deployment</id>
        <name>OpenShift Maven repo</name>
        <url>http://maven.example/deployment/filepath/</url>
      </repository>
    
      <snapshotRepository>
        <id>deployment</id>
        <name>OpenShift Maven repo</name>
        <url>http://maven.example/snapshots/filepath/</url>
      </snapshotRepository>
    </distributionManagement>
    ...

    詳細は、『Red Hat JBoss BRMS Administration and Configuration Guide』を参照してください。

  2. configuration/settings.xml ファイルではリモートリポジトリーを定義し、OpenShift がアプリケーションのアーティファクトをダウンロードできるようにする必要があります。

    ...
    <profiles>
      <profile>
        <id>openshift-mirror-repositories</id>
        <repositories>
          <repository>
            <id>openshift-mirror</id>
            <url>http://maven.example/public/filepath/</url>
          </repository>
        </repositories>
    
        <pluginRepositories>
          <pluginRepository>
            <id>openshift-mirror</id>
            <url>http://maven.example/public/filepath/</url>
          </pluginRepository>
        </pluginRepositories>
      </profile>
    </profiles>
    ...

    詳細は、『Red Hat JBoss BRMS Installation Guide』を参照してください。

  3. 非表示の .s2i/environment ファイルは、使用する KIE jar を含む KIE コンテナーのデプロイメントと、それらを取得する場所を定義します。OpenShift がビルドされたイメージをデプロイする際に、Pod 名はこのファイルで定義されるデプロイメントのエイリアスから派生した名前になります。

    KIE_CONTAINER_DEPLOYMENT=<alias>=<group_id>:<artifact_id>:<version>

    例:

    KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0
    注記

    KIE サーバーのデフォルト動作はデフォルトのステートフルセッションを検索することであり、これが見つからない場合は失敗するため、コンテナーの名前をここで定義することが必要になります。

第5章 ルールの更新

各イメージは特定の Maven リポジトリーのスナップショットからビルドされます。新規ルールが追加されるか、既存ルールが変更された場合は、ルールの変更が有効になるように新規イメージを作成し、デプロイする必要があります。

アプリケーションの更新
KIE_CONTAINER_DEVELOPMENT_OVERRIDE 変数は、元のデプロイメントで設定された KIE_CONTAINER_DEPLOYMENT 変数を明示的に上書きするために使用できます。
アプリケーションが変更されており、デプロイできる状態にある場合、.s2i/environment ファイルに KIE_CONTAINER_DEPLOYMENT_OVERRIDE 変数の更新されたバージョンの詳細が組み込まれます。その後に、これをリポジトリーにプッシュしてイメージとしてビルドすることができます。
または、ローカルリポジトリーからバイナリービルドを開始することもできます。

$ oc start-build <RulesTest> --from-repo=</repository/filepath>

これにより、Git リポジトリーのコンテンツが OpenShift に直接送信されます。増分ビルド (Incremental Build) が設定されている場合、新規のビルドが以前に使用されたイメージをプルし、新規 Podの Maven リポジトリーを展開してから欠落したコンテンツをダウンロードします。

5.1. 再作成更新 (Recreate Update) ストラテジー

再作成更新 (Recreate Update) ストラテジー を Realtime Decision Server for OpenShift デプロイメントに適用します。この更新ストラテジーは、古いデプロイメントを自動的に 0 に縮小してから新規バージョンをデプロイします。新規バージョンの検証後に、新規デプロイメントは古いデプロイメントのレプリカサイズに自動的に拡大します。

再作成更新 (Recreate Update) ストラテジーは、ライフサイクルフック (Lifecycle Hook) をサポートし、Realtime Decision Server for OpenShift アプリケーションテンプレートのデフォルトの更新ストラテジーとして設定されます。

注記

新規デプロイメントが検証され、スケーリングされるまでの再作成更新プロセス時に、Realtime Decision Server for OpenShift は非アクティブになります。この期間に、REST クライアントは 503 service unavailable エラーを返し、A-MQ クライアントは タイムアウト になります。

重要

ローリング更新 (Rolling Update) ストラテジー は Realtime Decision Server for OpenShift ではサポートされません。アプリケーションの複数のコンカレントバージョンはデプロイメントでサポートされますが、クラスターは同じバージョンの Pod への有効なルーティングのみをサポートします。

5.2. 複数のコンカレントバージョン

アプリケーションには、異なるバージョンのコンカレント KIE コンテナーが複数含まれる場合があります。それぞれのコンテナーにはクロスローダー環境と一意の識別子があります。一意の識別子は、コンテナー ID またはデプロイメント ID のいずれかになります (これらは同意語です)。

複数のバージョンは、KIE_CONTAINER_DEPLOYMENT 変数を使用してデプロイされます。アプリケーションの各バージョンについては、.s2i/environment ファイルで <alias>=<group_id>:<artifact_id>:<version> が指定されます (パイプ | で区切られます)。

KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1

以下が作成されます。

KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1
KIE_CONTAINER_DEPLOYMENT_ORIGINAL:
KIE_CONTAINER_DEPLOYMENT_OVERRIDE: RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1
KIE_CONTAINER_DEPLOYMENT_COUNT: 2
KIE_CONTAINER_ID_0: df729302a0b7293c0729384710dd82a1
KIE_CONTAINER_KJAR_GROUP_ID_0: com.example.openshift
KIE_CONTAINER_KJAR_ARTIFACT_ID_0: example_workflow
KIE_CONTAINER_KJAR_VERSION_0: 1.0
KIE_CONTAINER_ID_1: 01932fc2931b02cb042ab29d9fc82a8a
KIE_CONTAINER_KJAR_GROUP_ID_1: com.example.openshift
KIE_CONTAINER_KJAR_ARTIFACT_ID_1: example_workflow
KIE_CONTAINER_KJAR_VERSION_1: 1.0
KIE_CONTAINER_REDIRECT_ENABLED: true

または、XML 形式で以下のように表示されます。

<kie-server-state>
  <containers>
    <container>
      <containerId>df729302a0b7293c0729384710dd82a1</containerId>
      <releaseId>
        <groupId>com.example.openshift</groupId>
        <artifactId>example_workflow</artifactId>
        <version>1.0</version>
      </releaseId>
      <status>STARTED</status>
      <configItems/>
      <messages/>
    </container>
    <container>
      <containerId>01932fc2931b02cb042ab29d9fc82a8a</containerId>
      <releaseId>
        <groupId>com.example.openshift</groupId>
        <artifactId>example_workflow</artifactId>
        <version>1.1</version>
      </releaseId>
      <status>STARTED</status>
      <configItems/>
      <messages/>
    </container>
  </containers>
</kie-server-state>
重要

複数のコンカレントバージョンをデプロイするには、KIE_CONTAINER_REDIRECT_ENABLED 変数を true に設定する必要があります。この変数はデフォルトで true になるため、false に設定される場合にのみ .s2i/environment ファイルに明示的に指定する必要があります。

KIE_CONTAINER_REDIRECT_ENABLED 変数は、コンテナー ID の上書きを有効にします。true に設定される場合、アプリケーションの各バージョンについて一意の md5 sum のハッシュが <alias>=<group_id>:<artifact_id>:<version> から生成されます。さらに、エイリアスのリダイレクト を有効にするため、デプロイメントエイリアスを使用するクライアント要求が正しいバージョンのコンテナーにリダイレクトされます。

false に設定される場合、デプロイメントエイリアスがコンテナー ID として使用され、複数のコンカレントバージョンは使用できません。アプリケーションの複数のバージョンが KIE_CONTAINER_DEPLOYMENT に指定され、KIE_CONTAINER_REDIRECT_ENABLEDfalse に設定される場合、アプリケーションの最新バージョンのみがデプロイされ、エイリアスのリダイレクト が無効にされます。

実行中のアプリケーションの .s2i/environment ファイルで KIE_CONTAINER_REDIRECT_ENABLED 変数を変更すると、実行中のアプリケーションの新規コンテナー ID が生成されます。これにより、古いコンテナー ID を使用するすべてのクライアントとの互換性は失われます。

5.3. コンテナー ID

コンテナー ID は、アプリケーションの <alias>=<group_id>:<artifact_id>:<version> から生成される md5 sum のハッシュであり、クライアントの通信に使用されます。複数バージョンの場合、アプリケーションの各バージョンには一意のコンテナー ID がありますが、デプロイメントのエイリアス名は共有されます。

5.4. アプリケーションの複数バージョンの追加、上書き、または更新

アプリケーションがすでにデプロイされている場合、.s2i/environment ファイルで KIE_CONTAINER_DEPLOYMENT_OVERRIDE 変数を使用し、アプリケーションの各バージョンに <alias>=<group_id>:<artifact_id>:<version> を指定して json アプリケーションテンプレートの KIE_CONTAINER_DEPLOYMENT 変数を上書きします。これは、依然として使用されているアプリケーションの古いバージョンを維持するために役立ちます。

たとえば、以下は RulesTest アプリケーションの例になります。

KIE_CONTAINER_DEPLOYMENT=RulesTest=com.example.openshift:example_workflow:1.0

アプリケーションのこのバージョンを維持しつつ、更新バージョンを追加するには、.s2i/environment ファイルを更新します。

KIE_CONTAINER_DEPLOYMENT_OVERRIDE=RulesTest=com.example.openshift:example_workflow:1.0|RulesTest=com.example.openshift:example_workflow:1.1

更新されたアプリケーションを古いバージョンと共にデプロイするケースについては、「サンプルワークフロー: 古いバージョンと同時に更新バージョンをデプロイする」を参照してください。

5.5. 複数バージョンのターゲット要求

ほとんどの場合、クライアントがサーバー側の機能を実行できるようにするには、名前を指定して特定コンテナーをターゲットに設定する必要があります。これは、完全なデプロイメント名、コンテナー ID ハッシュまたはデプロイメントのエイリアスを指定して実行できます。

例:

  • 完全デプロイメント名: RulesTest=com.example.openshift:example_workflow:1.0
  • コンテナー ID ハッシュ: df729302a0b7293c0729384710dd82a1
  • デプロイメントエイリアス: RulesTest

完全デプロイメント名またはコンテナー ID のいずれかを指定すると、適切なコンテナーにターゲットが設定されます。KIE サーバーのすべてのコンテナーで使用されるデプロイメントを指定すると、適切なバージョンのコンテナーにターゲットを設定するために複数の段階でなる解決プロセスが必要になります。

5.6. エイリアスのリダイレクト

複数バージョンのデプロイメントでは、すべてのアプリケーションが同じデプロイメントエイリアスを共有します。アプリケーションのデプロイメントエイリアスを使用する要求には、要求を適切なバージョンのコンテナーにリダイレクトするための解決プロセスが必要になります。

解決プロセスの階層

複数段階で構成される解決プロセスは、クライアントによって起動されるメソッドおよび要求に関連付けられる ID によって異なります。

プロセス階層 (降順):

  1. 会話 ID
  2. デフォルトコンテナー ID

クライアント

クライアントの相互作用のタイプに応じて、複数のクライアントをサーバーを起動するために使用できます。

クライアント相互作用

KIE の相互作用

org.kie.server.client.KieServicesClient

Decision Server の相互作用

org.kie.server.client.RuleServicesClient

会話 ID

会話は、KIE サービス java クライアントとサーバー間の相互作用を表します。クライアントが会話を開始する際、サーバーからの応答にはエンコーディングされた複数部分からなる見出しが含まれます。クライアントはこの見出しをその後のサーバーへの要求で使用します。この会話ヘッダーには会話 ID が含まれ、これは起動するアプリケーションの正しいバージョンを判別するために REST インターフェースのサーブレットフィルターで使用されるか、または JMS インターフェースの EJB インターセプターで使用されます。

デフォルトコンテナー ID

特定のコンテナー ID を解決できない場合、デフォルトコンテナー ID が最新バージョンのアプリケーションとして判別されます (<alias>=<group_id>:<artifact_id>:<version> がベース)。

第6章 Realtime Decision Server for OpenShift の実行および設定

イメージの Realtime Decision Server for OpenShift 設定は、S2I テンプレートまたは変更された Realtime Decision Server for OpenShift のいずれかを使用して変更することができます。

6.1. Realtime Decision Server for OpenShift の S2I (Source-to-Image) プロセスの使用

Realtime Decision Server for OpenShift の実行および設定方法として、OpenShift S2I プロセスをアプリケーションパラメーターおよび環境変数と共に使用することが推奨されます。

Realtime Decision Server for OpenShift の S2I プロセスは以下のように機能します。

  1. ソースリポジトリーに pom.xml ファイルがある場合、Maven ビルドが $MAVEN_ARGS 環境変数の内容でトリガーされます。

    • デフォルトでは パッケージ のゴール (goal) が、テストのスキップ (-DskipTests) および Red Hat GA リポジトリーの有効化 (-Dcom.redhat.xpaas.repo.redhatga) のシステムプロパティーを含む openshiftプロファイルで使用されます。
  2. 正常な Maven ビルドの結果はローカル Maven リポジトリー /home/jboss/.m2/repository/ に、オフライン使用のためのすべての依存関係と共にインストールされます。Realtime Decision Server for OpenShift はこのローカルリポジトリーから作成済みの kjar を読み込みます。

    • Maven ビルドの結果として生じる kjar に加え、デプロイメントのソースディレクトリーにあるすべての kjar もローカルの Maven リポジトリーにインストールされます。Kjar は EAP_HOME/standalone/deployments/ ディレクトリーには置かれません。
  3. deployments ソースリポジトリーディレクトリーにあるすべての JAR (kjar ではない)、WAR、および EAR は EAP_HOME/standalone/deployments ディレクトリーにコピーされ、その後に JBoss EAP デプロイメントスキャナーを使用してデプロイされます。
  4. configuration ソースリポジトリーにあるすべてのファイルは EAP_HOME/standalone/configuration にコピーされます。

    注記

    カスタム JBoss EAP 設定ファイルを使用する必要がある場合、その名前は standalone-openshift.xml になります。

  5. modules ソースリポジトリーディレクトリーのすべてのファイルは EAP_HOME/modules にコピーされます。

S2I に対してカスタム Maven アーティファクトリポジトリーのミラーを使用するよう指示する方法の詳細な説明については、「アーティファクトリポジトリーのミラー」セクションを参照してください。

6.2. バイナリービルド

既存アプリケーションを OpenShift にデプロイするには、バイナリーソース 機能を使用することができます。

前提条件:

  1. アプリケーションアーカイブの取得またはアプリケーションのローカルビルド

    以下の例では、helloruleshellorules-client のクイックスタートを使用しています。

    • ソースコードのクローンを作成します。

      $ git clone https://github.com/jboss-openshift/openshift-quickstarts.git
    • Red Hat JBoss Middleware Maven リポジトリー設定 します。
    • アプリケーションをビルドします (helloruleshellorules-client クイックスタートの両方を使用)。

      注記

      以下の mvn clean package コマンドの出力は、選択した情報のみが含まれるように短縮されています。

      $ cd openshift-quickstarts/decisionserver/
      $ mvn clean package
      [INFO] Scanning for projects...
      ...
      [INFO] ------------------------------------------------------------------------
      [INFO] Reactor Build Order:
      [INFO]
      [INFO] OpenShift Quickstarts: Decision Server: Hello Rules
      [INFO] OpenShift Quickstarts: Decision Server: Hello Rules - Client
      [INFO] OpenShift Quickstarts: Decision Server: Parent
      [INFO]
      [INFO] ------------------------------------------------------------------------
      [INFO] Building OpenShift Quickstarts: Decision Server: Hello Rules 1.4.0.Final
      [INFO] ------------------------------------------------------------------------
      ...
      [INFO] ------------------------------------------------------------------------
      [INFO] Building OpenShift Quickstarts: Decision Server: Hello Rules - Client 1.4.0.Final
      [INFO] ------------------------------------------------------------------------
      ...
      [INFO] ------------------------------------------------------------------------
      [INFO] Reactor Summary:
      [INFO]
      [INFO] OpenShift Quickstarts: Decision Server: Hello Rules  SUCCESS [  0.844 s]
      [INFO] OpenShift Quickstarts: Decision Server: Hello Rules - Client SUCCESS [  7.446 s]
      [INFO] OpenShift Quickstarts: Decision Server: Parent ..... SUCCESS [  0.002 s]
      [INFO] ------------------------------------------------------------------------
      [INFO] BUILD SUCCESS
      [INFO] ------------------------------------------------------------------------
      [INFO] Total time: 9.286 s
      [INFO] Finished at: 2017-06-27T16:49:25+02:00
      [INFO] Final Memory: 49M/502M
      [INFO] ------------------------------------------------------------------------
  1. ローカルファイルシステムでのディレクトリー構造の作成

    メインのバイナリービルドディレクトリーの deployments/ サブディレクトリーにあるアプリケーションアーカイブは、OpenShift にビルドされるイメージの 標準デプロイメントフォルダー に直接コピーされます。デプロイするアプリケーションについては、web アプリケーションデータを含むディレクトリー階層を適切に構成する必要があります。

    ローカルファイルシステムにバイナリービルドのメインディレクトリーとその中に入る deployments/ サブディレクトリーを作成します。事前にビルドされた hellorules クイックスタートの JAR アーカイブと hellorules-client クイックスタート の WAR アーカイブの両方を deployments/ サブディレクトリーにコピーします。

    decisionserver]$ ls
    hellorules  hellorules-client  pom.xml
    $ mkdir -p ocp/deployments
    $ cp hellorules/target/decisionserver-hellorules-1.4.0.Final.jar ocp/deployments/
    $ cp hellorules-client/target/decisionserver-hellorules-client-1.4.0.Final.war ocp/deployments/
    注記

    標準デプロイメントのディレクトリーの場所は、アプリケーションのデプロイに使用された基礎となるベースイメージによって異なります。以下の図を参照してください。

    表6.1 デプロイメントディレクトリーの標準的な場所

    基礎となるベースイメージの名前デプロイメントディレクトリーの標準的な場所

    EAP for OpenShift 6.4 および 7.0

    $JBOSS_HOME/standalone/deployments

    Java S2I for OpenShift

    /deployments

    JWS for OpenShift

    $JWS_HOME/webapps

以下の手順を実行し、バイナリー入力で構成されるアプリケーションを OpenShift で実行します。

  1. OpenShift インスタンスにログインします。

    $ oc login
  2. 新規プロジェクトを作成します。

    $ oc new-project ds-bin-demo
  3. (オプション) 特定イメージのイメージストリームを識別します。

    $ oc get is -n openshift | grep ^jboss-decisionserver | cut -f1 -d ' '
    jboss-decisionserver62-openshift
    jboss-decisionserver63-openshift
    注記

    jboss-decisionserver62-openshift イメージストリームのイメージは古くなっているため、以下の jboss-decisionserver63-openshift を使用します。

  4. イメージストリームおよびアプリケーション名を指定して、新規のバイナリービルドを作成します。

    注記

    KIE_SERVER_USER および KIE_SERVER_PASSWORD 環境変数にカスタム値を指定して、KIE サーバーの REST インターフェースにアクセスするデフォルトのユーザー名とパスワードを変更することができます。

    $ oc new-build --binary=true \
    --name=ds-hr-app \
    --image-stream=jboss-decisionserver63-openshift \
    -e KIE_SERVER_USER=kieserveruser \
    -e KIE_SERVER_PASSWORD=kieserverPwd1!
    --> Found image 4a6c0ce (5 weeks old) in image stream "jboss-decisionserver63-openshift" in project "openshift" under tag "latest" for "jboss-decisionserver63-openshift"
    
        JBoss BRMS Realtime Decision Server 6.3
        ---------------------------------------
        Platform for executing business rules on JBoss BRMS Realtime Decision Server 6.3.
    
        Tags: builder, decisionserver, decisionserver6
    
        * A source build using binary input will be created
          * The resulting image will be pushed to image stream "ds-hr-app:latest"
          * Use 'start-build --from-dir=DIR|--from-repo=DIR|--from-file=FILE' to trigger a new build
          * WARNING: a binary build was created, you must specify one of --from-dir|--from-file|--from-repo when starting builds
    
    --> Creating resources with label build=ds-hr-app ...
        imagestream "ds-hr-app" created
        buildconfig "ds-hr-app" created
    --> Success
  5. バイナリービルドを開始します。oc 実行可能プログラムに対し、前述の手順 で作成したバイナリービルドのメインディレクトリーを、OpenShift ビルドのバイナリー入力を含むバイナリーとして使用するように指示します。

    注記

    次のコマンドの出力は、簡潔に表示できるよう短縮されています。

    $ oc start-build ds-hr-app --from-dir=./ocp/ --follow
    Uploading directory "ocp" as binary input for the build ...
    build "ds-hr-app-1" started
    Receiving source from STDIN as archive ...
    
    Copying all war artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all ear artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all rar artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all jar artifacts from /home/jboss/source/. directory into /opt/eap/standalone/deployments for later deployment...
    Copying all war artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    '/home/jboss/source/deployments/decisionserver-hellorules-client-1.4.0.Final.war' -> '/opt/eap/standalone/deployments/decisionserver-hellorules-client-1.4.0.Final.war'
    Copying all ear artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    Copying all rar artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    Copying all jar artifacts from /home/jboss/source/deployments directory into /opt/eap/standalone/deployments for later deployment...
    '/home/jboss/source/deployments/decisionserver-hellorules-1.4.0.Final.jar' -> '/opt/eap/standalone/deployments/decisionserver-hellorules-1.4.0.Final.jar'
    /opt/eap/standalone/deployments/decisionserver-hellorules-1.4.0.Final.jar is a kjar
    ...
    INFO: org.openshift.quickstarts:decisionserver-hellorules:1.4.0.Final verified.
    
    
    Pushing image 172.30.202.111:5000/ds-bin-demo/ds-hr-app:latest ...
    Pushed 6/9 layers, 67% complete
    Pushed 7/9 layers, 78% complete
    Pushed 8/9 layers, 89% complete
    Pushed 9/9 layers, 100% complete
    Push successful
  6. ビルドをベースにして新規の OpenShift アプリケーションを作成します。

    $ oc new-app ds-hr-app
    --> Found image c2c182e (48 seconds old) in image stream ds-hr-app under tag "latest" for "ds-hr-app"
    
        ds-bin-demo/ds-hr-app-2:ea504dd7
        --------------------------------
        Platform for executing business rules on JBoss BRMS Realtime Decision Server 6.3.
    
        Tags: builder, decisionserver, decisionserver6
    
        * This image will be deployed in deployment config "ds-hr-app"
        * Ports 8080/tcp, 8443/tcp, 8778/tcp will be load balanced by service "ds-hr-app"
          * Other containers can access this service through the hostname "ds-hr-app"
    
    --> Creating resources with label app=ds-hr-app ...
        deploymentconfig "ds-hr-app" created
        service "ds-hr-app" created
    --> Success
        Run 'oc status' to view your app.
  7. サービスをルートとして公開します。

    $ oc get svc -o name
    service/ds-hr-app
    $ oc expose svc/ds-hr-app
    route "ds-hr-app" exposed
  8. アプリケーションにアクセスします。

    URL の http://ds-hr-app-ds-bin-demo.openshift.example.com/hellorules/ にアクセスして、hellorules アプリケーションの利用可能なクエリー文字列の引数一覧を取得できます。

    URL の http://ds-hr-app-ds-bin-demo.openshift.example.com/hellorules?command=runLocal を使用して hellorules-client サーブレットを実行します。

    注記

    REST API の専用 server/ ページの http://ds-hr-app-ds-bin-demo.openshift.example.com/kie-server/services/rest/server/ にアクセスして現行の KIE サーバーの状態を確認することができます。前述の ユーザー名およびパスワードを使用してこのページにアクセスします (またはサーバーの REST API メソッド)。

6.3. 変更された Decision Server xPaaS イメージの使用

別の方法として、イメージに変更を加え後に変更したイメージを OpenShift で使用することもできます。以下は、現時点でサポートされるインターフェースと共に提供されているテンプレートの一覧です。

表6.2 提供されているテンプレート

テンプレート名サポートされているインターフェース

decisionserver63-basic-s2i.json

http-rest、jms-hornetq

decisionserver63-https-s2i.json

http-rest、https-rest、jms-hornetq

decisionserver63-amq-s2i.json

http-rest、https-rest、jms-activemq

Realtime Decision Server for OpenShift は Docker で実行でき、Realtime Decision Server for OpenShift に含まれる JBoss EAP 管理 CLI (EAP_HOME/bin/jboss-cli.sh) を使用して必要な設定の変更を行い、変更されたコンテナーを新規イメージとしてコミットすることができます。その後に変更されたイメージを OpenShift で実行できます。

重要

JBoss EAP xPaaS 設定ファイルの OpenShift プレースホルダーでは置換を実行しないことが推奨されます。これらのプレースホルダーは、コンテナーのデプロイメント時に (メッセージング、データストア、HTTPS などの) サービスを自動的に設定するために使用されるためです。これらの設定値は、環境変数を使用して設定されることが意図されています。

注記

パート IV. チュートリアル

第7章 サンプルワークフロー: Red Hat JBoss BRMS アプリケーションの Realtime Decision Server for OpenShift でのデプロイ

このチュートリアルでは、Red Hat JBoss BRMS アプリケーションを Realtime Decision Server for OpenShift としてデプロイできるように準備します。Red Hat JBoss BRMS アプリケーションでは、変更をイメージとしてデプロイすることが必要になる場合があります。

アプリケーションの準備
Red Hat JBoss BRMS プロジェクトはステートレスなナレッジセッションを持ち、リモートリポジトリーを使用し、KIE コンテナーのデプロイメントを定義するよう設定される必要があります。
これらのタスクの詳細については、『Red Hat JBoss BRMS User Guide』を参照してください。

  1. Red Hat JBoss BRMS コンソールにログインし、Project Explorer でプロジェクト設定を編集します。
  2. Open Project Editor をクリックして Project Settings を開きます。

    1. Knowledge bases and sessions の下で、Knowledge SessionStateless に設定されていることを確認します。OpenShift は KIE サーバーでのステートフルセッションをサポートしません。
    2. Repository View を使用して、以下のように xml を組み込み、pom.xml をリモートリポジトリーを使用するように設定します。

      ...
      <distributionManagement>
        <repository>
          <id>deployment</id>
          <name>OpenShift Maven repo</name>
          <url>http://maven.example/content/repo/deployments/</url>
        </repository>
      
        <snapshotRepository>
          <id>deployment</id>
          <name>OpenShift Maven repo</name>
          <url>http://maven.example.xas/content/repo/snapshots/</url>
        </snapshotRepository>
      </distributionManagement>
      ...

      詳細は、『Red Hat JBoss BRMS Administration and Configuration Guide』を参照してください。

  3. アプリケーションのリポジトリーで、settings.xml および .s2i/environment ファイルが Maven リポジトリーと KIE コンテナーのデプロイメントのそれぞれを定義していることを確認します。

    1. Maven リポジトリーは、OpenShift がアプリケーションのアーティファクトをダウンロードできるように settings.xml に設定する必要があります。以下のような xml が必要です。

      ...
      <profiles>
        <profile>
          <id>openshift-mirror-repositories</id>
          <repositories>
            <repository>
              <id>openshift-mirror</id>
              <url>http://maven.example/content/group/public/</url>
            </repository>
          </repositories>
      
          <pluginRepositories>
            <pluginRepository>
              <id>openshift-mirror</id>
              <url>http://maven.example/content/group/public/</url>
            </pluginRepository>
          </pluginRepositories>
        </profile>
      </profiles>
      ...

      詳細は、『Red Hat JBoss BRMS Installation Guide』を参照してください。

    2. .s2i/environment ファイルでは、使用する KIE jar やそれらを取得する場所を含む、KIE コンテナーのデプロイメントを定義する必要があります。Pod 名は、この例では DemoContainer として定義されているデプロイメントのエイリアスに派生する名前になります。

      KIE_CONTAINER_DEPLOYMENT_OVERRIDE=DemoContainer=com.example.openshift:example_workflow:1.0

7.1. Decision Server デプロイメントの準備

  1. 新規プロジェクトを作成します。

    $ oc new-project rds-app-demo
  2. Decision Server アプリケーションのデプロイメントに使用されるサービスアカウントを作成します。

    $ oc create serviceaccount rds-service-account
  3. 表示 (view) ロールをサービスアカウントに追加します。これにより、サービスアカウントを使って、rds-app-demo 名前空間にあるすべてのリソースを表示できます。これは、クラスターの管理に必要です。

    $ oc policy add-role-to-user view system:serviceaccount:rds-app-demo:rds-service-account
  4. Decision Server テンプレートには SSL キーストアおよび JGroups キーストアが必要です。
    これらのキーストアは、アプリケーションが https を使用しない場合にも使用されることが予想されます。
    この例では、Java Development Kit に含まれるパッケージ「keytool」を使用して、これらのキーストアの自己署名型の証明書を生成します。以下のコマンドはパスワードを求めるプロンプトを出します。

    1. SSL キーストアのセキュアな鍵を生成します。

      $ keytool -genkeypair -alias https -storetype JKS -keystore keystore.jks
    2. JGroups キーストアのセキュアな鍵を生成します。

      $ keytool -genseckey -alias jgroups -storetype JCEKS -keystore jgroups.jceks
  5. SSL および JGroup キーストアファイルを使用してプロジェクトのシークレットを作成します。

    $ oc create secret generic rds-app-secret --from-file=jgroups.jceks --from-file=keystore.jks
  6. シークレットを先に作成したサービスアカウントに追加します。

    $ oc secret add sa/rds-service-account secret/rds-app-secret

7.2. デプロイメント

  1. OpenShift web コンソールにログインし、rds-app-demo プロジェクトスペースを選択します。
  2. Add to Project をクリックして、すべてのデフォルトのイメージストリームおよびテンプレートを一覧表示します。
  3. Filter by keyword 検索バーを使用して一覧を decisionserver に一致する項目に制限します。See all をクリックして必要なアプリケーションテンプレートを表示する必要があります。
  4. 必要なテンプレートを選択し、設定して Deploy をクリックします。

ビルド時に Maven リポジトリーはダウンロードされ、コンテナーにビルドされるため、追加のパッケージまたは依存関係はランタイム時にダウンロードされません。

いったん Pod が実行されると、アプリケーションは利用可能になります。Decision Server web コンソールに接続するには、Pod に移動し、Open Java Console ボタンをクリックします。

第8章 サンプルワークフロー: アップグレードされたバージョンを元のアプリケーションと同時にデプロイ

このサンプルワークフローは、サンプルワークフロー: Red Hat JBoss BRMS アプリケーションの Decision Server xPaaS でのデプロイ に基づくものです。ここでは、1.0 バージョンの example_workflow アーティファクトがデプロイメントエイリアスの DemoContainer でデプロイされています。この例では、1.1 バージョンの example_workflow アーティファクトを 1.0 バージョンと共にデプロイし、どちらのバージョンの example_workflow アーティファクトもデプロイメントエイリアスを使って DemoContainer で同時に実行されるようにします。

  1. リポジトリーを新規バージョンのサーバーで更新します。
  2. アプリケーションの .s2i/environment ファイルを編集します。

    1. KIE_CONTAINER_DEPLOYMENT 変数を KIE_CONTAINER_DEPLOYMENT_OVERRIDE に変更します。
    2. 新規バージョンを値の文字列の末尾に追加し、パイプで古いバージョンと切り分けます。

      KIE_CONTAINER_DEPLOYMENT_OVERRIDE=DemoContainer=com.example.openshift:example_workflow:1.0|DemoContainer=com.example.openshift:example_workflow:1.1
  3. 変更を保存します。
  4. プロジェクトに GitHub Webhook が設定されている場合、新規バージョンが古い実行中のアプリケーションと共に自動的にデプロイされます。それ以外の場合には、手動でビルドすることもできます。

    $ oc start-build rds-app-demo

ビルドが完了すると、アプリケーションの 2 つの異なるバージョンが同じデプロイメントエイリアスを使用して同時に実行されます。クライアント要求をアプリケーションの正しいバージョンにリダイレクトする方法についての詳細は、「複数バージョンのターゲット要求」を参照してください。

第9章 サンプルワークフロー: Webhook が自動アプリケーション更新について有効な状態での Red Hat JBoss BRMS アプリケーションの OpenShift でのデプロイ

このワークフローでは、設定変更が OpenShift に自動的にプッシュされるように Red Hat JBoss BRMS、GitHub、および OpenShift を設定する方法について詳しく説明しています。この例では、以下について説明します。

注記

Red Hat JBoss BRMS がローカルマシンで実行されていることを確認してください。

9.1. リポジトリーのフォーク

  1. GitHub にログインした状態で Decision Server サンプル ページにアクセスします。
  2. リポジトリーをフォーク します。

    新規のフォークにリダイレクトされます。

  3. フォークの HTTPS クローン URL をコピーします。

この Decision Server の例では、ユーザーの名前が受信され、名前がルールファイルの master として指定されるユーザー名に一致する場合、ユーザーはマスターユーザーとして認識され、受け入れられます。名前が一致しない場合にはユーザーは侵入者として認識されます。

9.2. リポジトリーのクローン作成

Red Hat JBoss BRMS ワークベンチ:

  1. File Explorer で AuthoringAdministration をクリックします。
  2. RepositoriesClone repository をクリックします。
  3. Repository Name decision-services を入力します。
  4. Organizational Unit を選択します。
  5. フォークされた Git リポジトリーの HTTPS クローン URL を入力します: https://github.com/<Your_Github_Username>/decisionserver.git
  6. Clone をクリックします。

    クローンが作成されると、リポジトリーはコミット履歴を表示します。

9.3. GitHub 更新を自動化するフックの作成

Red Hat JBoss BRMS が GitHub リポジトリーの自動更新を随時実行できるように、このプロジェクトのファイルは変更されます。

注記

以下の手順を実行する前に、SSH キーのアクセスを GitHub 用に設定しておく必要があります。

  1. コマンドラインから、先にフォークしたプロジェクトの /.niogit ディレクトリーに移動します。

    $ cd EAPHOME/bin/.niogit/decision-services.git

    上記のパスはデフォルトであり、これはデータの保存先として設定したワークベンチの場所によって異なる場合があります。この場所は、org.uberfire.nio.git.dir システムプロパティーを使用して設定されます。

  2. このプロジェクトにリモート URL を設定します。

    $ git remote set-url origin git@github.com:/decisionserver
  3. フックのディレクトリーに移動します。

    $ cd hooks
  4. 単純な post-commit ファイルを作成します。

    $ touch post-commit
  5. ファイルを編集し、以下を入力します。

    #!/bin/sh
    
    git push origin master
  6. 変更を保存し、ファイルを終了します。
  7. ファイルのパーミッションを変更し、Red Hat JBoss BRMS に必要なアクセスを付与します。

    $ chmod 777 post-commit

    フックの設定が行われました。この Red Hat JBoss BRMS プロジェクトのファイルへの変更により、フォークした decisionserver GitHub リポジトリーが自動的に更新されることになります。

9.4. Decision Server のサンプルルールの変更

Red Hat JBoss BRMS ワークベンチ:

  1. AuthoringProject authoring をクリックします。
  2. DRL の下で、クリックして HelloRules.drl ファイルを読み込みます。

    package org.openshift.quickstarts.decisionserver.hellorules
    
    query "get greeting"()
        greeting : Greeting()
    end
    
    rule "greet master"
        when
            person : Person( name == "john")
        then
            String salutation = "Hello " + person.getName() + "! What can I help you with today?";
            insert(new Greeting(salutation));
    end
    rule "greet strangers"
        when
            person : Person(name != "john")
        then
            String salutation = "Hey there " + person.getName() + ". I don't think I know you yet!";
            insert(new Greeting (salutation));
    end
  3. john を含む行を実際のユーザーに置き換えて変更します。
  4. Save をクリックし、コメントにチェックして Save を再度クリックします。

    先に作成したフックにより、フォークした GitHub リポジトリーが保存した変更で自動的に更新されます。

9.5. Decision Service の OpenShift での作成

OpenShift web コンソール:

  1. 管理者が推奨するユーザー名とパスワードを使用してログインします。
  2. 新規プロジェクトを作成するには、New Project をクリックします。
  3. 新規プロジェクトの一意の名前、表示名および説明を入力します。
  4. Create をクリックします。

    web コンソールの welcome 画面が読み込まれます。

  5. Add to Project をクリックします。
  6. Filter by keyword フィールドに、decision を入力し、Decision Server に関連する利用可能な xPaaS テンプレートを表示します。
  7. decisionserver63-basic-s2i テンプレートをクリックします。
  8. Parameters セクションで、KIE_SERVER_PASSWORD を、KIE Server REST または JMS インターフェースにアクセスするために使用するパスワードに変更します。
  9. SOURCE_REPOSITORY_URL を、フォークされたリポジトリーの Git ソース URI に変更します。以下が例になります。

    https://github.com/<your_github_username>/decisionserver.git
  10. SOURCE_REPOSITORY_REFmaster に変更します。
  11. CONTEXT_DIRgreeting に変更します。
  12. ページの下部にスクロールし、Create をクリックします。

アプリケーションのビルド時に、Overview ページから View Log をクリックしてビルドの進捗を確認することができます。

9.6. Maven の使用によるビルド時間の短縮

OpenShift ブログ掲載 の詳細を参照して Maven プロキシーを設定してください。これにより、OpenShift での java ビルドのビルド時間が短縮されます。

9.7. Maven プロキシーの統合

ビルド設定を変更し、Maven プロキシーを使用するように設定するには、OpenShift web コンソールで以下を実行します。

  1. BrowseBuilds<your_application> をクリックします。
  2. Start Build の横にある 3 つの縦方向のドットをクリックしてから Edit (Raw) をクリックします。
  3. MAVEN_MIRROR_URL 環境変数を、KIE_CONTAINER_DEPLOYMENT 変数の下に追加します。

    strategy
     sourceStrategy:
      env:
       -
        name: KIE_CONTAINER_DEPLOYMENT
        value: 'HelloRulesContainer=org.openshift.quickstarts:decisionserver-hellorules:1.2.0.Final'
       -
        name: MAVEN_MIRROR_URL
        value: 'http://nexus-ci.cloudapps.bos.openshift3roadshow.com/content/groups/public/'

    MAVEN_MIRROR_URL の値は、リポジトリーを表示し、公開リポジトリーグループのパスをコピーして Maven で確認できます。

  4. Save をクリックします。
  5. ビルドの Configuration タブをクリックして、MAVEN_MIRROR_URL が環境変数の下にアクティブに一覧表示されていることを確認します。

これで、Maven がこの OpenShift プロジェクトに対して設定され、ビルドプロセスは今後のビルドで短縮されます。以降のビルドでは更新されたファイルのみのダウンロードが必要となり、それらは以前に読み込まれたファイルに組み込まれるために短縮が可能となります。

9.8. サービスのテスト

Maven プロキシーの統合後に、サービスが機能していることをテストし、ビルドプロセスの時間が以前のビルドと比較してどの程度短縮されるかを確認することができます。OpenShift web コンソールで以下を実行できます。

  1. BrowseBuilds<your_application> をクリックします。
  2. Start Build をクリックします。
  3. 画面下部にある一覧で、開始したばかりの新規ビルドをクリックします。
  4. Logs タブをクリックしてから Follow をクリックします。
  5. 新規ビルドがローカルへのダウンロードに新規の Maven プロキシーを使用していることを確認します。これは、Downloading を参照するログの行を見つけて確認できます。たとえば、以下のようになります。

    I0130 12:32:25.664594     1 sti.go:492] Downloading: http://nexus-ci.cloudapps.openshift.com/content/groups/public/org/kie/kie-maven-plugin/6.3.0.Final-redhat-5/kie-maven-plugin-6.3.0.Final-redhat-5.pom
  6. ビルドが完了したら、BrowseBuilds<your_application> をクリックし、概要を表示して、新規のビルド時間を以前のビルドと比較することができます。最新ビルドの時間は、Maven プロキシーの使用によって大幅に短縮します。
  7. Overview をクリックして Pod のステータスを確認します。ここでは、readiness probe チェックが付けられており、Not Ready ステータスが表示されています。
  8. BrowsePods をクリックしてその進捗を確認します。Containers Ready 列のステータスは、Pod が readiness probe にパスすると 1/1 に変更されます。

9.9. OpenShift Webhook の設定

OpenShift web コンソール:

  1. Browse タブをクリックしてから Builds をクリックします。
  2. ビルド名をクリックしてから、Configuration タブをクリックします。
  3. GitHub webhook URL の横にあるコピーアイコンをクリックして webhook ペイロード URL をコピーします。
  4. GitHub のフォークされたリポジトリーに移動してから Settings をクリックします。
  5. Webhooks & Services をクリックします。
  6. Add webhook をクリックします。
  7. webhook URL を Payload URL フィールドにコピーします。
  8. Disable SSL verification をクリックしてから、これをポップアップ画面で確定します。
  9. Add webhook をクリックして保存します。

Github は OpenShift サーバーに対して ping し、通信が正常に実行されることを確認できます。webhook URL の横にある緑のチェックマークは、設定が正常に行われていることを示します。カーソルをチェックマークの上に置いて最後の ping のステータスを確認します。

フォークされたリポジトリーにコード変更をプッシュする次回のタイミングで、アプリケーションが自動的に再ビルドされます。

9.10. 設定されたフックのテスト

Red Hat JBoss BRMS ワークベンチ:

  1. HelloRules.drl ファイルを読み込みます。

    package org.openshift.quickstarts.decisionserver.hellorules
    
    query "get greeting"()
        greeting : Greeting()
    end
    
    rule "greet master"
        when
            person : Person( name == "john")
        then
            String salutation = "Hello " + person.getName() + "! What can I help you with today?";
            insert(new Greeting(salutation));
    end
    rule "greet strangers"
        when
            person : Person(name != "john")
        then
            String salutation = "Hey there " + person.getName() + ". I don't think I know you yet!";
            insert(new Greeting (salutation));
    end
  2. At your service my master を他の内容に変更して文字列の挨拶文の行を変更します。
  3. Save をクリックし、チェックインコマンドを入力して Save を再度クリックします。

先に作成したフックによりフォークされた GitHub リポジトリーが更新され、GitHub webhook は OpenShift で新規ビルドをトリガーします。

この設定では、Red Hat JBoss BRMS ワークベンチでの設定変更の保存だけが必要となり、残りのプロセスは完全に自動化されます。

パート V. リファレンス

第10章 アーティファクトリポジトリーのミラー

Maven のリポジトリーは各種のビルドアーティファクトおよび依存関係 (すべてのプロジェクト jar、ライブラリー jar、プラグインまたはその他のプロジェクト固有のアーティファクト) を保持します。これは、S2I ビルドを実行する一方で、アーティファクトのダウンロード元となる場所も指定します。中央リポジトリーを使用するほかにも、組織がローカルカスタムリポジトリーをデプロイすることが通例となっています (ミラー化)。

ミラーを使用する利点:

  • 地理的に近くなるためスピードが速くなる同期したミラーを利用できる。
  • リポジトリーのコンテンツの制御を強化できる。
  • 公開サーバーおよびリポジトリーに依存せずに、複数の異なるチーム (開発者、CI) 間でアーティファクトを共有できる。
  • ビルド時間を短縮できる。

リポジトリーマネージャーはミラーに対してローカルキャッシュとして機能できる場合がよくあります。リポジトリーマネージャーがすでにデプロイされており、http://10.0.0.1:8080/repository/internal/ で外部からアクセスできることを想定すると、以下のように MAVEN_MIRROR_URL 環境変数をアプリケーションのビルド設定に指定することにより S21 ビルドでこのマネージャーを使用できます。

  1. MAVEN_MIRROR_URL 変数を適用するビルド設定の名前を特定します。

    oc get bc -o name
    buildconfig/ds
  2. ds のビルド設定を MAVEN_MIRROR_URL 環境変数で更新します。

    oc env bc/ds MAVEN_MIRROR_URL="http://10.0.0.1:8080/repository/internal/"
    buildconfig "ds" updated
  3. 設定を確認します。

    oc env bc/ds --list
    # buildconfigs ds
    MAVEN_MIRROR_URL=http://10.0.0.1:8080/repository/internal/
  4. アプリケーションの新規ビルドをスケジュールします。
注記

アプリケーションのビルド時に、Maven の依存関係がデフォルトの公開リポジトリーではなく、リポジトリーマネージャーからプルされることに気づかれることでしょう。また、ビルドの完了後に、ビルド時に取得され、使用されたすべての依存関係がミラーに設定されていることにも気づかれることでしょう。

第11章 アプリケーションテンプレートのパラメーター

変数説明

APPLICATION_NAME

アプリケーションの名前 (必須)。

KIE_CONTAINER_DEPLOYMENT

デプロイする KIE コンテナー (必須)。例: containerId=groupId:artifactId:version

MYSQL_LOWER_CASE_TABLE_NAMES

テーブル名が保存され、比較される方法を設定します。

AMQ_SECRET

SSL 関連ファイルを含むシークレットの名前。値が指定されない場合は、ランダムパスワードが生成されます。

SOURCE_REPOSITORY_URL

アプリケーションの Git ソース URI。

SOURCE_REPOSITORY_REF

Git ブランチ/タグ参照。

CONTEXT_DIR

ビルドする Git プロジェクト内のパス。ルートプロジェクトディレクトリーの場合は空になります。

KIE_SERVER_USER

KIE サーバー REST または JMS インターフェースにアクセスするためのユーザー名。

KIE_SERVER_PASSWORD

KIE サーバー REST または JMS インターフェースにアクセスするためのパスワード。ユーザー名以外を指定し、root、admin または administrator とすることはできません。8 文字以上で、アルファベット文字 1 つ、数字 1 つ、英数字以外の記号 1 つが含まれる必要があります。

第12章 エンドポイント

クライアントは複数のエンドポイントで Realtime Decision Server for OpenShift にアクセスできます。デフォルトでは、提供されるテンプレートには REST、HornetQ、および ActiveMQ のサポートが含まれます。

12.1. REST

クライアントは各種の方法で REST API を使用できます。

12.1.1. ブラウザー

  1. 現行のサーバー状態: http://host/kie-server/services/rest/server
  2. コンテナーの一覧: http://host/kie-server/services/rest/server/containers
  3. 特定のコンテナーの状態: http://host/kie-server/services/rest/server/containers/HelloRulesContainer

12.1.2. Java

// HelloRulesClient.java
KieServicesConfiguration config = KieServicesFactory.newRestConfiguration(
  "http://host/kie-server/services/rest/server", "kieserverUser", "kieserverPassword");
config.setMarshallingFormat(MarshallingFormat.XSTREAM);
RuleServicesClient client =
  KieServicesFactory.newKieServicesClient(config).getServicesClient(RuleServicesClient.class);
ServiceResponse<String> response = client.executeCommands("HelloRulesContainer", myCommands);

12.1.3. コマンドライン

# request.sh
#!/bin/sh
curl -X POST \
  -d @request.xml \
  -H "Accept:application/xml" \
  -H "X-KIE-ContentType:XSTREAM" \
  -H "Content-Type:application/xml" \
  -H "Authorization:Basic a2llc2VydmVyOmtpZXNlcnZlcjEh" \
  -H "X-KIE-ClassType:org.drools.core.command.runtime.BatchExecutionCommandImpl" \
http://host/kie-server/services/rest/server/containers/instances/HelloRulesContainer
<!-- request.xml -->
<batch-execution lookup="HelloRulesSession">
  <insert>
    <org.openshift.quickstarts.decisionserver.hellorules.Person>
      <name>errantepiphany</name>
    </org.openshift.quickstarts.decisionserver.hellorules.Person>
  </insert>
  <fire-all-rules/>
  <query out-identifier="greetings" name="get greeting"/>
</batch-execution>

12.2. JMS

クライアントは、以下に示すように Java Messaging Service を使用することもできます。

12.2.1. Java (HornetQ)

// HelloRulesClient.java
Properties props = new Properties();
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
  "org.jboss.naming.remote.client.InitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "remote://host:4447");
props.setProperty(Context.SECURITY_PRINCIPAL, "kieserverUser");
props.setProperty(Context.SECURITY_CREDENTIALS, "kieserverPassword");
InitialContext context = new InitialContext(props);
KieServicesConfiguration config =
  KieServicesFactory.newJMSConfiguration(context, "hornetqUser", "hornetqPassword");
config.setMarshallingFormat(MarshallingFormat.XSTREAM);
RuleServicesClient client =
  KieServicesFactory.newKieServicesClient(config).getServicesClient(RuleServicesClient.class);
ServiceResponse<String> response = client.executeCommands("HelloRulesContainer", myCommands);

12.2.2. Java (ActiveMQ)

// HelloRulesClient.java
props.setProperty(Context.INITIAL_CONTEXT_FACTORY,
  "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
props.setProperty(Context.PROVIDER_URL, "tcp://host:61616");
props.setProperty(Context.SECURITY_PRINCIPAL, "kieserverUser");
props.setProperty(Context.SECURITY_CREDENTIALS, "kieserverPassword");
InitialContext context = new InitialContext(props);
ConnectionFactory connectionFactory = (ConnectionFactory)context.lookup("ConnectionFactory");
Queue requestQueue = (Queue)context.lookup("dynamicQueues/queue/KIE.SERVER.REQUEST");
Queue responseQueue = (Queue)context.lookup("dynamicQueues/queue/KIE.SERVER.RESPONSE");
KieServicesConfiguration config = KieServicesFactory.newJMSConfiguration(
  connectionFactory, requestQueue, responseQueue, "activemqUser", "activemqPassword");
config.setMarshallingFormat(MarshallingFormat.XSTREAM);
RuleServicesClient client =
  KieServicesFactory.newKieServicesClient(config).getServicesClient(RuleServicesClient.class);
ServiceResponse<String> response = client.executeCommands("HelloRulesContainer", myCommands);

第13章 トラブルシューティング

OpenShift ログを表示する以外にも、そのログを参照して実行中の Decision Server xPaaS イメージコンテナーのトラブルシューティングを実行できます。これらのログはコンテナーの標準出力に出力され、以下のコマンドでアクセスできます。

$ oc logs -f <pod_name>
注記

デフォルトで、OpenShift Decision Server xPaaS イメージにはファイルログハンドラーが設定されていません。ログはコンテナーの標準出力のみに送信されます。

付録A バージョン情報

本ドキュメントの最終更新日時: 2017 年 12 月 5 日

法律上の通知

Copyright © 2018 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat Software Collections is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.