KIE Server の管理とモニタリング

Red Hat Decision Manager 7.8

Red Hat Customer Content Services

概要

本書では、Red Hat Decision Manager 7.8 のインストール、設定、パフォーマンスのチューニング方法について説明します。

前書き

システム管理者は、Red Hat Decision Manager を実稼働環境にインストール、設定、アップグレードし、システム障害にすばやくかつ容易に対応できるようになり、システムが最適に稼働するようにできます。

前提条件

第1章 Red Hat Decision Manager のコンポーネント

Red Hat Decision Manager は、Business Central と KIE Server で構成されます。

  • Business Central は、ビジネスルールを作成して管理するグラフィカルユーザーインターフェースです。Business Central は、Red Hat JBoss EAP インスタンスまたは Red Hat OpenShift Container Platform (OpenShift) にインストールできます。

    Business Central は、スタンドアロンの JAR ファイルとしても使用できます。Business Central スタンドアロンの JAR ファイルとして使用して、アプリケーションサーバーにデプロイせずに Business Central を実行できます。

  • KIE Server では、ルール、およびその他のアーティファクトが実行されます。ルールのインスタンスを作成して実行し、計画の問題を解決します。KIE Server は、Red Hat JBoss EAP インスタンス、OpenShift、Oracle WebLogic Server インスタンス、IBM WebSphere Application Server インスタンスに、または Spring Boot アプリケーションの一部としてインストールできます。

    KIE Server は、管理モードまたは非管理モードで動作するように設定できます。非管理モードの場合は、手動で KIE コンテナー (デプロイメントユニット) を作成および維持する必要があります。KIE コンテナーは、プロジェクトの特定のバージョンです。管理モードの場合は、Decision Manager コントローラーが KIE Server の設定を管理し、ユーザーはコントローラーと対話形式で KIE コンテナーを作成、維持します。

第2章 Maven を使ったシステム統合

Red Hat Decision Manager は、Red Hat JBoss Middleware Maven Repository と Maven Central リポジトリーを依存関係ソースとして使用するように作られています。これら両方の依存関係がプロセスビルドに利用できるようにしてください。

ご自分のプロジェクトがアーティファクトの特定バージョンに依存していることを確認してください。LATEST または RELEASE は、アプリケーションの依存関係バージョンの特定と管理に一般的に使用されます。

  • LATEST は、アーティファクトの最新デプロイ (スナップショット) バージョンです。
  • RELEASE は、リポジトリー内のスナップショットバージョンを除く最新リリースです。

LATEST または RELEASE を使用することで、サードパーティーのライブラリーの新リリース時にバージョン番号を更新する必要がなくなりますが、ソフトウェアリリースの影響を受けるビルドに対してコントロールができなくなります。

2.1. ローカルプロジェクトの Preemptive (先行) 認証

お使いの環境でインターネットにアクセスできない場合には、Maven Central などの公開リポジトリーの代わりに社内リポジトリーを設定します。Red Hat Decision Manager サーバーのリモート Maven リポジトリーからローカル Maven プロジェクトに JAR をインポートするには、リポジトリーサーバーの先行認証をオンにします。先行認証をオンにするには、pom.xml ファイルの guvnor-m2-repo 用の認証を設定してください。以下に例を示します。

<server>
  <id>guvnor-m2-repo</id>
  <username>admin</username>
  <password>admin</password>
  <configuration>
    <wagonProvider>httpclient</wagonProvider>
    	<httpConfiguration>
      	<all>
      	   <usePreemptive>true</usePreemptive>
      	</all>
    	</httpConfiguration>
  </configuration>
</server>

別の方法では、Authorization HTTP ヘッダーを Base64 encoded 認証情報で設定できます。

<server>
  <id>guvnor-m2-repo</id>
  <configuration>
  	<httpHeaders>
  	   <property>
    	    <name>Authorization</name>
    	    <!-- Base64-encoded "admin:admin" -->
    	    <value>Basic YWRtaW46YWRtaW4=</value>
  	   </property>
    </httpHeaders>
  </configuration>
</server>

2.2. Business Central における重複した GAV の検出

Business Central のすべての Maven リポジトリーで、GroupIdArtifactIdVersion (GAV) の各値が重複しているかどうかが確認されます。GAV が重複していると、実行された操作が取り消されます。

注記

重複する GAV の検出は、Development Mode のプロジェクトでは無効になっています。Business Central で重複する GAV 検出を有効にするには、 プロジェクトの SettingsGeneral SettingsVersion に移動して、Development Mode オプションを OFF (該当する場合) に切り替えます。

以下の操作を実行するたびに、重複した GAV の検出が行われます。

  • プロジェクトのプロジェクト定義を保存します。
  • pom.xml ファイルを保存します。
  • プロジェクトをインストール、ビルドまたはデプロイします。

以下の Maven リポジトリーで重複の GAV が確認されます。

  • pom.xml ファイルの <repositories> and <distributionManagement> 要素で指定されたリポジトリー。
  • Maven の settings.xml 設定ファイルに指定されたリポジトリー。

2.3. Business Central における重複した GAV 検出設定の管理

admin ロールを持つ Business Central ユーザーは、プロジェクトで GroupId 値、ArtifactId 値、Version 値 (GAV) が重複しているかどうかを確認するリポジトリーの一覧を修正できます。

注記

重複する GAV の検出は、Development Mode のプロジェクトでは無効になっています。Business Central で重複する GAV 検出を有効にするには、 プロジェクトの SettingsGeneral SettingsVersion に移動して、Development Mode オプションを OFF (該当する場合) に切り替えます。

手順

  1. Business Central で、MenuDesignProjects に移動して、プロジェクト名をクリックします。
  2. プロジェクトの Settings タブをクリックし、Validation をクリックしてリポジトリーの一覧を開きます。
  3. 一覧表示したリポジトリーオプションの中から選択するか選択を解除して、重複した GAV の検出を有効または無効にします。

    今後、重複した GAV の報告は、検証を有効にしたリポジトリーに対してのみ行われます。

    注記

    この機能を無効にするには、システムの起動時に Business Central のorg.guvnor.project.gav.check.disabled システムプロパティーを true に設定します。

    $ ~/EAP_HOME/bin/standalone.sh -c standalone-full.xml
    -Dorg.guvnor.project.gav.check.disabled=true

第3章 Red Hat Decision Manager へのパッチ更新およびマイナーリリースアップグレードの適用

大抵の場合は、Business Central、KIE Server、ヘッドレス Decision Manager コントローラーなど、Red Hat Decision Manager の特定コンポーネントの更新を容易にする自動更新ツールが Red Hat Decision Manager のパッチ更新と新規マイナーバージョンで提供されます。デシジョンエンジンやスタンドアロンの Business Central など、その他の Red Hat Decision Manager アーティファクトは、各マイナーリリースが含まれる新しいアーティファクトとしてリリースされるため、再インストールして更新を適用する必要があります。

この同様の自動更新ツールを使ってパッチ更新とマイナーリリースアップグレードの両方を Red Hat Decision Manager 7.8 に適用することができます。バージョン 7.8 から 7.8.1 への更新といった Red Hat Decision Manager のパッチ更新には、最新のセキュリティー更新とバグ修正が含まれます。バージョン 7.7.x から 7.8 へのアップグレードといった Red Hat Decision Manager のマイナーリリースアップグレードには、機能強化、セキュリティー更新、バグ修正が含まれます。

注記

Red Hat Decision Manager 更新ツールに含まれるのは、Red Hat Decision Manager の更新のみです。Red Hat JBoss EAP へのパッチは、Red Hat JBoss EAP パッチ配信を使用して適用する必要があります。詳細は、『パッチおよびアップグレードガイド』を参照してください。

前提条件

  • Red Hat Decision Manager インスタンスおよび KIE Server インスタンスが稼働していない。Red Hat Decision Manager または KIE Server のインスタンスを実行している間は更新を適用しないでください。

手順

  1. Red Hat カスタマーポータルの Software Downloads ページに移動し (ログインが必要)、ドロップダウンオプションから選択およびバージョンを選択します。

    バージョン 7.7.x から 7.8 などのように Red Hat Decision Manager のマイナーリリースにアップグレードする場合は、お使いの Red Hat Decision Manager に最新のパッチ更新を適用してから、以下の手順にしたがって新たなマイナーリリースにアップグレードしてください。

  2. Patches をクリックし、Red Hat Decision Manager [VERSION] Update Tool をダウンロードし、ダウンロードした rhdm-$VERSION-update.zip ファイルを一時ディレクトリーに展開します。

    この更新ツールは、Business Central、KIE Server、ヘッドレス Decision Manager コントローラーなど、Red Hat Decision Manager の一定のコンポーネントの更新を自動化します。このツールを使用して最初に更新を適用し、Red Hat Decision Manager ディストリビューションに関連するその他の更新、または新しいリリースアーティファクトをインストールします。

  3. 更新ツールがファイルを更新しないようにするには、展開した rhdm-$VERSION-update ディレクトリーに移動し、blacklist.txt ファイルを開き、更新しないファイルの相対パスを追加します。

    ファイルが blacklist.txt ファイルの一覧に追加されていると、更新スクリプトは、そのファイルを新しいバージョンに置き換えずにそのまま残し、新しいバージョンのファイルに .new 接尾辞を付けて追加します。ブラックリストのファイルが配布されなくなると、更新ツールは、.removed 接尾辞の付いた、空のマーカーファイルを作成します。新しいファイルをそのままにするか、手動でマージするか削除します。

    blacklist.txt ファイルで除外されるファイルの例:

    WEB-INF/web.xml  // Custom file
    styles/base.css  // Obsolete custom file kept for record

    更新後の、ブラックリストに指定されたファイルディレクトリーの内容:

    $ ls WEB-INF
    web.xml web.xml.new
    $ ls styles
    base.css base.css.removed
  4. コマンドの端末で、rhdm-$VERSION-update.zip ファイルから展開した一時ファイルに移動し、以下の形式で apply-updates スクリプトを実行します。

    重要

    更新を適用する前に、Red Hat Decision Manager インスタンスおよび KIE Server インスタンスが実行していないことを確認します。Red Hat Decision Manager インスタンスまたは KIE Server インスタンスが実行している間は更新を適用しないでください。

    Linux または UNIX ベースのシステムの場合:

    $ ./apply-updates.sh $DISTRO_PATH $DISTRO_TYPE

    Windows の場合:

    $ .\apply-updates.bat $DISTRO_PATH $DISTRO_TYPE

    $DISTRO_PATH の部分は、関連するディストリビューションディレクトリーへのパスに、$DISTRO_TYPE の部分は、更新しているディストリビューションの種類に置き換えます。

    Red Hat Decision Manager 更新ツールでは、以下のディストリビューションの種類がサポートされます。

    • rhdm-decision-central-eap7-deployable: Business Central を更新します (decision-central.war)。
    • rhdm-kie-server-ee8: KIE Server を更新します (kie-server.war)。

      注記

      この更新ツールで、Red Hat JBoss EAP EE7 から Red Hat JBoss EAP EE8 に更新されます。

    • rhdm-kie-server-jws: Red Hat JBoss Web Server で KIE Server を更新します (kie-server.war)。
    • rhdm-controller-ee7: ヘッドレス Decision Manager controller (controller.war) を更新します。
    • rhdm-controller-jws: Red Hat JBoss Web Server でヘッドレスの Decision Manager コントローラーを更新します (controller.war)。

      Red Hat JBoss EAP で、Red Hat Decision Manager の完全ディストリビューションに対する Business Central および KIE Server への更新の例:

      ./apply-updates.sh ~EAP_HOME/standalone/deployments/decision-central.war rhdm-decision-central-eap7-deployable
      
      ./apply-updates.sh ~EAP_HOME/standalone/deployments/kie-server.war rhdm-kie-server-ee8

      ヘッドレス Decision Manager コントローラーへの更新例 (使用している場合):

      ./apply-updates.sh ~EAP_HOME/standalone/deployments/controller.war rhdm-controller-ee7

      更新スクリプトは、展開した rhdm-$VERSION-update ディレクトリーに、指定したディストリビューションのコピーを含めて、backup ディレクトリーを作成してから、更新を行います。

  5. 更新ツールが完了したら、更新ツールをダウンロードした、Red Hat カスタマーポータルの Software Downloads ページに戻り、Red Hat Decision Manager ディストリビューションに関するその他の更新または新しいリリースアーティファクトをインストールします。

    デシジョンエンジンまたはその他のアドオンに関する .jar など、Red Hat Decision Manager ディストリビューションにすでに存在しているファイルについては、ファイルの既存のバージョンを、Red Hat カスタマーポータルから取得した新しいバージョンと置き換えます。

  6. エアギャップ環境など、スタンドアロンの Red Hat Decision Manager 7.8.0 Maven Repository アーティファクト (rhdm-7.8.0-maven-repository.zip) を使用している場合は、Red Hat Decision Manager 7.8.x Maven Repository をダウンロードし、ダウンロードした rhdm-7.8.x-maven-repository.zip ファイルを既存の ~/maven-repository ディレクトリーに展開して、関連するコンテンツを更新します。

    Maven リポジトリーの更新例:

    $ unzip -o rhdm-7.8.x-maven-repository.zip 'rhba-7.8.1.GA-maven-repository/maven-repository/*' -d /tmp/rhbaMavenRepoUpdate
    
    $ mv /tmp/rhbaMavenRepoUpdate/rhba-7.8.0.GA-maven-repository/maven-repository/ $REPO_PATH/
    注記

    更新が完了したら /tmp/rhbaMavenRepoUpdate フォルダーを削除してください。

  7. 関連する更新をすべて適用したら、Red Hat Decision Manager および KIE Server を起動して、Business Central にログインします。
  8. Business Central 内のすべてのプロジェクトデータが存在して正確であることを確認し、Business Central ウィンドウの右上隅でプロファイル名をクリックし、About をクリックして、更新した製品バージョン番号を確認します。

    Business Central でエラーが発生したり、データが不足していることが通知されたら、rhdm-$VERSION-update ディレクトリーの backup ディレクトリーにコンテンツを復元し、更新ツールへの変更を戻します。Red Hat カスタマーポータルで Red Hat Decision Manager の以前のバージョンから、関連するリリースアーティファクトを再インストールできます。以前のディストリビューションを復元したら、更新を再実行してください。

第4章 KIE Server の設定と起動

KIE Server の場所、ユーザー名、パスワード、その他の関連プロパティーは、KIE Server の起動時に必要な設定を定義することで設定できます。

手順

Red Hat Decision Manager 7.8 の bin ディレクトリーに移動し、以下のプロパティーで新しい KIE Server を起動します。お使いの環境に応じて特定のプロパティーを調整してください。

$ ~/EAP_HOME/bin/standalone.sh --server-config=standalone-full.xml 1
-Dorg.kie.server.id=myserver 2
-Dorg.kie.server.user=kie_server_username 3
-Dorg.kie.server.pwd=kie_server_password 4
-Dorg.kie.server.controller=http://localhost:8080/decision-central/rest/controller 5
-Dorg.kie.server.controller.user=controller_username 6
-Dorg.kie.server.controller.pwd=controller_password 7
-Dorg.kie.server.location=http://localhost:8080/kie-server/services/rest/server 8
1
standalone-full.xml サーバープロファイルの開始コマンド
2
サーバー ID (Business Central で定義したサーバー設定名に一致させる必要がある)
3
Decision Manager コントローラー から KIE Server に接続するユーザー名
4
Decision Manager コントローラー から KIE Server に接続するパスワード
5
Decision Manager コントローラーの場所 (/rest/controller 接尾辞が付いた Business Central の URL)
6
Decision Manager コントローラー REST API に接続するユーザー名
7
Decision Manager コントローラー REST API に接続するパスワード
8
KIE Server の場所 (この例では Business Central と同じ場所)
注記

