第24章 Red Hat Process Automation Manager のランタイムコマンド
Red Hat Process Automation Manager はランタイムコマンドをサポートしています。これは、KIE セッションで全ルールを実行したり、オブジェクトを挿入したり取り消したりするなどのアセット関連の操作のために KIE Server に送信するものです。サポートされるランタイムコマンドの全一覧は、Red Hat Process Automation Manager インスタンスの org.drools.core.command.runtime
パッケージにあります。
KIE 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
要求のボディとして使用します。KIE Server REST API の使用に関する詳細情報は、21章KIE コンテナーおよびビジネスアセット用の KIE Server REST API を参照してください。
KIE Server Java クライアント API では、関連する Java クライアントの Java アプリケーションにこれらのコマンドを埋め込むことができます。たとえばルール関連のコマンドでは、RuleServicesClient
Java クライアントを埋め込むコマンドに使用します。KIE Server Java クライアント API の使用に関する詳細情報は、22章KIE コンテナーおよびビジネスアセット用の KIE Server Java クライアント API を参照してください。
24.1. Red Hat Process Automation Manager のランタイムコマンドのサンプル
以下は、KIE Server で KIE Server REST API または Java クライアント API のアセット関連演算に使用可能なランタイムコマンドのサンプルです。
-
BatchExecutionCommand
-
InsertObjectCommand
-
RetractCommand
-
ModifyCommand
-
GetObjectCommand
-
GetObjectsCommand
-
InsertElementsCommand
-
FireAllRulesCommand
-
StartProcessCommand
-
SignalEventCommand
-
CompleteWorkItemCommand
-
AbortWorkItemCommand
-
QueryCommand
-
SetGlobalCommand
-
GetGlobalCommand
サポートされるランタイムコマンドの全一覧は、Red Hat Process Automation Manager インスタンスの org.drools.core.command.runtime
パッケージにあります。
本セクションの各コマンドには、KIE Server REST API 用の REST 要求のボディ例 (JSON) と KIE Server Java クライアント API 用の Java クライアントの埋め込みコマンド例が含まれています。Java の例では、name
(文字列) と age
(整数) のフィールドがあるオブジェクト org.drools.compiler.test.Person
を使用しています。
- BatchExecutionCommand
同時に実行する複数のコマンドが含まれています。
表24.1 コマンドの属性 Name 説明 要件 commands
実行されるコマンド一覧
必須
lookup
コマンドの実行対象である KIE セッション ID を設定します。ステートレス KIE セッションの場合、この属性は必須です。ステートフル KIE セッションの場合この属性は任意で、指定されていないとデフォルトの KIE セッションが使用されます。
ステートレス KIE セッションでは必須、ステートフル KIE セッションでは任意
注記KIE セッションの ID は、Red Hat Process Automation Manager プロジェクトの
kmodule.xml
ファイルに含まれます。Business Central で KIE セッション ID を表示するか追加して、lookup
コマンド属性と併用するには、Business Central の関連のプロジェクトに移動し、プロジェクトの SettingsKIE bases KIE sessions に移動します。KIE ベースが存在しない場合は、Add KIE base KIE sessions の順にクリックして、新規の 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 コマンドの例
InsertObjectCommand insertCommand = new InsertObjectCommand(new Person("john", 25)); FireAllRulesCommand fireCommand = new FireAllRulesCommand(); BatchExecutionCommand batch = new BatchExecutionCommandImpl(Arrays.asList(insertCommand, fireCommand), "ksession1");
サーバーの応答例 (JSON)
{ "response": [ { "type": "SUCCESS", "msg": "Container command-script-container successfully called.", "result": { "execution-results": { "results": [ { "value": 0, "key": "firedActivations" } ], "facts": [] } } } ] }
- InsertObjectCommand
KIE セッションにオブジェクトを挿入します。
表24.2 コマンドの属性 Name 説明 要件 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 セッションからオブジェクトを取り消します。
表24.3 コマンドの属性 Name 説明 要件 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 セッションに以前に挿入されたオブジェクトを修正します。
表24.4 コマンドの属性 Name 説明 要件 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 セッションからオブジェクトを取得します。
表24.5 コマンドの属性 Name 説明 要件 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 セッションからすべてのオブジェクトをコレクションとして取得します。
表24.6 コマンドの属性 Name 説明 要件 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 セッションにオブジェクト一覧を挿入します。
表24.7 コマンドの属性 Name 説明 要件 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 セッションですべてのルールを実行します。
表24.8 コマンドの属性 Name 説明 要件 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": [] } } } ] }
- StartProcessCommand
プロセス ID を使用してプロセスを開始します。パラメーターと初期データを渡して挿入することもできます。
表24.9 コマンドの属性 Name 説明 要件 processId
開始するプロセスの ID
必須
parameters
プロセスのスタートアップでパラメーターを渡す
Map <String,Object>
引数任意
data
プロセスのスタートアップ前に KIE セッションに挿入するオブジェクト一覧
任意
JSON リクエストボディの例
{ "commands": [ { "start-process": { "processId": "myProject.myProcess", "data": null, "parameter": [], "out-identifier": null } } ] }
Java コマンドの例
StartProcessCommand startProcessCommand = new StartProcessCommand(); startProcessCommand.setProcessId("org.drools.task.processOne");
サーバーの応答例 (JSON)
{ "type": "SUCCESS", "msg": "Container stateful-session successfully called.", "result": { "execution-results": { "results": [], "facts": [] } } }
- SignalEventCommand
KIE セッションに単一イベントを送信します。
表24.10 コマンドの属性 Name 説明 要件 event-type
着信イベントのタイプ
必須
process-instance-id
通知されるプロセスインスタンスの ID
任意
event
着信イベントのデータ
任意
JSON リクエストボディの例
{ "commands": [ { "signal-event": { "process-instance-id": 1001, "correlation-key": null, "event-type": "start", "event": { "org.kie.server.testing.Person": { "fullname": "john", "age": 25 } } } } ] }
Java コマンドの例
SignalEventCommand signalEventCommand = new SignalEventCommand(); signalEventCommand.setProcessInstanceId(1001); signalEventCommand.setEventType("start"); signalEventCommand.setEvent(new Person("john", 25));
サーバーの応答例 (JSON)
{ "type": "SUCCESS", "msg": "Container stateful-session successfully called.", "result": { "execution-results": { "results": [], "facts": [] } } }
- CompleteWorkItemCommand
KIE セッションでワークアイテムを完了します。
表24.11 コマンドの属性 Name 説明 要件 workItemId
完了するワークアイテムの ID
必須
results
ワークアイテムの結果
任意
JSON リクエストボディの例
{ "commands": [ { "complete-work-item": { "id": 1001 } } ] }
Java コマンドの例
CompleteWorkItemCommand completeWorkItemCommand = new CompleteWorkItemCommand(); completeWorkItemCommand.setWorkItemId(1001);
サーバーの応答例 (JSON)
{ "response": [ { "type": "SUCCESS", "msg": "Container employee-rostering successfully called.", "result": { "execution-results": { "results": [], "facts": [] } } } ] }
- AbortWorkItemCommand
ksession.getWorkItemManager().abortWorkItem(workItemId)
と同じ方法で KIE セッションのワークアイテムを中止します。表24.12 コマンドの属性 Name 説明 要件 workItemId
中止するワークアイテムの ID
必須
JSON リクエストボディの例
{ "commands": [ { "abort-work-item": { "id": 1001 } } ] }
Java コマンドの例
AbortWorkItemCommand abortWorkItemCommand = new AbortWorkItemCommand(); abortWorkItemCommand.setWorkItemId(1001);
サーバーの応答例 (JSON)
{ "response": [ { "type": "SUCCESS", "msg": "Container employee-rostering successfully called.", "result": { "execution-results": { "results": [], "facts": [] } } } ] }
- QueryCommand
KIE ベースで定義されたクエリーを実行します。
表24.13 コマンドの属性 Name 説明 要件 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
オブジェクトをグローバルステートに設定します。
表24.14 コマンドの属性 Name 説明 要件 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
以前に定義したグローバルオブジェクトを取得します。
表24.15 コマンドの属性 Name 説明 要件 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": [] } } } ] }