第5章 DMN を使用した Red Hat build of Kogito マイクロサービスのアプリケーションロジックの設計
プロジェクトを作成したら、プロジェクトの src/main/resources ディレクトリーに、Decision Model and Notation (DMN) デシジョンモデルと Drools Rule Language (DRL) ビジネスルールを作成またはインポートできます。また、Java サービスとして動作するプロジェクトの src/main/java ディレクトリーに Java クラスを含めるか、デシジョンから呼び出す実装を指定することもできます。
この手順の例では、基本的な Red Hat build of Kogito マイクロサービスが REST エンドポイント /persons を提供します。このエンドポイントは、PersonDecisions.dmn DMN モデルのサンプルをもとに自動生成され、処理されたデータをベースに意思決定を行います。
ビジネスデシジョンには、Red Hat Process Automation Manager サービスのデシジョンロジックが含まれます。DMN モデルや DRL ルールなど、ビジネスルールやデシジョンをさまざまな方法で定義できます。この手順の例では、DMN モデルを使用します。
前提条件
- プロジェクトを作成している。Maven プロジェクトの作成方法は 3章Red Hat build of Kogito マイクロサービスの Maven プロジェクトの作成 を参照してください。
手順
Red Hat Process Automation Manager サービス用に生成した Maven プロジェクトで
src/main/java/org/acmeフォルダーに移動し、以下のPerson.javaファイルを追加します。person Java オブジェクトの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この例では、Java オブジェクトの名前、年齢、成人ステータスを設定して取得します。
src/main/resourcesフォルダーに移動し、以下のPersonDecisions.dmnDMN デシジョンモデルを追加します。図5.1
PersonDecisionsの DMN 意思決定要件ダイアグラム (DRD) 例
図5.2
isAdultデシジョンの DMN ボックス式の例
図5.3 DMN データ型の例
この DMN モデルは、基本的な DMN 入力ノードと、カスタムの構造化データ型で DMN デシジョンテーブルが定義したデシジョンノードで構成されます。
VS Code では、Red Hat Business Automation Bundle VS Code 拡張機能を追加して、DMN モデラーで意思決定要件ダイアグラム (DRD)、ボックス式、およびデータタイプを設計できます。
この DMN モデルの例を迅速に作成するには、以下の
PersonDecisions.dmnファイルの内容をコピーします。DMN ファイルの例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow DMN モデラーを使用して VS Code でこの DMN モデルのサンプルを作成するには、以下の手順に従います。
-
空の
PersonDecisions.dmnファイルを開き、DMN モデラーの右上隅にある Properties アイコンをクリックし、DMN モデル Name がPersonDecisionsに設定されていることを確認します。 -
左側のパレットで DMN Input Data を選択し、ノードをキャンバスにドラッグしてから、ノードをダブルクリックして名前を
Personとします。 -
左側のパレットで DMN Decision ノードをキャンバスにドラッグし、ノードをダブルクリックして名前を
isAdultにし、入力ノードからリンクします。 - ノードオプションを表示するデシジョンノードを選択して Edit アイコンをクリックし、DMN ボックス式エディターを開き、ノードのデシジョンロジックを定義します。
- undefined expression フィールドをクリックし、Decision Table を選択します。
- デシジョンテーブルの左上隅をクリックして、ヒットポリシーを Unique に設定します。
タイプが
numberの入力ソースPerson.Ageで、年齢制限を、タイプがbooleanの出力ターゲットisAdultで成人ステータスを判断できるように、入出力コラムを設定します。図5.4 デシジョンが
isAdultの DMN デシジョンテーブルの例
右上のタブで Data Types タブを選択して、以下の
tPerson構造のデータ型とネスト化データタイプを追加します。図5.5 DMN データ型の例
- データタイプを定義したら、Editor タブを選択して、DMN モデラーキャンバスに戻ります。
-
Person 入力ノードを選択し、Properties アイコンをクリックし、Information item の下にある Data type を
tPersonに設定します。 -
isAdult デシジョンノードを選択し、Properties アイコンをクリックして、Information 項目 で Data type がまだ
booleanに設定されていることを確認します。デシジョンテーブルの作成時に、このデータ型を設定してください。 - DMN デシジョンサービスを保存します。
-
空の
5.1. 別のデシジョンサービスとしての DRL ルールユニットの使用 リンクのコピーリンクがクリップボードにコピーされました!
また、ルールユニットとして実装した Drools Rule Language (DRL) ファイルを使用して、Decision Model and Notation (DMN) を使用する代わりに、このサンプルデシジョンサービスを定義することもできます。
DRL ルールユニットは、ルールのモジュールおよび、実行ユニットです。ルールユニットは、ルール実行のファクトタイプの宣言を使用して、一連のルールを収集します。また、ルールユニットは、各ルールグループに固有の namespace としても機能します。1 つのルールベースには、複数のルールユニットを含めることができます。通常、ユニットだけで自己完結できるように、ユニットの全ルールはユニット宣言と同じファイルに保存します。ルールユニットの作成方法は、DRL ルールを使用したデシジョンサービスの作成 を参照してください。
前提条件
- プロジェクトを作成している。Maven プロジェクトの作成方法は 3章Red Hat build of Kogito マイクロサービスの Maven プロジェクトの作成 を参照してください。
手順
DMN ファイルを使用する代わりに、サンプルプロジェクトの
src/main/resourcesディレクトリーに、以下のPersonRules.drlファイルを追加します。PersonRulesDRL ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow このルールの例では、18 歳以上を成人として分類しているかどうかを判断します。また、ルールファイルは、ルールがルールユニット
PersonRulesに属することを宣言します。プロジェクトをビルドすると、ルールユニットが生成され、DRL ファイルに関連付けられます。ルールは OOPath 表記を使用して条件も定義します。OOPath は、Xpath のオブジェクト指向の構文拡張で、コレクションおよびフィルター制約を処理しながら、関連要素間を移動します。
以下の例のように、従来のルールパターン構文を使用して、より明示的な形式で同じルール条件を再書き込みすることもできます。
従来の表記を使用した
PersonRulesDRL ファイルの例Copy to Clipboard Copied! Toggle word wrap Toggle overflow