Business Central と KIE Server が別々のアプリケーションサーバーインスタンス (Red Hat JBoss EAP など) にインストールされている場合は、Business Central とポートが競合しないように、KIE Server の場所には別のポートを使用します。別の KIE Server ポートが設定されていない場合は、ポートオフセットを追加して、KIE Server プロパティーに従って KIE Server のポート値を調整します。

例:

-Djboss.socket.binding.port-offset=150
-Dorg.kie.server.location=http://localhost:8230/kie-server/services/rest/server

この例のように、Business Central ポートが 8080 で、オフセットを 150 に定義した場合には、KIE Server ポートは 8230 になります。

KIE Server は、新しい Business Central に接続し、デプロイするデプロイメントユニット (KIE コンテナー) の一覧を収集します。

注記

依存関係の JAR ファイルでクラスを使用して KIE Server クライアントから KIE Server にアクセスすると、Business Central では ConversionException および ForbiddenClassException が発生します。Business Central でこれらの例外を発生させないようにするには、次のいずれかを実行します。

  • クライアント側で例外が発生する場合には、kie-server クライアントに次のシステムプロパティーを追加します。
System.setProperty("org.kie.server.xstream.enabled.packages", "org.example.**");
  • サーバー側で例外が発生する場合には、Red Hat Decision Manager インストールディレクトリーから standalone-full.xml を開き、<system-properties> タグに以下のプロパティーを設定します。
<property name="org.kie.server.xstream.enabled.packages" value="org.example.**"/>
  • 以下の JVM プロパティーを設定します。
-Dorg.kie.server.xstream.enabled.packages=org.example.**

KJAR に存在するクラスは、これらのシステムプロパティーを使用して設定しないように想定されています。システムプロパティーでは既知のクラスのみを使用し、脆弱性を回避するようにしてください。

org.example はパッケージ例で、使用するパッケージを何でも定義できます。 org.example1.* * , org.example2.* * , org.example3.* * などのように、コンマ区切りで、複数のパッケージを指定できます。

org.example1.Mydata1, org.example2.Mydata2 など、特定のクラスも追加できます。

第5章 統合 Decision Manager コントローラー での KIE Server の設定

注記

本セクションの変更は、KIE Server を Business Central で管理し、Red Hat Decision Manager を ZIP ファイルからインストールしている場合にのみ、実行してください。Business Central をインストールしていない場合は、「6章ヘッドレス Decision Manager コントローラーのインストールおよび実行」の記載通りに、ヘッドレス Decision Manager コントローラーを使用して KIE Server を管理することができます。

KIE Server は、管理モードまたは非管理モードで動作できます。非管理モードの場合は、手動で KIE コンテナー (デプロイメントユニット) を作成および維持する必要があります。管理モードの場合は、Decision Manager コントローラーが KIE Server の設定を管理し、ユーザーはコントローラーと対話形式で KIE コンテナーを作成、維持します。

Decision Manager コントローラーは Business Central と統合されます。Business Central をインストールしている場合は、Business Central の Execution Server ページを使用して Decision Manager コントローラーと対話します。

ZIP ファイルから Red Hat Decision Manager をインストールした場合は、KIE Server および Business Central の両方のインストールの standalone-full.xml ファイルを編集して、統合 Decision Manager コントローラーで KIE Server を設定する必要があります。

前提条件

  • Business Central と KIE Server が Red Hat JBoss EAP インストールのベースディレクトリー (EAP_HOME) にインストールされている。

    注記

    実稼働環境では、Business Central と KIE Server は異なるサーバーにインストールすることが推奨されます。ただし、開発環境などで、KIE Server と Business Central を同じサーバーにインストールする場合は、本セクションの説明に従って、共有の standalone-full.xml ファイルを変更します。

  • Business Central サーバーノードに、rest-all ロールを持つユーザーが作成されている。

    手順

    1. Business Central の EAP_HOME/standalone/configuration/standalone-full.xml ファイルで、<system-properties> セクションの以下のプロパティーのコメントを解除し、<USERNAME> および <USER_PWD> を、kie-server ロールを持つユーザーの認証情報に置き換えます。

         <property name="org.kie.server.user" value="<USERNAME>"/>
         <property name="org.kie.server.pwd" value="<USER_PWD>"/>
    2. KIE Server の EAP_HOME/standalone/configuration/standalone-full.xml ファイルで、<system-properties> セクションの以下のプロパティーのコメントを解除します。

        <property name="org.kie.server.controller.user" value="<CONTROLLER_USER>"/>
        <property name="org.kie.server.controller.pwd" value="<CONTROLLER_PWD>"/>
        <property name="org.kie.server.id" value="<KIE_SERVER_ID>"/>
        <property name="org.kie.server.location" value="http://<HOST>:<PORT>/kie-server/services/rest/server"/>
        <property name="org.kie.server.controller" value="<CONTROLLER_URL>"/>
    3. 以下の値を置き換えてください。
  • <CONTROLLER_USER> および <CONTROLLER_PWD>rest-all ロールを持つユーザーの認証情報に置き換えます。
  • <KIE_SERVER_ID> を KIE Server システムの ID または名前に置き換えます (例: rhdm-7.8.0-kie-server-1)。
  • <HOST> を KIE Server ホストの ID または名前に置き換える (例: localhost または 192.7.8.9)。
  • <PORT> を KIE Server ホストのポートに置き換えます (例: 8080)。

    注記

    org.kie.server.location プロパティーで KIE Server の場所を指定します。

  • <CONTROLLER_URL> を Business Central の URL に置き換えます。KIE Server は、起動時にこの URL に接続します。

    • インストーラーまたは Red Hat JBoss EAP zip ファイルを使用して Business Central をインストールした場合、<CONTROLLER_URL> は以下のようになります。

      http://<HOST>:<PORT>/decision-central/rest/controller

    • standalone.jar ファイルを使用して Business Central を実行している場合、<CONTROLLER_URL> は以下のようになります。

      http://<HOST>:<PORT>/rest/controller

第6章 ヘッドレス Decision Manager コントローラーのインストールおよび実行

KIE Server は、管理モードまたは非管理モードで動作するように設定できます。非管理モードの場合は、手動で KIE コンテナー (デプロイメントユニット) を作成および維持する必要があります。管理モードの場合は、Decision Manager コントローラーが KIE Server の設定を管理し、ユーザーはコントローラーと対話形式で KIE コンテナーを作成して維持します。

Business Central には Decision Manager コントローラーが組み込まれています。Business Central をインストールしている場合は、Execution Server ページを使用して KIE コンテナーを作成および維持します。Business Central なしで KIE Server の管理を自動化するには、ヘッドレス Decision Manager コントローラーを使用します。

6.1. Decision Manager コントローラーを使った KIE Server のインストーラーによる設定

KIE Server は、Decision Manager コントローラーで管理することも、非管理モードにすることも可能です。非管理モードの場合は、手動で KIE コンテナー (デプロイメントユニット) を作成および維持する必要があります。管理モードの場合は、Decision Manager コントローラーが KIE Server の設定を管理し、ユーザーはコントローラーと対話形式で KIE コンテナーを作成、維持します。

Decision Manager コントローラーは Business Central と統合されます。Business Central をインストールしている場合は、Business Central の Execution Server ページを使用して Decision Manager コントローラーと対話します。

インストーラーは対話モードまたは CLI モードで使用し、Business Central と KIE Server をインストールして、Decision Manager コントローラーで KIE Server を設定します。

注記

Business Central をインストールしない場合は、「6章ヘッドレス Decision Manager コントローラーのインストールおよび実行」でヘッドレス Decision Manager の使用方法を参照してください。

前提条件

  • バックアップを作成済みの Red Hat JBoss EAP 7.3 サーバーインストールが設定された 2 台のコンピューターが利用できる。
  • インストールを完了するのに必要なユーザーパーミッションが付与されている。

手順

  1. 1 台目のコンピューターで、対話モードまたは CLI モードでインストーラーを実行します。詳細は、『Red Hat JBoss EAP 7.3 への Red Hat Decision Manager のインストールおよび設定』を参照してください。
  2. Component Selection ページで、KIE Server チェックボックスを外します。
  3. Business Central インストールを完了します。
  4. 2 台目のコンピューターで、対話モードまたは CLI モードでインストーラーを実行します。
  5. Component Selection ページで Business Central チェックボックスを外します。
  6. Configure Runtime Environment ページで Perform Advanced Configuration を選択します。
  7. Customize KIE Server properties を選択し、Next をクリックします。
  8. Business Central のコントローラー URL を入力し、KIE Server に追加のプロパティーを設定します。コントローラー URL は以下の形式を取ります。<HOST:PORT> は 2 台目のコンピューターの Business Central のアドレスに置き換えます。

    <HOST:PORT>/business-central/rest/controller
  9. インストールを完了します。
  10. Decision Manager コントローラーが Business Central と統合されていることを確認するには、Business Central の Execution Servers ページに移動して、設定した KIE Server が REMOTE SERVERS に表示されていることを確認します。

6.2. ヘッドレス Decision Manager コントローラーのインストール

ヘッドレス Decision Manager コントローラーをインストールし、REST API または KIE Server Java Client API を使用してコントローラーを操作することができます。

前提条件

  • バックアップを作成済みの Red Hat JBoss EAP システム (バージョン 7.3) が利用できる。Red Hat JBoss EAP システムのベースディレクトリーを EAP_HOME とします。
  • インストールを完了するのに必要なユーザーパーミッションが付与されている。

手順

  1. Red Hat カスタマーポータルの Software Downloads ページに移動し (ログインが必要)、ドロップダウンオプションから製品およびバージョンを選択します。

    • 製品: Decision Manager
    • バージョン: 7.8
  2. Red Hat Decision Manager 7.8.0 Add Ons (rhdm-7.8.0-add-ons.zip ファイル) をダウンロードします。
  3. rhdm-7.8.0-add-ons.zip ファイルを展開します。rhdm-7.8.0-controller-ee7.zip ファイルは展開したディレクトリーにあります。
  4. rhdm-7.8.0-controller-ee7 アーカイブを一時ディレクトリーに展開します。以下の例では、このディレクトリーを TEMP_DIR とします。
  5. TEMP_DIR/rhdm-7.8.0-controller-ee7/controller.war ディレクトリーを EAP_HOME/standalone/deployments/ にコピーします。

    警告

    コピーするヘッドレス Decision Manager コントローラーデプロイメントの名前が、Red Hat JBoss EAP インスタンスの既存デプロイメントと競合しないことを確認します。

  6. TEMP_DIR/rhdm-7.8.0-controller-ee7/SecurityPolicy/ ディレクトリーの内容を EAP_HOME/bin にコピーします。ファイルの上書きを確認されたら、Yes を選択します。
  7. EAP_HOME/standalone/deployments/ ディレクトリーに、controller.war.dodeploy という名前で空のファイルを作成します。このファイルにより、サーバーが起動するとヘッドレス Decision Manager コントローラーが自動的にデプロイされます。

6.2.1. ヘッドレス Decision Manager コントローラーの作成

ヘッドレス Decision Manager コントローラーを使用する前に、kie-server ロールを持つユーザーを作成する必要があります。

前提条件

  • ヘッドレス Decision Manager コントローラーが Red Hat JBoss EAP インストールのベースディレクトリー (EAP_HOME) にインストールされている。

手順

  1. ターミナルアプリケーションで EAP_HOME/bin ディレクトリーに移動します。
  2. 以下のコマンドを入力し、<USER_NAME> および <PASSWORD> を、作成するユーザー名およびパスワードに置き換えます。

    $ ./add-user.sh -a --user <username> --password <password> --role kie-server
    注記

    必ず、既存のユーザー、ロール、またはグループとは異なるユーザー名を指定してください。たとえば、admin という名前のユーザーは作成しないでください。

    パスワードは 8 文字以上で、数字と、英数字以外の文字をそれぞれ 1 文字以上使用する必要があります。ただし & の文字は使用できません。

  3. ユーザー名とパスワードを書き留めておきます。

6.2.2. KIE Server とヘッドレス Decision Manager コントローラー の設定

KIE Server をヘッドレス Decision Manager コントローラーで管理する場合は、本セクションの説明に従って KIE Server インストールの standalone-full.xml とヘッドレス Decision Manager コントローラーの standalone.xml ファイルを編集する必要があります。

前提条件

  • KIE Server が Red Hat JBoss EAP インストールのベースディレクトリー (EAP_HOME) にインストールされている。
  • ヘッドレス Decision Manager コントローラーが EAP_HOME にインストールされている。

    注記

    実稼働環境では KIE Server およびヘッドレス Decision Manager コントローラーを異なるサーバーにインストールすることを推奨します。ただし、開発環境のように KIE Server およびヘッドレス Decision Manager コントローラーを同じサーバーにインストールする場合は、併せて共有の standalone-full.xml ファイルを変更します。

  • KIE Server ノードに、kie-server ロールのあるユーザーが作成されている。
  • サーバーノードに、kie-server ロールのあるユーザーが作成されている。

    手順

    1. EAP_HOME/standalone/configuration/standalone-full.xml ファイルの <system-properties> セクションに以下のプロパティーを追加し、<USERNAME> および <USER_PWD> を、kie-server ロールを持つユーザーの認証情報に置き換えます。

         <property name="org.kie.server.user" value="<USERNAME>"/>
         <property name="org.kie.server.pwd" value="<USER_PWD>"/>
    2. KIE Server の EAP_HOME/standalone/configuration/standalone-full.xml ファイルの <system-properties> セクションに以下のプロパティーを追加します。

        <property name="org.kie.server.controller.user" value="<CONTROLLER_USER>"/>
        <property name="org.kie.server.controller.pwd" value="<CONTROLLER_PWD>"/>
        <property name="org.kie.server.id" value="<KIE_SERVER_ID>"/>
        <property name="org.kie.server.location" value="http://<HOST>:<PORT>/kie-server/services/rest/server"/>
        <property name="org.kie.server.controller" value="<CONTROLLER_URL>"/>
    3. このファイルで、以下の値を置き換えます。
  • <CONTROLLER_USER> および <CONTROLLER_PWD>kie-server ロールを持つユーザーの認証情報に置き換えます。
  • <KIE_SERVER_ID> を KIE Server システムの ID または名前に置き換えます (例: rhdm-7.8.0-kie-server-1)。
  • <HOST> を KIE Server ホストの ID または名前に置き換える (例: localhost または 192.7.8.9)。
  • <PORT> を KIE Server ホストのポートに置き換えます (例: 8080)。

    注記

    org.kie.server.location プロパティーで KIE Server の場所を指定します。

  • <CONTROLLER_URL> をヘッドレス Decision Manager コントローラー の URL で置き換えます。

    1. 起動中に KIE Server がこの URL に接続します。

6.3. ヘッドレス Decision Manager コントローラーの実行

ヘッドレス Decision Manager コントローラーを Red Hat JBoss EAP にインストールしたら、以下の手順に従ってヘッドレス Decision Manager コントローラーを実行します。

前提条件

  • ヘッドレス Decision Manager コントローラーが Red Hat JBoss EAP インストールのベースディレクトリー (EAP_HOME) にインストールおよび設定されている。

