第4章 Red Hat Decision Manager のランタイムコマンド

Red Hat Decision Manager はランタイムコマンドをサポートしています。これは、KIE セッションでオブジェクトを挿入したり取り消したり、全ルールを実行するなど、アセット関連の操作のために Decision Server に送信するものです。サポートされるランタイムコマンドの全一覧は、Red Hat Decision Manager インスタンスの org.drools.core.command.runtime パッケージにあります。

Decision Server REST API では、グローバルの org.drools.core.command.runtime コマンドまたはルール固有の org.drools.core.command.runtime.rule コマンドを http://SERVER:PORT/kie-server/services/rest/server/containers/instances/{containerId} へのPOST 要求の本文として使用します。Decision Server REST API の使用方法に関しては、1章KIE コンテナーおよびビジネスアセット用の Decision Server REST API を参照してください。

Decision Server Java クライアント API では、関連する Java クライアントの Java アプリケーションにこれらのコマンドを埋め込むことができます。たとえばルール関連のコマンドでは、RuleServicesClient Java クライアントを埋め込むコマンドに使用します。Decision Server Java クライアント API の使用に関する詳細情報は、2章KIE コンテナーおよびビジネスアセット用の Decision Server Java クライアント API を参照してください。

4.1. Red Hat Decision Manager のランタイムコマンドのサンプル

以下は、Decision Server で Decision Server REST API または Java クライアント API のアセット関連演算に使用可能なランタイムコマンドのサンプルです。

  • BatchExecutionCommand
  • InsertObjectCommand
  • RetractCommand
  • ModifyCommand
  • GetObjectCommand
  • GetObjectsCommand
  • InsertElementsCommand
  • FireAllRulesCommand
  • QueryCommand
  • SetGlobalCommand
  • GetGlobalCommand

サポートされるランタイムコマンドの全一覧は、Red Hat Decision Manager インスタンスの org.drools.core.command.runtime パッケージにあります。

本セクションの各コマンドには、Decision Server REST API 用の REST 要求の本文例 (JSON) と Decision Server Java クライアント API 用の Java クライアントの埋め込みコマンド例が含まれています。Java の例では、name (文字列) と age (整数) のフィールドがあるオブジェクト org.drools.compiler.test.Person を使用しています。

BatchExecutionCommand

同時に実行する複数のコマンドが含まれています。

表4.1 コマンドの属性

名前説明要件

commands

実行されるコマンド一覧

必須

lookup

コマンドの実行対象である KIE セッション ID を設定します。ステートレス KIE セッションの場合、この属性は必須です。ステートフル KIE セッションの場合この属性はオプションで、指定されていないとデフォルトの KIE セッションが使用されます。

ステートレス KIE セッションでは必須、ステートフル KIE セッションではオプション

JSON リクエストボディの例

{
  "lookup": "ksession1",
  "commands": [ {
      "insert": {
        "object": {
          "org.drools.compiler.test.Person": {
            "name": "john",
            "age": 25
          }
        }
      }
    },
    {
      "fire-all-rules": {
        "max": 10,
        "out-identifier": "firedActivations"
      }
    }
  ]
}

Java コマンドの例

BatchExecutionCommand command = new BatchExecutionCommand();
command.setLookup("ksession1");

InsertObjectCommand insertObjectCommand = new InsertObjectCommand(new Person("john", 25));
FireAllRulesCommand fireAllRulesCommand = new FireAllRulesCommand();

command.getCommands().add(insertObjectCommand);
command.getCommands().add(fireAllRulesCommand);

ksession.execute(command);

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [
            {
              "value": 0,
              "key": "firedActivations"
            }
          ],
          "facts": []
        }
      }
    }
  ]
}

InsertObjectCommand

KIE セッションにオブジェクトを挿入します。

表4.2 コマンドの属性

名前説明要件

object

挿入するオブジェクト

必須

out-identifier

オブジェクト挿入から作成され、実行結果に追加される FactHandle の ID

オプション

