第 24 章 Red Hat Process Automation Manager 中的运行时命令
Red Hat Process Automation Manager 支持您可以发送到 KIE 服务器的运行时命令,以获取与资产相关的操作,例如在 KIE 会话中执行所有规则或插入或重新遍历对象。支持的运行时命令的完整列表位于 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 服务器 REST API 的更多信息,请参阅 第 21 章 KIE 服务器 REST API 用于 KIE 容器和业务资产。
在 KIE Server Java 客户端 API 中,您可以将这些命令嵌入到 Java 应用程序中,以及相关的 Java 客户端。例如,对于与规则相关的命令,您可以使用 RuleServicesClient
Java 客户端及嵌入式命令。有关使用 KIE Server Java 客户端 API 的更多信息,请参阅 第 22 章 KIE Server Java 客户端 API 用于 KIE 容器和业务资产。
24.1. Red Hat Process Automation Manager 中的运行时命令示例
以下是您可以与 KIE Server REST API 或 Java 客户端 API 搭配使用的运行时命令示例,用于 KIE Server 中的与资产相关的操作:
-
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 示例使用对象 org.drools.compiler.test.Person
,其 字段名称
(字符串) 和年龄
(Integer)。
- BatchExecutionCommand
包含要一起执行的多个命令。
表 24.1. 命令属性 名称 描述 要求 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 会话。如果不存在 KIE 基础,请点击 Add KIE base 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 命令示例
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. 命令属性 名称 描述 要求 对象
要插入的对象
必填
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. 命令属性 名称 描述 要求 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. 命令属性 名称 描述 要求 fact-handle
与要修改的对象关联的
factHandle
必填
setters
对象修改的 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. 命令属性 名称 描述 要求 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. 命令属性 名称 描述 要求 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. 命令属性 名称 描述 要求 对象
要插入到 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. 命令属性 名称 描述 要求 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. 命令属性 名称 描述 要求 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. 命令属性 名称 描述 要求 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. 命令属性 名称 描述 要求 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
中止 KIE 会话中的工作项,其方式与
ksession.getWorkItemManager ().abortWorkItem (workItemId)
相同。表 24.12. 命令属性 名称 描述 要求 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
查询名称。
必填
out-identifier
查询结果的 ID。查询结果将添加到带有此标识符的执行结果中。
选填
参数
要作为参数传递的对象列表。
选填
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. 命令属性 名称 描述 要求 identifier
KIE 基础中定义的全局变量 ID
必填
对象
要设置为全局变量的对象
选填
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. 命令属性 名称 描述 要求 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": [] } } } ] }