手順

  1. ターミナルアプリケーションで EAP_HOME/bin に移動します。
  2. ヘッドレス Decision Manager コントローラーを、KIE Server をインストールした Red Hat JBoss EAP インスタンスと同じ Red Hat JBoss EAP インスタンスにインストールしている場合は、以下のいずれかのコマンドを実行します。

    • Linux または UNIX ベースのシステムの場合:

      $ ./standalone.sh -c standalone-full.xml
    • Windows の場合:

      standalone.bat -c standalone-full.xml
  3. ヘッドレス Decision Manager コントローラーを、KIE Server をインストールした Red Hat JBoss EAP インスタンスとは別の Red Hat JBoss EAP インスタンスにインストールしている場合は、standalone.sh スクリプトで Decision Manager コントローラーを開始できます。

    注記

    この場合には、standalone.xml ファイルに必要な設定変更を加えます。

    • Linux または UNIX ベースのシステムの場合:

      $ ./standalone.sh
    • Windows の場合:

      standalone.bat
  4. ヘッドレス Decision Manager コントローラーが Red Hat JBoss EAP 上で動作していることを確認するには、以下のコマンドを入力します。<CONTROLLER><CONTROLLER_PWD> は、ユーザー名とパスワードの組み合わせに置き換えます。このコマンドを実行すると、KIE Server インスタンスに関する情報が出力されます。

    curl -X GET "http://<HOST>:<PORT>/controller/rest/controller/management/servers" -H  "accept: application/xml" -u '<CONTROLLER>:<CONTROLLER_PWD>'
注記

別の方法として、KIE Server Java API Client を使用してヘッドレス Decision Manager コントローラーにアクセスすることもできます。

6.4. ヘッドレス Decision Manager コントローラーを使用した KIE Server のクラスタリング

Decision Manager は、Business Central に組み込まれています。Business Central がインストールされていない場合は、ヘッドレス Decision Manager コントローラーをインストールし、REST API または KIE Server Java Client API を使用してコントローラーと対話します。

前提条件

  • バックアップを作成してある Red Hat JBoss EAP システム (バージョン 7.3 またはそれ以降) が利用できる。Red Hat JBoss EAP システムのベースディレクトリーは EAP_HOME とします。
  • インストールを完了するのに必要なユーザーパーミッションが付与されている。
  • Red Hat JBoss EAP クラスター環境への Red Hat Decision Manager のインストールおよび設定』に記載されているように、パーティションがマウントされた NFS サーバーを利用できる。

手順

  1. Red Hat カスタマーポータルの Software Downloads ページに移動し (ログインが必要)、ドロップダウンオプションから製品およびバージョンを選択します。

    • 製品: Decision Manager
    • バージョン: 7.8
  2. Red Hat Decision Manager 7.8.0 Add Ons (rhdm-7.8.0-add-ons.zip ファイル) をダウンロードします。
  3. rhdm-7.8.0-add-ons.zip ファイルを展開します。rhdm-7.8.0-controller-ee7.zip ファイルは展開したディレクトリーにあります。
  4. rhdm-7.8.0-controller-ee7 アーカイブを一時ディレクトリーに展開します。以下の例では、このディレクトリーを TEMP_DIR とします。
  5. TEMP_DIR/rhdm-7.8.0-controller-ee7/controller.war ディレクトリーを EAP_HOME/standalone/deployments/ にコピーします。

    警告

    コピーするヘッドレス Decision Manager コントローラーデプロイメントの名前が、Red Hat JBoss EAP インスタンスの既存デプロイメントと競合しないことを確認します。

  6. TEMP_DIR/rhdm-7.8.0-controller-ee7/SecurityPolicy/ ディレクトリーの内容を EAP_HOME/bin にコピーします。ファイルの上書きを確認されたら、Yes を選択します。
  7. EAP_HOME/standalone/deployments/ ディレクトリーに、controller.war.dodeploy という名前で空のファイルを作成します。このファイルにより、サーバーが起動するとヘッドレス Decision Manager コントローラーが自動的にデプロイされます。
  8. テキストエディターで EAP_HOME/standalone/configuration/standalone.xml ファイルを開きます。
  9. 以下のプロパティーを <system-properties> 要素に追加し、<NFS_STORAGE>を、テンプレート設定が保存されている NFS ストレージへの絶対パスに置き換えます。

    <system-properties>
      <property name="org.kie.server.controller.templatefile.watcher.enabled" value="true"/>
      <property name="org.kie.server.controller.templatefile" value="<NFS_STORAGE>"/>
    </system-properties>

    テンプレートファイルには、特定のデプロイメントシナリオのデフォルト設定が含まれます。

    org.kie.server.controller.templatefile.watcher.enabled プロパティーの値を true に設定すると、別のスレッドが開始してテンプレートファイルの修正を監視します。この確認の間隔はデフォルトで 30000 ミリ秒になり、org.kie.server.controller.templatefile.watcher.interval システムプロパティーで制御できます。このプロパティーの値を false に設定すると、テンプレートファイルへの変更の検出が、サーバーの再起動時に制限されます。

  10. ヘッドレス Decision Manager コントローラーを開始するには、EAP_HOME/bin に移動して、以下のコマンドを実行します。

    • Linux または UNIX ベースのシステムの場合:

      $ ./standalone.sh
    • Windows の場合:

      standalone.bat

Red Hat JBoss Enterprise Application Platform のクラスター環境で Red Hat Decision Manager を稼働する方法についての詳細は、『Red Hat JBoss EAP クラスター環境への Red Hat Decision Manager のインストールおよび設定』を参照してください。

第7章 Business Central に接続する KIE Server の設定

Red Hat Decision Manager 環境で KIE Server がすでに設定されていない場合や、Red Hat Decision Manager 環境に追加の KIE Server が必要な場合には、KIE Server が Business Central に接続するように設定する必要があります。

注記

Red Hat OpenShift Container Platform に KIE Server をデプロイする場合は、『Red Hat OpenShift Container Platform への Red Hat Decision Manager オーサリングまたは管理サーバー環境のデプロイ』で、Business Central に接続する設定手順を参照してください。

前提条件

手順

  1. Red Hat Decision Manager インストールディレクトリーで、standalone-full.xml ファイルに移動します。たとえば、Red Hat Decision Manager に Red Hat JBoss EAP インストールを使用する場合は $EAP_HOME/standalone/configuration/standalone-full.xml に移動します。
  2. standalone-full.xml を開き、<system-properties> タグの下に、以下のプロパティーを設定します。

    • org.kie.server.controller.user: Business Central にログインするユーザーのユーザー名。
    • org.kie.server.controller.pwd: Business Central にログインするユーザーのパスワード。
    • org.kie.server.controller: Business Central の API に接続する URL。通常、URL は http://<centralhost>:<centralport>/decision-central/rest/controller です。<centralhost><centralport> はそれぞれ Business Central のホスト名とポートになります。Business Central を OpenShift にデプロイしている場合は、URL から decision-central/ を削除します。
    • org.kie.server.location: KIE Server の API に接続する URL。通常、URL は http://<serverhost>:<serverport>/kie-server/services/rest/server (<serverhost> および <serverport> はそれぞれ KIE Server のホスト名およびポート) になります。
    • org.kie.server.id: サーバー設定の名前。このサーバー設定が Business Central に存在しない場合は、KIE Server が Business Central に接続する時に自動的に作成されます。

    例:

    <property name="org.kie.server.controller.user" value="central_user"/>
    <property name="org.kie.server.controller.pwd" value="central_password"/>
    <property name="org.kie.server.controller" value="http://central.example.com:8080/decision-central/rest/controller"/>
    <property name="org.kie.server.location" value="http://kieserver.example.com:8080/kie-server/services/rest/server"/>
    <property name="org.kie.server.id" value="production-servers"/>
  3. KIE Server を起動または再起動します。

第8章 KIE Server および Business Central での環境モードの設定

KIE Server は、production (実稼働) モードと development (開発) モードでの実行が設定可能です。開発モードでは、柔軟な開発ポリシーが提供され、小規模な変更の場合はアクティブなプロセスインスタンスを維持しながら、既存のデプロイメントユニット (KIE コンテナー) を更新できます。また、大規模な変更の場合には、アクティブなプロセスインスタンスを更新する前に、デプロイメントユニットの状態をリセットすることも可能です。実稼働モードは、各デプロイメントで新規デプロイメントユニットが作成される実稼働環境に最適です。

開発環境では、Business Central で Deploy をクリックすると、(該当する場合) 実行中のインスタンスを中止することなくビルドした KJAR ファイルを KIE Server にデプロイすることができます。または Redeploy をクリックして、ビルドした KJAR ファイルをデプロイして全インスタンスを置き換えることもできます。ビルドした KJAR ファイルを次回にデプロイまたは再デプロイすると、以前のデプロイメントユニット (KIE コンテナー) が同じターゲット KIE Server で自動的に更新されます。

実稼働環境では、Business Central の Redeploy オプションは無効になり、Deploy をクリックして、ビルドした KJAR ファイルを KIE Server 上の新規デプロイメントユニット (KIE コンテナー) にデプロイすることのみが可能です。

手順

  1. KIE Server 環境モードを設定するには、org.kie.server.mode システムプロパティーを org.kie.server.mode=development または org.kie.server.mode=production に設定します。
  2. Business Central のプロジェクトにデプロイメントの動作を設定するには、プロジェクトの SettingsGeneral SettingsVersion に移動して、Development Mode オプションを切り替えます。

    注記

    デフォルトでは、KIE Server と Business Central の新規プロジェクトはすべて、開発モードになっています。

    Development Mode がオンのプロジェクトや、実稼働モードの KIE Server に手動で SNAPSHOT バージョンの接尾辞を追加したプロジェクトをデプロイすることはできません。

第9章 Business Central で管理する KIE Server の設定

警告

このセクションでは、テスト目的で使用可能なサンプルの設定を紹介します。一部の値は、実稼働環境には適しておらず、その旨を記載しています。

以下の手順を使用して、KIE Server インスタンスを管理するように Business Central を設定します。

前提条件

  • 以下のロールを持つユーザーが存在している

    • Business Central: rest-all ロールを持つユーザー
    • KIE Server: kie-server ロールを持つユーザー
注記

実稼働環境では、異なるユーザーを 2 つ使用し、それぞれロールを 1 つ割り当ててください。このサンプルでは、rest-allkie-server の両ロールが割り当てられた controllerUser という名前のユーザー 1 つのみを使用します。

手順

  1. 以下の JVM プロパティーを設定します。

    Business Central と KIE Server の場所は異なる可能性があります。このような場合には、正しいサーバーインスタンスのプロパティーを設定するようにしてください。

    • Red Hat JBoss EAP で、以下のファイルの <system-properties> セクションを変更します。

      • スタンドアロンモードの場合: EAP_HOME/standalone/configuration/standalone*.xml
      • ドメインモードの場合: EAP_HOME/domain/configuration/domain.xml

    表9.1 管理対象 KIE Server インスタンスの JVM プロパティー

    プロパティー注記

    org.kie.server.id

    default-kie-server

    KIE Server ID

    org.kie.server.controller

    http://localhost:8080/decision-central/rest/controller

    Business Central の場所

    org.kie.server.controller.user

    controllerUser

    前のステップで説明した rest-all ロールを持つユーザーの名前

    org.kie.server.controller.pwd

    controllerUser1234;

    前のステップで説明したユーザーのパスワード

    org.kie.server.location

    http://localhost:8080/kie-server/services/rest/server

    KIE Server の場所

    表9.2 Business Central インスタンスの JVM プロパティー

    プロパティー注記

    org.kie.server.user

    controllerUser

    前のステップで説明した kie-server ロールを持つユーザーの名前

    org.kie.server.pwd

    controllerUser1234;

    前のステップで説明したユーザーのパスワード

  2. http://SERVER:PORT/kie-server/services/rest/server/ に GET 要求を送信して KIE Server が正常に起動したことを確認します。認証が終わると、以下のような XML 応答が返されます。

    <response type="SUCCESS" msg="Kie Server info">
        <kie-server-info>
            <capabilities>KieServer</capabilities>
            <capabilities>BRM</capabilities>
            <capabilities>BPM</capabilities>
            <capabilities>CaseMgmt</capabilities>
            <capabilities>BPM-UI</capabilities>
            <capabilities>BRP</capabilities>
            <capabilities>DMN</capabilities>
            <capabilities>Swagger</capabilities>
            <location>http://localhost:8230/kie-server/services/rest/server</location>
            <messages>
                <content>Server KieServerInfo{serverId='first-kie-server', version='7.5.1.Final-redhat-1', location='http://localhost:8230/kie-server/services/rest/server', capabilities=[KieServer, BRM, BPM, CaseMgmt, BPM-UI, BRP, DMN, Swagger]}started successfully at Mon Feb 05 15:44:35 AEST 2018</content>
                <severity>INFO</severity>
                <timestamp>2018-02-05T15:44:35.355+10:00</timestamp>
            </messages>
            <name>first-kie-server</name>
            <id>first-kie-server</id>
            <version>7.5.1.Final-redhat-1</version>
        </kie-server-info>
    </response>
  3. 登録が正常に完了したことを確認します。

    1. Business Central にログインします。
    2. MenuDeployExecution Servers の順にクリックします。

      正常に登録されている場合には、登録されたサーバーの ID が表示されます。

第10章 管理対象の KIE Server

管理対象インスタンスには、KIE Server を起動するために利用可能な Decision Manager コントローラーが必要です。

Decision Manager コントローラーは、KIE Server の設定を一元的に管理します。各 Decision Manager コントローラーは複数の設定を一度に管理でき、環境内に複数の Decision Manager コントローラーを配置することができます。管理対象 KIE Server に複数の Decision Manager コントローラーを設定できますが、一度に接続することができるのは 1 台だけです。

重要

どの Decision Manager コントローラーに接続されても同じ設定セットがサーバーに提供されるように、Decision Manager コントローラーはすべて同期する必要があります。

KIE Server に複数の Decision Manager コントローラーが設定されている場合には、KIE Server は、いずれかのコントローラーとの接続が正常に確立されるまで、起動時に各コントローラーに対して接続を試みます。接続を確立できない場合には、設定でローカルのストレージが利用可能な場合でも、サーバーは起動しません。こうすることで、整合性を保ち、冗長設定でサーバーが実行されるのを回避します。

注記

Decision Manager コントローラーに接続せずにスタンドアロンモードで KIE Server を実行する方法については、11章管理対象外の KIE Serverを参照してください。

第11章 管理対象外の KIE Server

管理対象外の KIE Server はスタンドアロンインスタンスであるため、KIE Server 自体から REST/JMS API を使用して個別に設定する必要があります。再起動時には、サーバーが自動的に設定をファイルに永続化し、そのファイルが内部のサーバーの状態として使用されます。

以下の操作を実行中に、設定が更新されます。

  • KIE コンテナーのデプロイ
  • KIE コンテナーのデプロイ解除
  • KIE コンテナーの起動
  • KIE コンテナーの停止
注記

KIE Server が再起動すると、シャットダウン前に永続化された状態を再度確立しようと試みます。そのため、実行していた KIE コンテナー (デプロイメントユニット) は起動しますが、停止していたコンテナーは起動しません。

第12章 デプロイメント記述子

プロセスとルールは Apache Maven ベースのパッケージに保存され、ナレッジアーカイブ、または KJAR と呼ばれます。ルール、プロセス、アセットおよびその他のプロジェクトアーティファクトは、Maven がビルドおよび管理する JAR ファイルの一部です。kmodule.xml と呼ばれる、KJAR の META-INF ディレクトリー内に保存されるファイルを使って、KIE ベースとセッションを定義できます。デフォルトでは、この kmodule.xml ファイルは空です。