return-object

実行結果にオブジェクトを返す必要があるかどうかを決定するブール値 (デフォルト値: true)

オプション

entry-point

挿入のエントリーポイント

オプション

JSON リクエストボディの例

{
  "commands": [ {
      "insert": {
        "entry-point": "my stream",
        "object": {
          "org.drools.compiler.test.Person": {
            "age": 25,
            "name": "john"
          }
        },
        "out-identifier": "john",
        "return-object": false
      }
    }
  ]
}

Java コマンドの例

Command insertObjectCommand =
  CommandFactory.newInsert(new Person("john", 25), "john", false, null);

ksession.execute(insertObjectCommand);

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [],
          "facts": [
            {
              "value": {
                "org.drools.core.common.DefaultFactHandle": {
                  "external-form": "0:4:436792766:-2127720265:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap"
                }
              },
              "key": "john"
            }
          ]
        }
      }
    }
  ]
}

RetractCommand

KIE セッションからオブジェクトを撤回します。

表4.3 コマンドの属性

名前説明要件

fact-handle

撤回するオブジェクトに関連付けられた FactHandle

必須

JSON リクエストボディの例

{
  "commands": [ {
      "retract": {
        "fact-handle": "0:4:436792766:-2127720265:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap"
      }
    }
  ]
}

Java コマンドの使用例: FactHandleFromString

RetractCommand retractCommand = new RetractCommand();
retractCommand.setFactHandleFromString("123:234:345:456:567");

Java コマンドの使用例: 挿入されたオブジェクトから FactHandle

RetractCommand retractCommand = new RetractCommand(factHandle);

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container employee-rostering successfully called.",
      "result": {
        "execution-results": {
          "results": [],
          "facts": []
        }
      }
    }
  ]
}

ModifyCommand

KIE セッションに以前に挿入されたオブジェクトを修正します。

表4.4 コマンドの属性

名前説明要件

fact-handle

修正するオブジェクトに関連付けられた FactHandle

必須

setters

オブジェクト修正のセッター一覧

必須

JSON リクエストボディの例

{
  "commands": [ {
      "modify": {
        "fact-handle": "0:4:436792766:-2127720265:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap",
        "setters": {
          "accessor": "age",
          "value": 25
        }
      }
    }
  ]
}

Java コマンドの例

ModifyCommand modifyCommand = new ModifyCommand(factHandle);

List<Setter> setters = new ArrayList<Setter>();
setters.add(new SetterImpl("age", "25"));

modifyCommand.setSetters(setters);

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container employee-rostering successfully called.",
      "result": {
        "execution-results": {
          "results": [],
          "facts": []
        }
      }
    }
  ]
}

GetObjectCommand

KIE セッションからオブジェクトを取得します。

表4.5 コマンドの属性

名前説明要件

fact-handle

取得するオブジェクトに関連付けられた FactHandle

必須

out-identifier

オブジェクト挿入から作成され、実行結果に追加される FactHandle の ID

オプション

JSON リクエストボディの例

{
  "commands": [ {
      "get-object": {
        "fact-handle": "0:4:436792766:-2127720265:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap",
        "out-identifier": "john"
      }
    }
  ]
}

Java コマンドの例

GetObjectCommand getObjectCommand = new GetObjectCommand();
getObjectCommand.setFactHandleFromString("123:234:345:456:567");
getObjectCommand.setOutIdentifier("john");

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [
            {
              "value": null,
              "key": "john"
            }
          ],
          "facts": []
        }
      }
    }
  ]
}

GetObjectsCommand

KIE セッションからすべてのオブジェクトをコレクションとして取得します。

表4.6 コマンドの属性

名前説明要件

object-filter

KIE セッションから返されるオブジェクト用のフィルター

オプション

out-identifier

実行結果に使用する識別子

オプション

JSON リクエストボディの例

{
  "commands": [ {
      "get-objects": {
        "out-identifier": "objects"
      }
    }
  ]
}

Java コマンドの例

GetObjectsCommand getObjectsCommand = new GetObjectsCommand();
getObjectsCommand.setOutIdentifier("objects");

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [
            {
              "value": [
                {
                  "org.apache.xerces.dom.ElementNSImpl": "<?xml version=\"1.0\" encoding=\"UTF-16\"?>\n<object xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:type=\"person\"><age>25</age><name>john</name>\n <\/object>"
                },
                {
                  "org.drools.compiler.test.Person": {
                    "name": "john",
                    "age": 25
                  }
                }
              ],
              "key": "objects"
            }
          ],
          "facts": []
        }
      }
    }
  ]
}

InsertElementsCommand

KIE セッションにオブジェクト一覧を挿入します。

表4.7 コマンドの属性

名前説明要件

objects

KIE セッションに挿入するオブジェクト一覧

必須

out-identifier

オブジェクト挿入から作成され、実行結果に追加される FactHandle の ID

オプション

return-object

実行結果にオブジェクトを返す必要があるかどうかを決定するブール値。デフォルト値: true

オプション

entry-point

挿入のエントリーポイント

オプション

JSON リクエストボディの例

{
  "commands": [ {
    "insert-elements": {
        "objects": [
            {
                "containedObject": {
                    "@class": "org.drools.compiler.test.Person",
                    "age": 25,
                    "name": "john"
                }
            },
            {
                "containedObject": {
                    "@class": "Person",
                    "age": 35,
                    "name": "sarah"
                }
            }
        ]
    }
  }
]
}

Java コマンドの例

List<Object> objects = new ArrayList<Object>();
objects.add(new Person("john", 25));
objects.add(new Person("sarah", 35));

Command insertElementsCommand = CommandFactory.newInsertElements(objects);

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [],
          "facts": [
            {
              "value": {
                "org.drools.core.common.DefaultFactHandle": {
                  "external-form": "0:4:436792766:-2127720265:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap"
                }
              },
              "key": "john"
            },
            {
              "value": {
                "org.drools.core.common.DefaultFactHandle": {
                  "external-form": "0:4:436792766:-2127720266:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap"
                }
              },
              "key": "sarah"
            }
          ]
        }
      }
    }
  ]
}

FireAllRulesCommand

KIE セッションですべてのルールを実行します。

表4.8 コマンドの属性

名前説明要件

max

実行するルールの最大数。デフォルト値は -1 で、実行に制限を課しません。

オプション

out-identifier

実行結果で、使用されたルール数の取得に使用される ID。

オプション

agenda-filter

ルール実行に使用するアジェンダフィルター。

オプション

JSON リクエストボディの例

{
  "commands" : [ {
    "fire-all-rules": {
        "max": 10,
        "out-identifier": "firedActivations"
    }
  } ]
}

Java コマンドの例

FireAllRulesCommand fireAllRulesCommand = new FireAllRulesCommand();
fireAllRulesCommand.setMax(10);
fireAllRulesCommand.setOutIdentifier("firedActivations");

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [
            {
              "value": 0,
              "key": "firedActivations"
            }
          ],
          "facts": []
        }
      }
    }
  ]
}

QueryCommand

KIE ベースで定義されたクエリーを実行します。

表4.9 コマンドの属性

名前説明要件

name

クエリー名。

必須

out-identifier

クエリー結果の ID。クエリー結果を実行結果に追加する際に、この ID を使用します。

オプション

arguments

クエリーパラメーターとして渡されるオブジェクト一覧。

オプション

JSON リクエストボディの例

{
  "commands": [
    {
      "query": {
        "name": "persons",
        "arguments": [],
        "out-identifier": "persons"
      }
    }
  ]
}

Java コマンドの例

QueryCommand queryCommand = new QueryCommand();
queryCommand.setName("persons");
queryCommand.setOutIdentifier("persons");

サーバーの応答例 (JSON)