KIE Server などのランタイムコンポーネントが KJAR を処理するタイミングで、kmodule.xml を検索して、ランタイム表記をビルドします。

デプロイメント記述子は kmodule.xml ファイルを補い、デプロイメントにおいてより詳細な制御を提供します。これらの記述子はオプションで、この記述子なしでもデプロイメントは正常に行われます。記述子を使用して、persistence、auditing、runtime strategy といったメタ値を含む技術属性を設定できます。

記述子を使用すると、(サーバーレベルのデフォルト、KJAR ごとに異なるデプロイメント記述子、その他のサーバー設定など) 複数レベルで KIE Server を設定できるようになります。記述子を使用して、デフォルトの KIE Server 設定にシンプルなカスタマイズが可能になります (KJAR ごとなど)。

記述子は kie-deployment-descriptor.xml と呼ばれるファイルで定義し、META-INF ディレクトリーの kmodule.xml ファイルの隣に置くことができます。このデフォルトの場所とファイル名は、システムパラメーターとして指定すると変更できます。

-Dorg.kie.deployment.desc.location=file:/path/to/file/company-deployment-descriptor.xml

12.1. デプロイメント記述子の設定

デプロイメント記述子を使用すると、ユーザーは以下の複数レベルで実行サーバーを設定することができるようになります。

  • サーバーレベル: メインのレベルで、サーバーにデプロイされているすべての KJAR に適用されます。
  • KJAR レベル: このレベルでは、KJAR ベースで記述子を設定できます。
  • デプロイ時レベル: KJAR のデプロイ時適用される記述子です。

デプロイメント記述子で指定されたより詳細な設定アイテムは、マージされるコレクションベースの設定アイテムを除いて、サーバーレベルのものよりも優先されます。優先順位は以下のようになります: デプロイ時設定 > KJAR 設定 > サーバー設定

注記

デプロイ時の設定は、REST API によるデプロイメントに適用されます。

たとえば、サーバーレベルで定義された (設定可能なアイテムの 1 つである) persistence mode が NONE で、同じモードが KJAR レベルでは JPA と指定されている場合、その KJAR の実際のモードは JPA になります。その KJAR についてデプロイメント記述子で persistence mode に何も指定されていない場合 (またはデプロイメント記述子がない場合) は、サーバーレベルの設定にフォールバックします。このケースでは、NONE (またはサーバーレベルのデプロイメント記述子がない場合は JPA) になります。

設定内容

デプロイメント記述子では、高度な技術的設定が可能です。以下の表では、設定可能な詳細と、それぞれの許容値とデフォルト値を掲載しています。

表12.1 デプロイメント記述子

設定XML エントリー許容値デフォルト値

ランタイムデータの永続ユニット名

persistence-unit

有効な永続パッケージ名

org.jbpm.domain

監査データの永続ユニット名

audit-persistence-unit

有効な永続パッケージ名

org.jbpm.domain

永続モード

persistence-mode

JPA, NONE

JPA

監査モード

audit-mode

JPA、JMS もしくは NONE

JPA

ランタイムストラテジー

runtime-strategy

SINGLETON、PER_REQUEST もしくは PER_PROCESS_INSTANCE

SINGLETON

登録するイベントリスナー一覧

event-listeners

ObjectModel のような有効なリスナークラス名

デフォルト値なし

登録するタスクイベントリスナー一覧

task-event-listeners

ObjectModel のような有効なリスナークラス名

デフォルト値なし

登録する作業アイテムハンドラー一覧

work-item-handlers

NamedObjectHandler のような有効な作業アイテムハンドラークラス

デフォルト値なし

登録するグローバル一覧

globals

NamedObjectModel のような有効なグローバル変数

デフォルト値なし

登録するマーシャリングストラテジー (プラグ可能変数永続)

marshalling-strategies

有効な ObjectModel クラス

デフォルト値なし

KJAR のリソースにアクセス可能となるために必要なロール

required-roles

文字列のロール名

デフォルト値なし

KIE セッションの追加の環境エントリー

environment-entries

有効な NamedObjectModel

デフォルト値なし

KIE セッションの追加の設定オプション

configurations

有効な NamedObjectModel

デフォルト値なし

リモートサービスのシリアル化に使用するクラス

remoteable-class

有効な CustomClass

デフォルト値なし

警告

実稼働環境では、EJB Timer スケジューラー (KIE Server のデフォルトのスケジューラー) を使用した Singleton ランタイムストラテジーを使用しないでください。この組み合わせを使用する場合は、負荷がかかると、Hibernate で問題が発生する可能性があります。具体的に他のストラテジーを使用する理由がない限り、プロセスインスタンス別のランタイムストラテジーの使用を推奨します。この制約に関する詳細は、「Hibernate issues with Singleton strategy and EJBTimerScheduler」を参照してください。

12.2. デプロイメント記述子の管理

デプロイメント記述子を設定するには、Business Central で MenuDesign$PROJECT_NAMESettingsDeployments と移動します。

プロジェクトが作成されるたびに、ストックの kie-deployment-descriptor.xml ファイルがデフォルト値で生成されます。

すべての KJAR で完全なデプロイメント記述子を提供する必要はありません。部分的なデプロイメント記述子の提供は可能で、かつ推奨されるものです。たとえば、異なる監査モードを使用する必要がある場合は、その KJAR のみにそれを指定し、残りの属性はサーバーレベルのデフォルト値で定義します。

OVERRIDE_ALL マージモードの使用時には、すべての設定アイテムを指定する必要があります。関連する KJAR は常に指定された設定を使用し、階層内の他のデプロイメント記述子とマージしないためです。

12.3. ランタイムエンジンへのアクセス制限

required-roles 設定アイテムは、デプロイメント記述子で編集できます。このプロパティーが定義するグループに所属するユーザーにのみ特定プロセスへのアクセスを付与することで、KJAR ごとまたはサーバーレベルごとにランタイムエンジンへのアクセスを制限します。

セキュリティーロールを使ってプロセス定義へのアクセスを制限したり、ランタイムでのアクセスを制限することができます。

リポジトリーの制限に基づいてこのプロパティーに必要なロールを追加するのがデフォルトの動作になります。必要な場合は、セキュリティーレルムで定義されている実際のロールに合致するロールを提供することで、このプロパティーを手動で変更できます。

手順

  1. プロジェクトのデプロイメント記述子設定を開くには、Business Central で MenuDesign$PROJECT_NAMESettingsDeployments と移動します。
  2. 設定一覧から、Required Roles をクリックし、次に Add Required Role をクリックします。
  3. Add Required Role ウィンドウで、このデプロイメントにアクセスをするためのパーミッションのロール名を入力し、Add をクリックします。
  4. 複数のロールを追加するには、このステップを繰り返します。
  5. すべてのロールを追加したら、Save をクリックします。

第13章 Red Hat Decision Manager の Prometheus メトリクスの監視

Prometheus は、オープンソースのシステム監視ツールキットで、Red Hat Decision Manager と連携して、ビジネスルール、プロセス、Decision Model and Notation (DMN) モデル、その他の Red Hat Decision Manager アセットの実行に関するメトリクスを収集して保存できます。KIE Server への REST API 呼び出しや、Prometheus expression browser、Grafana などのデータグラフツールを使用して、保存したメトリクスにアクセスできます。

オンプレミスの KIE Server、Spring Boot の KIE Server、Red Hat OpenShift Container Platform の KIE Server デプロイメントに、Prometheus メトリクス監視を設定できます。

KIE Server が Prometheus を使用して公開するメトリクスで、利用可能なものの一覧については、Red Hat カスタマーポータル から Red Hat Decision Manager 7.8.0 Source Distribution をダウンロードし、~/rhdm-7.8.0-sources/src/droolsjbpm-integration-$VERSION/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus に移動してください。

重要

Prometheus に対する Red Hat の サポートは、Red Hat 製品ドキュメントに記載の設定および構成の推奨事項に限定されます。

13.1. KIE Server のモニタリングを行う Prometheus メトリクスの設定

KIE Server インスタンスが Prometheus を使用し、Red Hat Decision Manager でのビジネスアセットアクティビティーに関連するメトリクスを収集して保存するように設定できます。KIE Server が Prometheus を使用して公開するメトリクスで、利用可能なものの一覧については、Red Hat カスタマーポータル から Red Hat Decision Manager 7.8.0 Source Distribution をダウンロードし、~/rhdm-7.8.0-sources/src/droolsjbpm-integration-$VERSION/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus に移動してください。

前提条件

  • KIE Server をインストールしている。
  • kie-server ユーザーロールで KIE Server にアクセスできる。
  • Prometheus がインストールされている。Prometheus のダウンロードおよび使用に関する情報は、Prometheus documentation page を参照してください。

手順

  1. KIE Server インスタンスで、org.kie.prometheus.server.ext.disabled システムプロパティーを false に設定して、Prometheus 拡張機能を有効にします。このプロパティーは、KIE Server の起動時、または Red Hat Decision Manager ディストリビューションの standalone.xml または standalone-full.xml ファイルで定義できます。
  2. Spring Boot で Red Hat Decision Manager を実行する場合には、application.properties システムプロパティーで必要なキーを設定します。

    Red Hat Decision Manager および Prometheus の Spring Boot application.properties キー

    kieserver.drools.enabled=true
    kieserver.dmn.enabled=true
    kieserver.prometheus.enabled=true

  3. Prometheus ディストリビューションの prometheus.yaml ファイルで、scrape_configs セクションに以下の設定を追加して、Prometheus が KIE Server からメトリクスを収集 (scrape) するように設定します。

    prometheus.yaml ファイルの Scrape 設定

    scrape_configs:
      - job_name: 'kie-server'
        metrics_path: /SERVER_PATH/services/rest/metrics
        basicAuth:
          username: USER_NAME
          password: PASSWORD
        static_configs:
          - targets: ["HOST:PORT"]

    Spring Boot の prometheus.yaml ファイルの Scrape 設定 (該当する場合)

    scrape_configs:
      - job_name: 'kie'
        metrics_path: /rest/metrics
        static_configs:
          - targets: ["HOST:PORT"]

    KIE Server の場所と設定に合わせて、値を置き換えます。

  4. KIE Server インスタンスを起動します。

    Red Hat JBoss EAP での Red Hat Decision Manager の起動コマンド例

    $ cd ~/EAP_HOME/bin
    $ ./standalone.sh --c standalone-full.xml

    構成済みの KIE Server インスタンスを起動すると、Prometheus はメトリクスの収集を開始し、KIE Server はメトリクスを REST API エンドポイント http://HOST:PORT/SERVER/services/rest/metrics (または Spring Boot では http://HOST:PORT/rest/metrics) に公開します。

  5. REST クライアントまたは curl ユーティリティーで、以下のコンポーネントを含む REST API 要求を送信し、KIE Server がメトリクスを公開していることを確認します。

    REST クライアントの場合:

    • Authentication: kie-server ロールを持つ KIE Server ユーザーのユーザー名とパスワードを入力します。
    • HTTP Headers: 以下のヘッダーを設定します。

      • Accept: application/json
    • HTTP method: GET に設定します。
    • URL: KIE Server REST API ベース URL とメトリクスエンドポイントを入力します。たとえば、http://localhost:8080/kie-server/services/rest/metrics (または Spring Boot では http://localhost:8080/rest/metrics) となります。

    curl ユーティリティーの場合:

    • -u: kie-server ロールを持つ KIE Server ユーザーのユーザー名とパスワードを入力します。
    • -H: 以下のヘッダーを設定します。

      • accept: application/json
    • -X: GET に設定します。
    • URL: KIE Server REST API ベース URL とメトリクスエンドポイントを入力します。たとえば、http://localhost:8080/kie-server/services/rest/metrics (または Spring Boot では http://localhost:8080/rest/metrics) となります。

    Red Hat JBoss EAP での Red Hat Decision Manager の curl コマンド例

    curl -u 'baAdmin:password@1' -X GET "http://localhost:8080/kie-server/services/rest/metrics"

    Spring Boot での Red Hat Decision Manager の起動コマンド例

    curl -u 'baAdmin:password@1' -X GET "http://localhost:8080/rest/metrics"

    サーバーの応答例

    # HELP kie_server_container_started_total Kie Server Started Containers
    # TYPE kie_server_container_started_total counter
    kie_server_container_started_total{container_id="task-assignment-kjar-1.0",} 1.0
    # HELP solvers_running Number of solvers currently running
    # TYPE solvers_running gauge
    solvers_running 0.0
    # HELP dmn_evaluate_decision_nanosecond DMN Evaluation Time
    # TYPE dmn_evaluate_decision_nanosecond histogram
    # HELP solver_duration_seconds Time in seconds it took solver to solve the constraint problem
    # TYPE solver_duration_seconds summary
    solver_duration_seconds_count{solver_id="100tasks-5employees.xml",} 1.0
    solver_duration_seconds_sum{solver_id="100tasks-5employees.xml",} 179.828255925
    solver_duration_seconds_count{solver_id="24tasks-8employees.xml",} 1.0
    solver_duration_seconds_sum{solver_id="24tasks-8employees.xml",} 179.995759653
    # HELP drl_match_fired_nanosecond Drools Firing Time
    # TYPE drl_match_fired_nanosecond histogram
    # HELP dmn_evaluate_failed_count DMN Evaluation Failed
    # TYPE dmn_evaluate_failed_count counter
    # HELP kie_server_start_time Kie Server Start Time
    # TYPE kie_server_start_time gauge
    kie_server_start_time{name="myapp-kieserver",server_id="myapp-kieserver",location="http://myapp-kieserver-demo-monitoring.127.0.0.1.nip.io:80/services/rest/server",version="7.4.0.redhat-20190428",} 1.557221271502E12
    # HELP kie_server_container_running_total Kie Server Running Containers
    # TYPE kie_server_container_running_total gauge
    kie_server_container_running_total{container_id="task-assignment-kjar-1.0",} 1.0
    # HELP solver_score_calculation_speed Number of moves per second for a particular solver solving the constraint problem
    # TYPE solver_score_calculation_speed summary
    solver_score_calculation_speed_count{solver_id="100tasks-5employees.xml",} 1.0
    solver_score_calculation_speed_sum{solver_id="100tasks-5employees.xml",} 6997.0
    solver_score_calculation_speed_count{solver_id="24tasks-8employees.xml",} 1.0
    solver_score_calculation_speed_sum{solver_id="24tasks-8employees.xml",} 19772.0

    KIE Server でメトリクスが利用できない場合には、このセクションで説明されている KIE Server および Prometheus の設定を確認します。

    また、http://HOST:PORT/graph の Prometheus expression browser で収集したメトリクスと対話したり、Prometheus データソースを Grafana などのデータグラフ作成ツールと統合したりすることもできます。

    図13.1 Prometheus expression browser と KIE Server メトリクス

    prometheus expression browser data

    図13.2 Prometheus expression browser と KIE Server ターゲット

    prometheus expression browser targets

    図13.3 Grafana ダッシュボードと DMN モデルの KIE Server メトリクス

    prometheus grafana data dmn

    図13.4 Grafana ダッシュボードとソルバーの KIE Server メトリクス

    prometheus grafana data optimizer

13.2. Red Hat OpenShift Container Platform の KIE Server の Prometheus メトリクスモニタリングの設定