{
  "type": "SUCCESS",
  "msg": "Container stateful-session successfully called.",
  "result": {
    "execution-results": {
      "results": [
        {
          "value": {
            "org.drools.core.runtime.rule.impl.FlatQueryResults": {
              "idFactHandleMaps": {
                "type": "LIST",
                "componentType": null,
                "element": [
                  {
                    "type": "MAP",
                    "componentType": null,
                    "element": [
                      {
                        "value": {
                          "org.drools.core.common.DisconnectedFactHandle": {
                            "id": 1,
                            "identityHashCode": 1809949690,
                            "objectHashCode": 1809949690,
                            "recency": 1,
                            "object": {
                              "org.kie.server.testing.Person": {
                                "fullname": "John Doe",
                                "age": 47
                              }
                            },
                            "entryPointId": "DEFAULT",
                            "traitType": "NON_TRAIT",
                            "external-form": "0:1:1809949690:1809949690:1:DEFAULT:NON_TRAIT:org.kie.server.testing.Person"
                          }
                        },
                        "key": "$person"
                      }
                    ]
                  }
                ]
              },
              "idResultMaps": {
                "type": "LIST",
                "componentType": null,
                "element": [
                  {
                    "type": "MAP",
                    "componentType": null,
                    "element": [
                      {
                        "value": {
                          "org.kie.server.testing.Person": {
                            "fullname": "John Doe",
                            "age": 47
                          }
                        },
                        "key": "$person"
                      }
                    ]
                  }
                ]
              },
              "identifiers": {
                "type": "SET",
                "componentType": null,
                "element": [
                  "$person"
                ]
              }
            }
          },
          "key": "persons"
        }
      ],
      "facts": []
    }
  }
}

SetGlobalCommand

オブジェクトをグローバルステートに設定します。

表4.10 コマンドの属性

名前説明要件

identifier

KIE ベースで定義されるグローバル変数の ID

必須

object

グローバル変数に設定されるオブジェクト

オプション

out

設定したグローバル変数を実行結果から除外するブール値

オプション

out-identifier

グローバル実行結果の ID

オプション

JSON リクエストボディの例

{
  "commands": [
    {
      "set-global": {
        "identifier": "helper",
        "object": {
          "org.kie.server.testing.Person": {
            "fullname": "kyle",
            "age": 30
          }
        },
        "out-identifier": "output"
      }
    }
  ]
}

Java コマンドの例

SetGlobalCommand setGlobalCommand = new SetGlobalCommand();
setGlobalCommand.setIdentifier("helper");
setGlobalCommand.setObject(new Person("kyle", 30));
setGlobalCommand.setOut(true);
setGlobalCommand.setOutIdentifier("output");

サーバーの応答例 (JSON)

{
  "type": "SUCCESS",
  "msg": "Container stateful-session successfully called.",
  "result": {
    "execution-results": {
      "results": [
        {
          "value": {
            "org.kie.server.testing.Person": {
              "fullname": "kyle",
              "age": 30
            }
          },
          "key": "output"
        }
      ],
      "facts": []
    }
  }
}

GetGlobalCommand

以前に定義したグローバルオブジェクトを取得します。

表4.11 コマンドの属性

名前説明要件

identifier

KIE ベースで定義されるグローバル変数の ID

必須

out-identifier

実行結果で使用される ID

オプション

JSON リクエストボディの例

{
  "commands": [ {
      "get-global": {
        "identifier": "helper",
        "out-identifier": "helperOutput"
      }
    }
  ]
}

Java コマンドの例

GetGlobalCommand getGlobalCommand = new GetGlobalCommand();
getGlobalCommand.setIdentifier("helper");
getGlobalCommand.setOutIdentifier("helperOutput");

サーバーの応答例 (JSON)

{
  "response": [
    {
      "type": "SUCCESS",
      "msg": "Container command-script-container successfully called.",
      "result": {
        "execution-results": {
          "results": [
            {
              "value": null,
              "key": "helperOutput"
            }
          ],
          "facts": []
        }
      }
    }
  ]
}