Prometheus を使用して Red Hat Decision Manger でのビジネスアセットアクティビティーに関連するメトリクスを収集して保存するように、Red Hat OpenShift Container Platform で KIE Server デプロイメントを設定できます。KIE Server が Prometheus を使用して公開するメトリクスで、利用可能なものの一覧については、Red Hat カスタマーポータルから Red Hat Decision Manager 7.8.0 Source Distribution をダウンロードし、~/rhdm-7.8.0-sources/src/droolsjbpm-integration-$VERSION/kie-server-parent/kie-server-services/kie-server-services-prometheus/src/main/java/org/kie/server/services/prometheus に移動してください。

前提条件

  • KIE Server が、Red Hat OpenShift Container Platform にインストールおよびデプロイされている。OpenShift 上の KIE Server の詳細については、Red Hat Decision Manager 7.8 の製品ドキュメント で関連する OpenShift デプロイメントオプションを参照してください。
  • kie-server ユーザーロールで KIE Server にアクセスできる。
  • Prometheus Operator がインストールされている。Prometheus Operator のダウンロードと使用についての詳細は、GitHub の Prometheus Operator プロジェクトを参照してください。

手順

  1. OpenShift 上の KIE Server デプロイメントの DeploymentConfig オブジェクトで、PROMETHEUS_SERVER_EXT_DISABLED 環境変数を false に設定して、Prometheus 拡張機能を有効にします。この変数は、OpenShift Web コンソールを使用するか、コマンドターミナルで oc コマンドを使用して設定してください。

    oc set env dc/<dc_name> PROMETHEUS_SERVER_EXT_DISABLED=false -n <namespace>

    OpenShift に KIE Server をまだデプロイしていない場合には、OpenShift デプロイメントに使用予定の OpenShift テンプレートで (例: rhdm78-prod-immutable-kieserver.yaml)、PROMETHEUS_SERVER_EXT_DISABLED テンプレートパラメーターを false に設定して、Prometheus 拡張機能を有効にします。

    OpenShift Operator を使用して KIE Server を OpenShift にデプロイする場合には、KIE Server の設定で、PROMETHEUS_SERVER_EXT_DISABLED 環境変数を false に設定して、Prometheus 拡張機能を有効にします。

    apiVersion: app.kiegroup.org/v1
    kind: KieApp
    metadata:
      name: enable-prometheus
    spec:
      environment: rhpam-trial
      objects:
        servers:
        - env:
          - name: PROMETHEUS_SERVER_EXT_DISABLED
            value: "false"
  2. service-metrics.yaml ファイルを作成して、KIE Server から Prometheus にメトリクスを公開するサービスを追加します。

    apiVersion: v1
    kind: Service
    metadata:
      annotations:
        description: RHDM Prometheus metrics exposed
      labels:
        app: myapp-kieserver
        application: myapp-kieserver
        template: myapp-kieserver
        metrics: rhdm
      name: rhdm-app-metrics
    spec:
      ports:
        - name: web
          port: 8080
          protocol: TCP
          targetPort: 8080
      selector:
        deploymentConfig: myapp-kieserver
      sessionAffinity: None
      type: ClusterIP
  3. コマンドターミナルで、oc コマンドを使用して、service-metrics.yaml ファイルを OpenShift デプロイメントに適用します。

    oc apply -f service-metrics.yaml
  4. metrics-secret など、OpenShift シークレットを作成して、KIE Server の Prometheus メトリクスにアクセスします。シークレットには「username」と「password」要素と KIE Server ユーザー資格情報が含まれている必要があります。OpenShift シークレットの詳細については、『OpenShift 開発者ガイド』の「シークレット」の章を参照してください。
  5. ServiceMonitor オブジェクトを定義する service-monitor.yaml ファイルを作成します。サービスモニターにより Prometheus を KIE Server メトリクスサービスに接続できます。

    apiVersion: monitoring.coreos.com/v1
    kind: ServiceMonitor
    metadata:
      name: rhdm-service-monitor
      labels:
        team: frontend
    spec:
      selector:
        matchLabels:
          metrics: rhdm
      endpoints:
        - port: web
          path: /services/rest/metrics
          basicAuth:
            password:
              name: metrics-secret
              key: password
            username:
              name: metrics-secret
              key: username
  6. コマンドターミナルで、oc コマンドを使用して、service-monitor.yaml ファイルを OpenShift デプロイメントに適用します。

    oc apply -f service-monitor.yaml

    上記の設定を完了すると、Prometheus はメトリクスの収集を開始し、KIE Server は REST API エンドポイント http://HOST:PORT/kie-server/services/rest/metrics にメトリクスを公開します。

    http://HOST:PORT/graph の Prometheus expression browser で収集したメトリクスと対話したり、Prometheus データソースを Grafana などのデータグラフ作成ツールと統合したりすることができます。

    Prometheus expression browser の場所のホストとポートである http://HOST:PORT/graph は、Prometheus Operator をインストールしたときに Prometheus Web コンソールを公開したルートで定義されています。OpenShift ルートの詳細については、『OpenShift アーキテクチャー』ドキュメントの「ルート」の章を参照してください。

    図13.5 Prometheus expression browser と KIE Server メトリクス

    prometheus expression browser data

    図13.6 Prometheus expression browser と KIE Server ターゲット

    prometheus expression browser targets ocp

    図13.7 Grafana ダッシュボードと DMN モデルの KIE Server メトリクス

    prometheus grafana data dmn

    図13.8 Grafana ダッシュボードとソルバーの KIE Server メトリクス

    prometheus grafana data optimizer

13.3. カスタムのメトリクスを使用した KIE Server の Prometheus メトリクスモニタリングの拡張

KIE Server インスタンスが Prometheus メトリクスモニタリングを使用するように設定後に、ビジネス要件に合わせてカスタムのメトリクスを使用するように、KIE Server の Prometheus 機能を拡張できます。Prometheus は、KIE Server が Prometheus に公開するデフォルトのメトリクスと、カスタムのメトリクスを収集して、保存します。

たとえば、以下の手順では、Prometheus で収集して保存するように、カスタムの Decision Model and Notation (DMN) を定義します。

前提条件

手順

  1. 空の Maven プロジェクトを作成して、以下のパッケージタイプと依存関係を、プロジェクトの pom.xml ファイルの定義します。

    サンプルプロジェクトの pom.xml ファイルの例

    <packaging>jar</packaging>
    
    <properties>
      <version.org.kie>7.39.0.Final-redhat-00005</version.org.kie>
    </properties>
    
    <dependencies>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-common</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-drools</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-prometheus</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-dmn-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-dmn-core</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.jbpm</groupId>
        <artifactId>jbpm-services-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.jbpm</groupId>
        <artifactId>jbpm-executor</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.optaplanner</groupId>
        <artifactId>optaplanner-core</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>io.prometheus</groupId>
        <artifactId>simpleclient</artifactId>
        <version>0.5.0</version>
      </dependency>
    </dependencies>

  2. 以下の例にあるように、カスタムの Prometheus メトリクスを定義する、カスタムのリスナークラスの一部として、org.kie.server.services.prometheus.PrometheusMetricsProvider インターフェースを実装します。

    カスタムのリスナークラス内の DMNRuntimeEventListener リスナーの実装例

    package org.kie.server.ext.prometheus;
    
    import io.prometheus.client.Gauge;
    import org.kie.dmn.api.core.ast.DecisionNode;
    import org.kie.dmn.api.core.event.AfterEvaluateBKMEvent;
    import org.kie.dmn.api.core.event.AfterEvaluateContextEntryEvent;
    import org.kie.dmn.api.core.event.AfterEvaluateDecisionEvent;
    import org.kie.dmn.api.core.event.AfterEvaluateDecisionServiceEvent;
    import org.kie.dmn.api.core.event.AfterEvaluateDecisionTableEvent;
    import org.kie.dmn.api.core.event.BeforeEvaluateBKMEvent;
    import org.kie.dmn.api.core.event.BeforeEvaluateContextEntryEvent;
    import org.kie.dmn.api.core.event.BeforeEvaluateDecisionEvent;
    import org.kie.dmn.api.core.event.BeforeEvaluateDecisionServiceEvent;
    import org.kie.dmn.api.core.event.BeforeEvaluateDecisionTableEvent;
    import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
    import org.kie.server.api.model.ReleaseId;
    import org.kie.server.services.api.KieContainerInstance;
    
    public class ExampleCustomPrometheusMetricListener implements DMNRuntimeEventListener {
    
        private final KieContainerInstance kieContainer;
    
        private final Gauge randomGauge = Gauge.build()
                .name("random_gauge_nanosecond")
                .help("Random gauge as an example of custom KIE Prometheus metric")
                .labelNames("container_id", "group_id", "artifact_id", "version", "decision_namespace", "decision_name")
                .register();
    
        public ExampleCustomPrometheusMetricListener(KieContainerInstance containerInstance) {
            kieContainer = containerInstance;
        }
    
        public void beforeEvaluateDecision(BeforeEvaluateDecisionEvent e) {
        }
    
        public void afterEvaluateDecision(AfterEvaluateDecisionEvent e) {
            DecisionNode decisionNode = e.getDecision();
            ReleaseId releaseId = kieContainer.getResource().getReleaseId();
            randomGauge.labels(kieContainer.getContainerId(), releaseId.getGroupId(),
                               releaseId.getArtifactId(), releaseId.getVersion(),
                               decisionNode.getModelName(), decisionNode.getModelNamespace())
                    .set((int) (Math.random() * 100));
        }
    
        public void beforeEvaluateBKM(BeforeEvaluateBKMEvent event) {
        }
    
        public void afterEvaluateBKM(AfterEvaluateBKMEvent event) {
        }
    
        public void beforeEvaluateContextEntry(BeforeEvaluateContextEntryEvent event) {
        }
    
        public void afterEvaluateContextEntry(AfterEvaluateContextEntryEvent event) {
        }
    
        public void beforeEvaluateDecisionTable(BeforeEvaluateDecisionTableEvent event) {
        }
    
        public void afterEvaluateDecisionTable(AfterEvaluateDecisionTableEvent event) {
        }
    
        public void beforeEvaluateDecisionService(BeforeEvaluateDecisionServiceEvent event) {
        }
    
        public void afterEvaluateDecisionService(AfterEvaluateDecisionServiceEvent event) {
        }
    }

    PrometheusMetricsProvider インターフェースには、Prometheus メトリクス収集に必要なリスナーが含まれます。このインターフェースは、プロジェクトの pom.xml ファイルで宣言した kie-server-services-prometheus 依存関係に組み込まれます。

    以下の例では、ExampleCustomPrometheusMetricListener クラスは、(PrometheusMetricsProvider インターフェースからの) DMNRuntimeEventListener リスナーを実装し、Prometheus で収集、保存するカスタムの DMN メトリクスを定義します。

  3. 以下の例にあるように、PrometheusMetricsProvider インターフェースとカスタムのリスナーを関連付ける、カスタムのメトリクスプロバイダーの一部として PrometheusMetricsProvider インターフェースを実装します。

    カスタムメトリクスプロバイダークラスの PrometheusMetricsProvider インターフェースの実装例

    package org.kie.server.ext.prometheus;
    
    import org.jbpm.executor.AsynchronousJobListener;
    import org.jbpm.services.api.DeploymentEventListener;
    import org.kie.api.event.rule.AgendaEventListener;
    import org.kie.api.event.rule.DefaultAgendaEventListener;
    import org.kie.dmn.api.core.event.DMNRuntimeEventListener;
    import org.kie.server.services.api.KieContainerInstance;
    import org.kie.server.services.prometheus.PrometheusMetricsProvider;
    import org.optaplanner.core.impl.phase.event.PhaseLifecycleListener;
    import org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter;
    
    public class MyPrometheusMetricsProvider implements PrometheusMetricsProvider {
    
        public DMNRuntimeEventListener createDMNRuntimeEventListener(KieContainerInstance kContainer) {
            return new ExampleCustomPrometheusMetricListener(kContainer);
        }
    
        public AgendaEventListener createAgendaEventListener(String kieSessionId, KieContainerInstance kContainer) {
            return new DefaultAgendaEventListener();
        }
    
        public PhaseLifecycleListener createPhaseLifecycleListener(String solverId) {
            return new PhaseLifecycleListenerAdapter() {
            };
        }
    
        public AsynchronousJobListener createAsynchronousJobListener() {
            return null;
        }
    
        public DeploymentEventListener createDeploymentEventListener() {
            return null;
        }
    }

    以下の例では、MyPrometheusMetricsProvider クラスは PrometheusMetricsProvider インターフェースを実装し、このクラスには、カスタムの ExampleCustomPrometheusMetricListener リスナークラスが含まれます。

  4. 新規メトリクスプロバイダーを KIE Server で検出できるようにするには、Maven プロジェクトに META-INF/services/org.kie.server.services.prometheus.PrometheusMetricsProvider ファイルを作成して、このファイル内に PrometheusMetricsProvider 実装クラスの完全修飾クラス名を追加します。以下の例では、このファイルには org.kie.server.ext.prometheus.MyPrometheusMetricsProvider の 1 行が含まれます。
  5. プロジェクトを構築して、作成された JAR ファイルをプロジェクトの ~/kie-server.war/WEB-INF/lib ディレクトリーにコピーします。たとえば、Red Hat JBoss EAP ではこのディレクトリーへのパスは EAP_HOME/standalone/deployments/kie-server.war/WEB-INF/lib です。
  6. KIE Server を起動して、実行中の KIE Server に構築したプロジェクトをデプロイします。プロジェクトは、Business Central インターフェースまたは KIE Server REST API (http://SERVER:PORT/kie-server/services/rest/server/containers/{containerId} への PUT 要求) を使用してデプロイできます。

    実行中の KIE Server にプロジェクトをデプロイした後に、Prometheus はメトリクスの収集を開始し、KIE Server はメトリクスを REST API エンドポイント http://HOST:PORT/SERVER/services/rest/metrics (または Spring Boot では http://HOST:PORT/rest/metrics) に公開します。

第14章 OpenShift 接続タイムアウトの設定

デフォルトでは、OpenShift のルートは、HTTP 要求が 30 秒を超えると、タイムアウトするよう設定されています。これが原因で Business Central でセッションのタイムアウトの問題が発生して、以下の動作につながる可能性があります。

  • "Unable to complete your request. The following exception occurred: (TypeError) : Cannot read property 'indexOf' of null."
  • "Unable to complete your request. The following exception occurred: (TypeError) : b is null."
  • Business Central で Project または Server リンクをクリックすると、空白ページが表示される。

すべての Business Central テンプレートには拡張タイムアウト設定が含まれています。

Business Central OpenShift ルートのタイムアウトを長く設定するには、ターゲットルートに haproxy.router.openshift.io/timeout: 60s の注釈を追加します。

  - kind: Route
    apiVersion: v1
    id: "$APPLICATION_NAME-rhdmcentr-http"
    metadata:
      name: "$APPLICATION_NAME-rhdmcentr"
      labels:
        application: "$APPLICATION_NAME"
      annotations:
        description: Route for Business Central's http service.
        haproxy.router.openshift.io/timeout: 60s
    spec:
      host: "$DECISION_CENTRAL_HOSTNAME_HTTP"
      to:
        name: "$APPLICATION_NAME-rhdmcentr"

グローバルのルート固有のタイムアウトアノテーションについての完全一覧は、OpenShift ドキュメント を参照してください。

第15章 LDAP ログインドメインの定義

Red Hat Decision Manager が認証と承認に LDAP を使用するように設定するには、LDAP ログインドメインを定義します。これは、Git SSH 認証が別のセキュリティードメインを使用する可能性があるためです。

LDAP ログインドメインを定義するには、org.uberfire.domain システムプロパティーを使用します。たとえば、Red Hat JBoss Enterprise Application Platform 上でこのプロパティーを以下のように standalone.xml ファイルに追加します。

 <system-properties>
   <!-- other system properties -->
   <property name="org.uberfire.domain" value="LDAPAuth"/>
 </system-properties>

認証されたユーザーが、LDAP で適切なロール (adminanalystreviewer) に関連付けられているようにしてください。

第16章 RH-SSO を使用したサードパーティークライアントの認証

Business Central または KIE Server が提供するさまざまなリモートサービスを使用するには、curl、wget、Web ブラウザー、カスタムの REST クライアントなどのクライアントが、RH-SSO サーバー経由で認証を受け、要求を実行するために有効なトークンを取得する必要があります。リモートのサービスを使用するには、認証済みのユーザーに以下のロールを割り当てる必要があります。

  • rest-all Business Central リモートサービスを使用する場合
  • kie-server: KIE Server のリモートサービスを使用する場合

RH-SSO 管理コンソールを使用してこれらのロールを作成し、リモートサービスを使用するユーザーに割り当てます。

クライアントは、以下のオプションのいずれかを使用して RH-SSO 経由で認証できます。

  • クライアントでサポートされている場合は Basic 認証
  • トークンベースの認証

16.1. Basic 認証

Business Central および KIE Server の両方に対して RH-SSO クライアントアダプターの設定で Basic 認証を有効にした場合には、以下の例のようにトークンの付与/更新の呼び出しをせずにサービスを呼び出すことができます。

  • Web ベースのリモートリポジトリーエンドポイントの場合:

    curl http://admin:password@localhost:8080/decision-central/rest/repositories
  • KIE Server の場合

    curl http://admin:password@localhost:8080/kie-server/services/rest/server/

第17章 KIE Server のシステムプロパティー

KIE Server では、以下のシステムプロパティー (ブートストラップスイッチ) を使用してサーバーの動作を設定できます。

表17.1 KIE Server の拡張機能を無効にするシステムプロパティー

プロパティーデフォルト説明

org.drools.server.ext.disabled

truefalse

false

true に設定した場合には、(ルールのサポートなど) Business Rule Management (BRM) のサポートが無効になります。

org.optaplanner.server.ext.disabled

truefalse

false

true に設定した場合には、Red Hat Business Optimizer のサポートが無効になります。

org.kie.prometheus.server.ext.disabled

truefalse

true

true に設定した場合には、Prometheus Server 拡張が無効になります。

org.kie.scenariosimulation.server.ext.disabled

truefalse

true

true に設定した場合には、テストしアリオサーバー拡張が無効になります。

org.kie.dmn.server.ext.disabled

truefalse

false

true に設定した場合には、KIE Server DMN サポートが無効になります。

org.kie.swagger.server.ext.disabled

truefalse

false

true に設定した場合、KIE Server swagger のドキュメントサポートが無効になります。

注記

以下の表に記載した Decision Manager コントローラーのプロパティーの中で、必須と印がついているものがあります。Business Central で KIE Server を作成または削除する場合に、このプロパティーを設定してください。Business Central との対話なしに KIE Server を別個で使用する場合には、必須のプロパティーを設定する必要はありません。

表17.2 Decision Manager コントローラーに必要なシステムプロパティー

プロパティーデフォルト説明

org.kie.server.id

文字列

該当なし

サーバーに割り当てる任意の ID。ヘッドレス Decision Manager コントローラーが Business Central 外に設定されている場合には、この ID を使用して、サーバーはヘッドレス Decision Manager コントローラーと接続し、KIE コンテナー設定をフェッチします。指定されていない場合には、ID は自動で生成されます。

org.kie.server.user

文字列

kieserver

Decision Manager コントローラーから KIE Server への接続に使用するユーザー名。管理モードで実行する場合には必要です。Business Central システムプロパティーで、このプロパティーを設定します。Decision Manager コントローラーを使用する場合には、このプロパティーを設定します。

org.kie.server.pwd

文字列

kieserver1!

コントローラーから KIE Server への接続に使用するパスワード。管理モードで実行する場合には必要です。Business Central システムプロパティーでこのプロパティーを設定します。コントローラーを使用する場合には、このプロパティーを設定します。

org.kie.server.token

文字列

該当なし

このプロパティーにより、Decision Manager コントローラーと KIE Server 間の認証に、ユーザー名/パスワードを使用する Basic 認証ではなく、トークンベースの認証を使用できます。Decision Manager コントローラーは、要求ヘッダーのパラメーターとしてトークンを送信します。トークンは更新されないため、サーバーには有効期限の長いアクセストークンが必要です。

org.kie.server.location

URL

該当なし

Decision Manager コントローラーが KIE Server インスタンスをコールバックするのに使用する URL (例: http://localhost:8230/kie-server/services/rest/server)。Decision Manager コントローラーを使用する場合には、このプロパティーの設定が必須です。

org.kie.server.controller

コンマ区切りのリスト

該当なし

Decision Manager コントローラー REST エンドポイントへの URL のコンマ区切りリスト(例: http://localhost:8080/decision-central/rest/controller)。Decision Manager コントローラーを使用する場合には、このプロパティーの設定が必須です。

org.kie.server.controller.user

文字列

kieserver

Decision Manager コントローラー REST API に接続するためのユーザー名。Decision Manager コントローラーを使用する場合には、このプロパティーの設定が必須です。

org.kie.server.controller.pwd

文字列

kieserver1!

Decision Manager コントローラー REST API に接続するためのパスワード。Decision Manager コントローラーを使用する場合には、このプロパティーの設定が必須です。

org.kie.server.controller.token

文字列

該当なし

このプロパティーにより、Decision Manager コントローラーと KIE Server 間の認証に、ユーザー名/パスワードを使用する Basic 認証ではなく、トークンベースの認証を使用できます。このサーバーは、要求ヘッダーのパラメーターとしてトークンを送信します。トークンは更新されないため、サーバーには有効期限の長いアクセストークンが必要です。

org.kie.server.controller.connect

Long

10000

サーバーの起動時に KIE Server を Decision Manager コントローラーに接続することを試み、次に試みるまでの待機時間 (ミリ秒)。

表17.3 キーストアを読み込むためのシステムプロパティー

プロパティーデフォルト説明

kie.keystore.keyStoreURL

URL

該当なし

Java Cryptography Extension KeyStore (JCEKS) の読み込みに使用する URL (例: file:///home/kie/keystores/keystore.jceks)

kie.keystore.keyStorePwd

文字列

該当なし

JCEKS に使用するパスワード

kie.keystore.key.server.alias

文字列

該当なし

パスワードの保存先となる REST サービスのキーのエイリアス名

kie.keystore.key.server.pwd

文字列

該当なし

REST サービスのエイリアスのパスワード

kie.keystore.key.ctrl.alias

文字列

該当なし

デフォルトの REST Decision Manager コントローラー用のキーのエイリアス

kie.keystore.key.ctrl.pwd

文字列

該当なし

デフォルトの REST Decision Manager コントローラー用のエイリアスのパスワード

表17.4 その他のシステムプロパティー

プロパティーデフォルト説明

kie.maven.settings.custom

パス

該当なし

Maven 設定のカスタム settings.xml ファイルの場所。

kie.server.jms.queues.response

文字列

queue/KIE.SERVER.RESPONSE

JMS に対する応答キューの JNDI 名。

org.drools.server.filter.classes

truefalse

false

true に設定した場合、Drools KIE Server の拡張機能が受け入れるのは XmlRootElement または Remotable のアノテーションが付いたカスタムクラスのみです。

org.kie.server.domain

文字列

該当なし

JMS を使用する場合にユーザーの認証に使う JAAS LoginContext ドメイン。

org.kie.server.repo

パス

.

KIE Server の状態ファイルが保存される場所

org.kie.server.sync.deploy

truefalse

false

KIE Server に対して、Decision Manager コントローラーがコンテナーのデプロイメント設定を提供するまでデプロイメントを保持するように指示します。このプロパティーは、管理モードで実行するサーバーのみが対象です。以下のオプションが利用できます。

* false: Decision Manager コントローラーへの接続は非同期です。アプリケーションが起動して、Decision Manager コントローラーに接続し、成功すると、コンテナーをデプロイします。アプリケーションは、コンテナーが利用できるようになる前でも、要求を受け入れます。 * true: サーバーアプリケーションのデプロイメントは、Decision Manager コントローラーの接続スレッドと、メインのデプロイメントを結合し、完了するまで待機します。このオプションは、複数のアプリケーションが同じサーバー上にある場合には、デッドロックになる可能性があります。1 台のサーバーで使用するアプリケーションは 1 つだけにしてください。

org.kie.server.startup.strategy

ControllerBasedStartupStrategyLocalContainersStartupStrategy

ControllerBasedStartupStrategy

デプロイした KIE コンテナーの制御に使用する KIE Server の起動ストラテジーおよび、デプロイする順番

org.kie.server.mgmt.api.disabled

truefalse

false

true に設定した場合には、KIE Server 管理 API が無効になります。

org.kie.server.xstream.enabled.packages

org.kie.example などの Java パッケージ。org.kie.example.* のようにワイルドカード表現を指定することも可能です。

該当なし

XStream を使用してマーシャリングのホワイトリスト化を行うための追加パッケージを指定するプロパティー

org.kie.store.services.class

文字列

org.drools.persistence.jpa.KnowledgeStoreServiceImpl

KieSession インスタンスのブートストラップを行う KieStoreServices を実装する完全修飾クラス名

org.kie.server.strict.id.format

truefalse

false

JSON のマーシャリングを使用する際に、プロパティーが true に設定されている場合は、適切な JSON 形式で応答を常に返します。たとえば、元の応答に単一の数字のみが含まれる場合、応答は JSON 形式でラップされます (例: {"value" : 1})。

第18章 KIE Server の機能と拡張

KIE Server の機能は、ビジネスニーズに合わせて有効化、無効化、または拡張可能なプラグインにより決まります。KIE Server は以下の機能および拡張をサポートします。

表18.1 KIE Server の機能と拡張

機能名拡張名説明

KieServer

KieServer

サーバーインスタンスでの KIE コンテナーの作成や削除など、KIE Serverのコア機能を提供します。

BRM

Drools

ファクトの挿入やビジネスルールの実行など、ビジネスルール管理 (BRM) 機能を提供します。

BRP

OptaPlanner

ソルバーの実装など、ビジネスリソースプランニング (BRP) 機能を提供します。

DMN

DMN

DMN データ型の管理や DMN モデルの実行など、Decision Model and Notation (DMN) 機能を提供します。

Swagger

Swagger

KIE Server REST API と対話するための Swagger の Web インターフェース機能を提供します。

実行中の KIE Server インスタンスに対応する拡張を表示するには、以下の REST API エンドポイントに GET 要求を送信して、XML または JSON サーバーの要求を確認します。

KIE Server の情報に対する GET 要求のベース URL

http://SERVER:PORT/kie-server/services/rest/server

KIE Server の情報を含む JSON 応答の例

{
  "type": "SUCCESS",
  "msg": "Kie Server info",
  "result": {
    "kie-server-info": {
      "id": "test-kie-server",
      "version": "7.26.0.20190818-050814",
      "name": "test-kie-server",
      "location": "http://localhost:8080/kie-server/services/rest/server",
      "capabilities": [
        "KieServer",
        "BRM",
        "BRP",
        "DMN",
        "Swagger"
      ],
      "messages": [
        {
          "severity": "INFO",
          "timestamp": {
            "java.util.Date": 1566169865791
          },
          "content": [
            "Server KieServerInfo{serverId='test-kie-server', version='7.26.0.20190818-050814', name='test-kie-server', location='http:/localhost:8080/kie-server/services/rest/server', capabilities=[KieServer, BRM, BRP, DMN, Swagger]', messages=null', mode=DEVELOPMENT}started successfully at Sun Aug 18 23:11:05 UTC 2019"
          ]
        }
      ],
      "mode": "DEVELOPMENT"
    }
  }
}

KIE Server 拡張機能を有効または無効にするには、関連する KIE Server システムプロパティー (*.server.ext.disabled) を設定します。たとえば、BRM 機能を無効にするには、org.drools.server.ext.disabled=true システムプロパティーを設定します。全 KIE Server システムプロパティーについては、17章KIE Server のシステムプロパティー を参照してください。

デフォルトでは、KIE Server 拡張機能は REST または JMS データトランスポートで公開され、事前定義済みのクライアント API を使用します。追加の REST エンドポイントで既存の KIE Server 機能を拡張するか、REST または JMS 以外の対応のトランスポートメソッドを拡張するか、KIE Server クライアントの機能を拡張できます。

KIE Server 機能は柔軟であるため、デフォルトの KIE Server 機能にビジネスニーズを合わせるのではなく、KIE Serverインスタンスをビジネスニーズに適合できます。

重要

KIE Server 機能を拡張した場合には、Red Hat では、カスタムの実装や拡張の一部として使用したカスタムコードをサポートしません。

18.1. カスタム REST API エンドポイントを使用した既存の KIE Server 機能の拡張

KIE Server REST API を使用すると、Business Central のユーザーインターフェースなしに、Red Hat Decision Manager 内の KIE コンテナーとビジネスアセット (ビジネスルール、プロセスやソルバーなど) と対話できます。利用可能な REST エンドポイントは、KIE Server システムプロパティーで有効にした機能により決まります (例: BRM 機能は org.drools.server.ext.disabled=false)。既存の KIE Server 機能は、カスタムの REST API エンドポイントで拡張し、ビジネスニーズに合わせて KIE Server REST API を適合できます。

たとえば、この手順では、以下のカスタム REST API エンドポイントで Drools KIE Server 機能 (BRM 機能向け) を拡張します。

カスタム REST API エンドポイントの例

/server/containers/instances/{containerId}/ksession/{ksessionId}

このカスタムのエンドポイントの例では、デシジョンエンジンの作業メモリーに挿入するファクト一覧を受け入れ、自動的に全ルールを実行して、指定の KIE コンテナーで KIE セッションからのオブジェクトをすべて取得します。

手順

  1. 空の Maven プロジェクトを作成して、以下のパッケージタイプと依存関係を、プロジェクトの pom.xml ファイルの定義します。

    サンプルプロジェクトの pom.xml ファイルの例

    <packaging>jar</packaging>
    
    <properties>
      <version.org.kie>7.39.0.Final-redhat-00005</version.org.kie>
    </properties>
    
    <dependencies>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-internal</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-common</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-drools</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-rest-common</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
      </dependency>
    </dependencies>

  2. 以下の例のように、プロジェクトの Java クラスに org.kie.server.services.api.KieServerApplicationComponentsService インターフェースを実装します。

    KieServerApplicationComponentsService インターフェースの実装例

    public class CusomtDroolsKieServerApplicationComponentsService implements KieServerApplicationComponentsService {  1
    
        private static final String OWNER_EXTENSION = "Drools";  2
    
        public Collection<Object> getAppComponents(String extension, SupportedTransports type, Object... services) {  3
            // Do not accept calls from extensions other than the owner extension:
            if ( !OWNER_EXTENSION.equals(extension) ) {
                return Collections.emptyList();
            }
    
            RulesExecutionService rulesExecutionService = null;  4
            KieServerRegistry context = null;
    
            for( Object object : services ) {
                if( RulesExecutionService.class.isAssignableFrom(object.getClass()) ) {
                    rulesExecutionService = (RulesExecutionService) object;
                    continue;
                } else if( KieServerRegistry.class.isAssignableFrom(object.getClass()) ) {
                    context = (KieServerRegistry) object;
                    continue;
                }
            }
    
            List<Object> components = new ArrayList<Object>(1);
            if( SupportedTransports.REST.equals(type) ) {
                components.add(new CustomResource(rulesExecutionService, context));  5
            }
    
            return components;
        }
    
    }

    1
    アプリケーションの起動時にデプロイされる KIE Server インフラストラクチャーに REST エンドポイントを提供します。
    2
    この例の Drools 拡張など、拡張する機能を指定します。
    3
    REST コンテナーがデプロイする必要のある全リソースを返します。KIE Server インスタンスで有効化した各拡張で、getAppComponents メソッドを呼び出して、指定した OWNER_EXTENSION 以外の拡張の空のコレクションを、if ( !OWNER_EXTENSION.equals(extension) ) の呼び出しで返します。
    4
    この例の Drools 拡張の RulesExecutionServiceKieServerRegistry サービスなど、指定の拡張から使用するサービスを表示します。
    5
    components リストの一部としてリソースを返す CustomResource クラスと、拡張のトランスポートタイプを REST または JMS に指定します (この例では REST)。
  3. 以下の例のように、KIE Server を使用して新規の REST リソースの機能を追加する CustomResource クラスを実装します。

    CustomResource クラスの実装例

    // Custom base endpoint:
    @Path("server/containers/instances/{containerId}/ksession")
    public class CustomResource {
    
        private static final Logger logger = LoggerFactory.getLogger(CustomResource.class);
    
        private KieCommands commandsFactory = KieServices.Factory.get().getCommands();
    
        private RulesExecutionService rulesExecutionService;
        private KieServerRegistry registry;
    
        public CustomResource() {
    
        }
    
        public CustomResource(RulesExecutionService rulesExecutionService, KieServerRegistry registry) {
            this.rulesExecutionService = rulesExecutionService;
            this.registry = registry;
        }
    
        // Supported HTTP method, path parameters, and data formats:
        @POST
        @Path("/{ksessionId}")
        @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
        @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
        public Response insertFireReturn(@Context HttpHeaders headers,
                @PathParam("containerId") String id,
                @PathParam("ksessionId") String ksessionId,
                String cmdPayload) {
    
            Variant v = getVariant(headers);
            String contentType = getContentType(headers);
    
            // Marshalling behavior and supported actions:
            MarshallingFormat format = MarshallingFormat.fromType(contentType);
            if (format == null) {
                format = MarshallingFormat.valueOf(contentType);
            }
            try {
                KieContainerInstance kci = registry.getContainer(id);
    
                Marshaller marshaller = kci.getMarshaller(format);
    
                List<?> listOfFacts = marshaller.unmarshall(cmdPayload, List.class);
    
                List<Command<?>> commands = new ArrayList<Command<?>>();
                BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands, ksessionId);
    
                for (Object fact : listOfFacts) {
                    commands.add(commandsFactory.newInsert(fact, fact.toString()));
                }
                commands.add(commandsFactory.newFireAllRules());
                commands.add(commandsFactory.newGetObjects());
    
                ExecutionResults results = rulesExecutionService.call(kci, executionCommand);
    
                String result = marshaller.marshall(results);
    
    
                logger.debug("Returning OK response with content '{}'", result);
                return createResponse(result, v, Response.Status.OK);
            } catch (Exception e) {
                // If marshalling fails, return the `call-container` response to maintain backward compatibility:
                String response = "Execution failed with error : " + e.getMessage();
                logger.debug("Returning Failure response with content '{}'", response);
                return createResponse(response, v, Response.Status.INTERNAL_SERVER_ERROR);
            }
    
        }
    }

    この例では、カスタムエンドポイントの CustomResource クラスで、以下のデータと動作を指定します。

    • server/containers/instances/{containerId}/ksession のベースポイントを使用します。
    • POST HTTP メソッドを使用します。
    • REST 要求で以下のデータを指定する必要があります。

      • パスの引数として containerId
      • パスの引数として ksessionId
      • メッセージペイロードとしてファクトの一覧
    • 全 KIE Server データ形式をサポートします。

      • XML (JAXB、XStream)
      • JSON
    • List<?> コレクションにペイロードをアンマーシャリングして、リスト内のアイテムごとに、InsertCommand インスタンスを作成し、その後に FireAllRulesGetObject コマンドを追加します。
    • デシジョンエンジンを呼び出す BatchExecutionCommand インスタンスに全コマンドを追加します。
  4. 新規エンドポイントを KIE Server で検出できるようにするには、Maven プロジェクト内に META-INF/services/org.kie.server.services.api.KieServerApplicationComponentsService ファイルを作成して、このファイルに KieServerApplicationComponentsService 実装クラスの完全修飾名を追加します。たとえば、このファイルには、 org.kie.server.ext.drools.rest.CusomtDroolsKieServerApplicationComponentsService の 1 行が含まれます。
  5. プロジェクトを構築して、作成された JAR ファイルをプロジェクトの ~/kie-server.war/WEB-INF/lib ディレクトリーにコピーします。たとえば、Red Hat JBoss EAP ではこのディレクトリーへのパスは EAP_HOME/standalone/deployments/kie-server.war/WEB-INF/lib です。
  6. KIE Server を起動して、実行中の KIE Server に構築したプロジェクトをデプロイします。プロジェクトは、Business Central インターフェースまたは KIE Server REST API (http://SERVER:PORT/kie-server/services/rest/server/containers/{containerId} への PUT 要求) を使用してデプロイできます。

    実行中の KIE Server にプロジェクトを追加した後に、新しい REST エンドポイントとの対話を開始します。

    今回の例では、以下の情報を使用して新規エンドポイントを呼び出すことができます。

    • 要求 URL 例: http://localhost:8080/kie-server/services/rest/server/containers/instances/demo/ksession/defaultKieSession
    • HTTP メソッド: POST
    • HTTP ヘッダー:

      • Content-Type: application/json
      • Accept: application/json
    • メッセージペイロードの例:

      [
        {
          "org.jbpm.test.Person": {
            "name": "john",
            "age": 25
          }
        },
        {
          "org.jbpm.test.Person": {
            "name": "mary",
            "age": 22
          }
        }
      ]
    • サーバーの応答例: 200 (success)
    • サーバーのログ出力例:

      13:37:20,347 INFO  [stdout] (default task-24) Hello mary
      13:37:20,348 INFO  [stdout] (default task-24) Hello john

18.2. カスタムデータトランスポートを使用するための KIE Server の拡張

デフォルトでは、KIE Server の拡張が REST または JMS データトランスポートを使用して公開されます。KIE Server を拡張して、カスタムのデータトランスポートのサポートを追加し、KIE Server トランスポートプロトコルをビジネスニーズに適合します。

たとえば、以下の手順では、Drools 拡張を使用し、Apache MINA (オープンソースの Java ネットワークアプリケーションフレームワーク) をベースとする KIE Server にカスタムのデータトランスポートを追加します。カスタムの MINA トランスポートの例では、既存のマーシャリング操作に依存し、JSON 形式のみをサポートする文字列ベースのデータを変換します。

手順

  1. 空の Maven プロジェクトを作成して、以下のパッケージタイプと依存関係を、プロジェクトの pom.xml ファイルの定義します。

    サンプルプロジェクトの pom.xml ファイルの例

    <packaging>jar</packaging>
    
    <properties>
      <version.org.kie>7.39.0.Final-redhat-00005</version.org.kie>
    </properties>
    
    <dependencies>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie</groupId>
        <artifactId>kie-internal</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-api</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-common</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.kie.server</groupId>
        <artifactId>kie-server-services-drools</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-core</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.drools</groupId>
        <artifactId>drools-compiler</artifactId>
        <version>${version.org.kie}</version>
      </dependency>
      <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-api</artifactId>
        <version>1.7.25</version>
      </dependency>
      <dependency>
        <groupId>org.apache.mina</groupId>
        <artifactId>mina-core</artifactId>
        <version>2.1.3</version>
      </dependency>
    </dependencies>

  2. 以下の例のように、プロジェクトの Java クラスに org.kie.server.services.api.KieServerExtension インターフェースを実装します。

    KieServerExtension インターフェースの実装例

    public class MinaDroolsKieServerExtension implements KieServerExtension {
    
        private static final Logger logger = LoggerFactory.getLogger(MinaDroolsKieServerExtension.class);
    
        public static final String EXTENSION_NAME = "Drools-Mina";
    
        private static final Boolean disabled = Boolean.parseBoolean(System.getProperty("org.kie.server.drools-mina.ext.disabled", "false"));
        private static final String MINA_HOST = System.getProperty("org.kie.server.drools-mina.ext.port", "localhost");
        private static final int MINA_PORT = Integer.parseInt(System.getProperty("org.kie.server.drools-mina.ext.port", "9123"));
    
        // Taken from dependency on the `Drools` extension:
        private KieContainerCommandService batchCommandService;
    
        // Specific to MINA:
        private IoAcceptor acceptor;
    
        public boolean isActive() {
            return disabled == false;
        }
    
        public void init(KieServerImpl kieServer, KieServerRegistry registry) {
    
            KieServerExtension droolsExtension = registry.getServerExtension("Drools");
            if (droolsExtension == null) {
                logger.warn("No Drools extension available, quitting...");
                return;
            }
    
            List<Object> droolsServices = droolsExtension.getServices();
            for( Object object : droolsServices ) {
                // If the given service is null (not configured), continue to the next service:
                if (object == null) {
                    continue;
                }
                if( KieContainerCommandService.class.isAssignableFrom(object.getClass()) ) {
                    batchCommandService = (KieContainerCommandService) object;
                    continue;
                }
            }
            if (batchCommandService != null) {
                acceptor = new NioSocketAcceptor();
                acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
    
                acceptor.setHandler( new TextBasedIoHandlerAdapter(batchCommandService) );
                acceptor.getSessionConfig().setReadBufferSize( 2048 );
                acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
                try {
                    acceptor.bind( new InetSocketAddress(MINA_HOST, MINA_PORT) );
    
                    logger.info("{} -- Mina server started at {} and port {}", toString(), MINA_HOST, MINA_PORT);
                } catch (IOException e) {
                    logger.error("Unable to start Mina acceptor due to {}", e.getMessage(), e);
                }
    
            }
        }
    
        public void destroy(KieServerImpl kieServer, KieServerRegistry registry) {
            if (acceptor != null) {
                acceptor.dispose();
                acceptor = null;
            }
            logger.info("{} -- Mina server stopped", toString());
        }
    
        public void createContainer(String id, KieContainerInstance kieContainerInstance, Map<String, Object> parameters) {
            // Empty, already handled by the `Drools` extension
    
        }
    
        public void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map<String, Object> parameters) {
          // Empty, already handled by the `Drools` extension
    
        }
    
        public List<Object> getAppComponents(SupportedTransports type) {
            // Nothing for supported transports (REST or JMS)
            return Collections.emptyList();
        }
    
        public <T> T getAppComponents(Class<T> serviceType) {
    
            return null;
        }
    
        public String getImplementedCapability() {
            return "BRM-Mina";
        }
    
        public List<Object> getServices() {
            return Collections.emptyList();
        }
    
        public String getExtensionName() {
            return EXTENSION_NAME;
        }
    
        public Integer getStartOrder() {
            return 20;
        }
    
        @Override
        public String toString() {
            return EXTENSION_NAME + " KIE Server extension";
        }
    }

    KieServerExtension インターフェースは、新規の MINA トランスポートの機能を追加する時に KIE Server が使用する主要な拡張インターフェースです。このインターフェースには、以下のコンポーネントが含まれます。

    KieServerExtension インターフェースの概要

    public interface KieServerExtension {
    
        boolean isActive();
    
        void init(KieServerImpl kieServer, KieServerRegistry registry);
    
        void destroy(KieServerImpl kieServer, KieServerRegistry registry);
    
        void createContainer(String id, KieContainerInstance kieContainerInstance, Map<String, Object> parameters);
    
        void disposeContainer(String id, KieContainerInstance kieContainerInstance, Map<String, Object> parameters);
    
        List<Object> getAppComponents(SupportedTransports type);
    
        <T> T getAppComponents(Class<T> serviceType);
    
        String getImplementedCapability();  1
    
        List<Object> getServices();
    
        String getExtensionName();  2
    
        Integer getStartOrder();  3
    }

    1
    この拡張で対応している機能を指定します。この機能は、KIE Server 内で一意でなければなりません。
    2
    拡張は、人間が解読可能な名前に定義します。
    3
    指定した拡張の起動のタイミングを決定します。他の拡張と依存関係がある拡張の場合には、この設定は親の設定と競合しないようにしてください。たとえば、今回の場合は、このカスタムの拡張は Drools 拡張に依存しており、Drool 拡張の StartOrder0 に設定されているので、このカスタムのアドオン拡張は 0 を超える値でなければなりません (サンプルの実装では 20 に設定)。

    このインターフェースの先程の MinaDroolsKieServerExtension 実装例では、init メソッドが主に、Drools 拡張からサービスを収集して、MINA サーバーをブートストラップ化する要素となっています。KieServerExtension インターフェースの他のメソッドは、標準の実装のままで、インターフェースの要件を満たします。

    TextBasedIoHandlerAdapter クラスは、受信要求に対応する MINA サーバーにあるハンドラーです。

  3. 以下の例のように、MINA サーバーの TextBasedIoHandlerAdapter ハンドラーを実装します。

    TextBasedIoHandlerAdapter ハンドラーの実装例

    public class TextBasedIoHandlerAdapter extends IoHandlerAdapter {
    
        private static final Logger logger = LoggerFactory.getLogger(TextBasedIoHandlerAdapter.class);
    
        private KieContainerCommandService batchCommandService;
    
        public TextBasedIoHandlerAdapter(KieContainerCommandService batchCommandService) {
            this.batchCommandService = batchCommandService;
        }
    
        @Override
        public void messageReceived( IoSession session, Object message ) throws Exception {
            String completeMessage = message.toString();
            logger.debug("Received message '{}'", completeMessage);
            if( completeMessage.trim().equalsIgnoreCase("quit") || completeMessage.trim().equalsIgnoreCase("exit") ) {
                session.close(false);
                return;
            }
    
            String[] elements = completeMessage.split("\\|");
            logger.debug("Container id {}", elements[0]);
            try {
                ServiceResponse<String> result = batchCommandService.callContainer(elements[0], elements[1], MarshallingFormat.JSON, null);
    
                if (result.getType().equals(ServiceResponse.ResponseType.SUCCESS)) {
                    session.write(result.getResult());
                    logger.debug("Successful message written with content '{}'", result.getResult());
                } else {
                    session.write(result.getMsg());
                    logger.debug("Failure message written with content '{}'", result.getMsg());
                }
            } catch (Exception e) {
    
            }
        }
    }

    この例では、ハンドラークラスはテキストメッセージを受信して、Drools サービスでこのメッセージを実行します。

    TextBasedIoHandlerAdapter ハンドラー実装を使用する場合には、以下のハンドラー要件と動作を考慮してください。

    • 各受信トランスポート要求が 1 行であるため、ハンドラーに送信する内容は、1 行でなければなりません。
    • ハンドラーで containerID|payload の形式が想定されるように、この 1 行に KIE コンテナー ID を渡す必要があります。
    • マーシャラーで生成される方法で応答を設定できます。応答は複数行にすることができます。
    • このハンドラーは stream mode をサポートし、KIE Server セッションを切断せずにコマンドを送信できます。ストリームモードで KIE Server セッションを終了するには、サーバーに exit または quit コマンドを送信してください。
  4. 新規のデータトランスポートを KIE Server で検出できるようにするには、Maven プロジェクトで META-INF/services/org.kie.server.services.api.KieServerExtension ファイルを作成し、このファイルに KieServerExtension 実装クラスの完全修飾名を追加します。たとえば、このファイルには org.kie.server.ext.mina.MinaDroolsKieServerExtension の 1 行が含まれます。
  5. プロジェクトを構築して、作成された JAR ファイルと mina-core-2.0.9.jar ファイル (今回の例でこの拡張が依存) をプロジェクトの ~/kie-server.war/WEB-INF/lib ディレクトリーにコピーします。たとえば、Red Hat JBoss EAP ではこのディレクトリーへのパスは EAP_HOME/standalone/deployments/kie-server.war/WEB-INF/lib です。
  6. KIE Server を起動して、実行中の KIE Server に構築したプロジェクトをデプロイします。プロジェクトは、Business Central インターフェースまたは KIE Server REST API (http://SERVER:PORT/kie-server/services/rest/server/containers/{containerId} への PUT 要求) を使用してデプロイできます。

    プロジェクトを実行中の KIE Server にデプロイした後に、KIE Server ログで新規データトランスポートのステータスを表示して、新規データトランスポートの使用を開始できます。

    サーバーログの新規データトランスポート

    Drools-Mina KIE Server extension -- Mina server started at localhost and port 9123
    Drools-Mina KIE Server extension has been successfully registered as server extension

    この例では、Telnet を使用して KIE Server の 新しい MINA ベースのデータトランスポートと対話できます。

    コマンドターミナルでの Telnet の開始およびポート 9123 での KIE Server の接続

    telnet 127.0.0.1 9123

    コマンドターミナルでの KIE Server との対話例

    Trying 127.0.0.1...
    Connected to localhost.
    Escape character is '^]'.
    
    # Request body:
    demo|{"lookup":"defaultKieSession","commands":[{"insert":{"object":{"org.jbpm.test.Person":{"name":"john","age":25}}}},{"fire-all-rules":""}]}
    
    # Server response:
    {
      "results" : [ {
        "key" : "",
        "value" : 1
      } ],
      "facts" : [ ]
    }
    
    demo|{"lookup":"defaultKieSession","commands":[{"insert":{"object":{"org.jbpm.test.Person":{"name":"mary","age":22}}}},{"fire-all-rules":""}]}
    {
      "results" : [ {
        "key" : "",
        "value" : 1
      } ],
      "facts" : [ ]
    }
    
    demo|{"lookup":"defaultKieSession","commands":[{"insert":{"object":{"org.jbpm.test.Person":{"name":"james","age":25}}}},{"fire-all-rules":""}]}
    {
      "results" : [ {
        "key" : "",
        "value" : 1
      } ],
      "facts" : [ ]
    }
    exit
    Connection closed by foreign host.

    サーバーログの出力例

    16:33:40,206 INFO  [stdout] (NioProcessor-2) Hello john
    16:34:03,877 INFO  [stdout] (NioProcessor-2) Hello mary
    16:34:19,800 INFO  [stdout] (NioProcessor-2) Hello james

18.3. カスタムクライアント API を使用した KIE Server のクライアント拡張

KIE Server は、KIE Server サービスの使用時に対話可能な、事前定義済みのクライアント API を使用します。カスタムのクライアント API で KIE Server クライアントを拡張して、ビジネスのニーズに KIE Server サービスを適合させます。

たとえば、以下の手順では、カスタムのクライアント API を KIE Server に追加して、Apache MINA (オープンソースの Java ネットワークアプリケーションフレームワーク) をもとにした、カスタムのデータトランスポートに対応します (このシナリオ向けにすでに設定済み)。

手順

  1. 空の Maven プロジェクトを作成して、以下のパッケージタイプと依存関係を、プロジェクトの pom.xml ファイルの定義します。

    サンプルプロジェクトの pom.xml ファイルの例

    <packaging>jar</packaging>
    
    <properties>
       <version.org.kie>7.39.0.Final-redhat-00005</version.org.kie>
     </properties>
    
     <dependencies>
       <dependency>
         <groupId>org.kie.server</groupId>
         <artifactId>kie-server-api</artifactId>
         <version>${version.org.kie}</version>
       </dependency>
       <dependency>
          <groupId>org.kie.server</groupId>
          <artifactId>kie-server-client</artifactId>
          <version>${version.org.kie}</version>
        </dependency>
       <dependency>
         <groupId>org.drools</groupId>
         <artifactId>drools-compiler</artifactId>
         <version>${version.org.kie}</version>
       </dependency>
     </dependencies>

  2. 以下の例のように、プロジェクトの Java クラスに、適切な ServicesClient インターフェースを実装します。

    RulesMinaServicesClient インターフェースの例

    public interface RulesMinaServicesClient extends RuleServicesClient {
    
    }

    インターフェースをもとにクライアントの実装を登録する必要があるので、特定のインターフェースが必要です。また、指定のインターフェースには実装は 1 つしか指定できません。

    この例では、カスタムの MINA ベースのデータトランスポートが Drools 拡張を使用し、この RulesMinaServicesClient インターフェースの例は、Drools 拡張から、既存の RuleServicesClient クライアント API を拡張します。

  3. 以下の例のように、新規の MINA トランスポートのクライアント機能を追加するのに KIE Server が使用可能な RulesMinaServicesClient インターフェースを実装します。

    RulesMinaServicesClient インターフェースの実装例

    public class RulesMinaServicesClientImpl implements RulesMinaServicesClient {
    
        private String host;
        private Integer port;
    
        private Marshaller marshaller;
    
        public RulesMinaServicesClientImpl(KieServicesConfiguration configuration, ClassLoader classloader) {
            String[] serverDetails = configuration.getServerUrl().split(":");
    
            this.host = serverDetails[0];
            this.port = Integer.parseInt(serverDetails[1]);
    
            this.marshaller = MarshallerFactory.getMarshaller(configuration.getExtraJaxbClasses(), MarshallingFormat.JSON, classloader);
        }
    
        public ServiceResponse<String> executeCommands(String id, String payload) {
    
            try {
                String response = sendReceive(id, payload);
                if (response.startsWith("{")) {
                    return new ServiceResponse<String>(ResponseType.SUCCESS, null, response);
                } else {
                    return new ServiceResponse<String>(ResponseType.FAILURE, response);
                }
            } catch (Exception e) {
                throw new KieServicesException("Unable to send request to KIE Server", e);
            }
        }
    
        public ServiceResponse<String> executeCommands(String id, Command<?> cmd) {
            try {
                String response = sendReceive(id, marshaller.marshall(cmd));
                if (response.startsWith("{")) {
                    return new ServiceResponse<String>(ResponseType.SUCCESS, null, response);
                } else {
                    return new ServiceResponse<String>(ResponseType.FAILURE, response);
                }
            } catch (Exception e) {
                throw new KieServicesException("Unable to send request to KIE Server", e);
            }
        }
    
        protected String sendReceive(String containerId, String content) throws Exception {
    
            // Flatten the content to be single line:
            content = content.replaceAll("\\n", "");
    
            Socket minaSocket = null;
            PrintWriter out = null;
            BufferedReader in = null;
    
            StringBuffer data = new StringBuffer();
            try {
                minaSocket = new Socket(host, port);
                out = new PrintWriter(minaSocket.getOutputStream(), true);
                in = new BufferedReader(new InputStreamReader(minaSocket.getInputStream()));
    
                // Prepare and send data:
                out.println(containerId + "|" + content);
                // Wait for the first line:
                data.append(in.readLine());
                // Continue as long as data is available:
                while (in.ready()) {
                    data.append(in.readLine());
                }
    
                return data.toString();
            } finally {
                out.close();
                in.close();
                minaSocket.close();
            }
        }
    }

    この実装例は、以下のデータおよび動作を指定します。

    • ソケットベースの通信を使用して簡素化します。
    • KIE Server クライアントのデフォルト設定に依存し、ServerUrl を使用して MINA サーバーのホストとポートを提供します。
    • マーシャリング形式で JSON を指定します。
    • 受信メッセージは左波括弧 { で始まる JSON オブジェクトでなければなりません。
    • 応答の最初の行を待機中に、ブロッキング API と直接、ソケット通信を使用してから、利用可能な行すべてを読み取ります。
    • ストリームモード を使用しないので、コマンドの呼び出し後に KIE Server セッションを切断します。
  4. 以下の例のように、プロジェクトの Java クラスに org.kie.server.client.helper.KieServicesClientBuilder インターフェースを実装します。

    KieServicesClientBuilder インターフェースの実装例

    public class MinaClientBuilderImpl implements KieServicesClientBuilder {  1
    
        public String getImplementedCapability() {  2
            return "BRM-Mina";
        }
    
        public Map<Class<?>, Object> build(KieServicesConfiguration configuration, ClassLoader classLoader) {  3
            Map<Class<?>, Object> services = new HashMap<Class<?>, Object>();
    
            services.put(RulesMinaServicesClient.class, new RulesMinaServicesClientImpl(configuration, classLoader));
    
            return services;
        }
    
    }

    1
    一般の KIE Server クライアントインフラストラクチャーにクライアント API を追加できます。
    2
    クライアントが使用する KIE Server 機能 (拡張) を定義します。
    3
    クライアントの実装のマッピングを提供します。キーはインターフェース、値は完全な初期実装です。
  5. 新規のクライアント API を KIE Server クライアントで検出できるようにするには、Maven プロジェクトで META-INF/services/org.kie.server.client.helper.KieServicesClientBuilder ファイルを作成し、このファイルに KieServicesClientBuilder 実装クラスの完全修飾名を追加します。たとえば、このファイルには org.kie.server.ext.mina.client.MinaClientBuilderImpl の 1 行が含まれます。
  6. プロジェクトを構築して、作成された JAR ファイルをプロジェクトの ~/kie-server.war/WEB-INF/lib ディレクトリーにコピーします。たとえば、Red Hat JBoss EAP ではこのディレクトリーへのパスは EAP_HOME/standalone/deployments/kie-server.war/WEB-INF/lib です。
  7. KIE Server を起動して、実行中の KIE Server に構築したプロジェクトをデプロイします。プロジェクトは、Business Central インターフェースまたは KIE Server REST API (http://SERVER:PORT/kie-server/services/rest/server/containers/{containerId} への PUT 要求) を使用してデプロイできます。

    実行中の KIE Server にプロジェクトをデプロイしたあとに、新規の KIE Server クライアントと対話を開始できます。標準の KIE Server クライアントと同じ方法で、クライアント設定とクライアントインスタンスを作成して、タイプ別にサービスクライアントを取得し、クライアントメソッドを呼び出して、新しいクライアントを使用します。

    たとえば、RulesMinaServiceClient クライアントインスタンスを作成して、MINA トランスポートを使用して KIE Server で操作を呼び出すことができます。

    RulesMinaServiceClient クライアントの実装例

    protected RulesMinaServicesClient buildClient() {
        KieServicesConfiguration configuration = KieServicesFactory.newRestConfiguration("localhost:9123", null, null);
        List<String> capabilities = new ArrayList<String>();
        // Explicitly add capabilities (the MINA client does not respond to `get-server-info` requests):
        capabilities.add("BRM-Mina");
    
        configuration.setCapabilities(capabilities);
        configuration.setMarshallingFormat(MarshallingFormat.JSON);
    
        configuration.addJaxbClasses(extraClasses);
    
        KieServicesClient kieServicesClient =  KieServicesFactory.newKieServicesClient(configuration);
    
        RulesMinaServicesClient rulesClient = kieServicesClient.getServicesClient(RulesMinaServicesClient.class);
    
        return rulesClient;
    }

    MINA トランスポートを使用して KIE Server 上で操作を呼び出す設定例

    RulesMinaServicesClient rulesClient = buildClient();
    
    List<Command<?>> commands = new ArrayList<Command<?>>();
    BatchExecutionCommand executionCommand = commandsFactory.newBatchExecution(commands, "defaultKieSession");
    
    Person person = new Person();
    person.setName("mary");
    commands.add(commandsFactory.newInsert(person, "person"));
    commands.add(commandsFactory.newFireAllRules("fired"));
    
    ServiceResponse<String> response = rulesClient.executeCommands(containerId, executionCommand);
    Assert.assertNotNull(response);
    
    Assert.assertEquals(ResponseType.SUCCESS, response.getType());
    
    String data = response.getResult();
    
    Marshaller marshaller = MarshallerFactory.getMarshaller(extraClasses, MarshallingFormat.JSON, this.getClass().getClassLoader());
    
    ExecutionResultImpl results = marshaller.unmarshall(data, ExecutionResultImpl.class);
    Assert.assertNotNull(results);
    
    Object personResult = results.getValue("person");
    Assert.assertTrue(personResult instanceof Person);
    
    Assert.assertEquals("mary", ((Person) personResult).getName());
    Assert.assertEquals("JBoss Community", ((Person) personResult).getAddress());
    Assert.assertEquals(true, ((Person) personResult).isRegistered());

第19章 KIE Server の使用時のパフォーマンスチューニングに関する考慮点

以下の主要な概念または推奨のプラクティスを使用すると、KIE Server のパフォーマンスの最適化に役立ちます。本セクションではこの概念についてまとめており、随時、他のドキュメントを相互参照して詳細を説明します。本セクションは、Red Hat Decision Manager の新しいリリースで、必要に応じて拡張または変更されます。

開発時には必ず開発モードを有効にすること

KIE Server または特定のプロジェクトを Business Central に設定して、production モードまたは development モードを使用できます。デフォルトでは、Business Central の KIE Server および新規プロジェクトはすべて開発モードです。このモードには、プロジェクトの開発ポリシーに柔軟性をもたせるなど、開発が容易にすすむ機能や、重複した GAV の検出を無効化するなど、開発中の KIE Server のパフォーマンスを最適化する機能が含まれます。Red Hat Decision Manager 環境が確立し、実稼働モードを実行できる準備が完全に整うまで、開発モードを使用してください。

環境モードの設定または重複する GAV の検出についての詳細は、以下の資料を参照してください。

KIE Server 機能と拡張を特定のニーズに適合すること

KIE Server の機能は、ビジネスニーズに合わせて有効化、無効化、または拡張可能なプラグインにより決まります。デフォルトでは、KIE Server 拡張機能は REST または JMS データトランスポートで公開され、事前定義済みのクライアント API を使用します。追加の REST エンドポイントで既存の KIE Server 機能を拡張するか、REST または JMS 以外の対応するトランスポートメソッドを拡張するか、KIE Server クライアントの機能を拡張できます。

KIE Server 機能は柔軟であるため、デフォルトの KIE Server 機能にビジネスニーズを合わせるのではなく、KIE Serverインスタンスをビジネスニーズに適合できます。

KIE Server の機能の有効化、無効化、または拡張に関する詳細は、18章KIE Server の機能と拡張 を参照してください。

第20章 関連資料

付録A バージョン情報

本書の最終更新日: 2020 年 9 月 8 日 (木)

法律上の通知

Copyright © 2020 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, the Red Hat 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 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.