第 24 章 Red Hat Process Automation Manager 中的运行时命令
Red Hat Process Automation Manager 支持向 KIE Server 发送与资产相关的操作的运行时命令,如执行所有规则或插入 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 命令作为 POST 请求的请求正文到 http://SERVER:PORT/kie-server/services/rest/server/containers/instances/{containerId}。有关使用 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 中用于 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
包含要一起执行的多个命令。
Expand 表 24.1. 命令属性 名称 描述 要求 commands要执行的命令列表。
必填
lookup设置要执行的命令的 KIE 会话 ID。对于无状态 KIE 会话,需要此属性。对于有状态 KIE 会话,此属性是可选的,如果没有指定,则使用默认的 KIE 会话。
无状态 KIE 会话需要此项,对于有状态 KIE 会话是可选的
注意KIE 会话 ID 位于 Red Hat Process Automation Manager 项目的
kmodule.xml文件中。要在 Business Central 中查看或添加 KIE 会话 ID 以用于lookupcommand 属性,请导航到 Business Central 中的相关项目,再前往项目 SettingsKIE bases KIE 会话。如果没有 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 会话中。
Expand 表 24.2. 命令属性 名称 描述 要求 对象要插入的对象
必填
out-identifier从对象插入创建并添加到执行结果中的
FactHandleID选填
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 会话中的对象.
Expand 表 24.3. 命令属性 名称 描述 要求 fact-handle与要调整的对象关联的
FactHandle必填
JSON 请求正文示例
{ "commands": [ { "retract": { "fact-handle": "0:4:436792766:-2127720265:4:DEFAULT:NON_TRAIT:java.util.LinkedHashMap" } } ] }示例 Java 命令:使用
FactHandleFromStringRetractCommand retractCommand = new RetractCommand(); retractCommand.setFactHandleFromString("123:234:345:456:567");示例 Java 命令:使用插入的对象中的
FactHandleRetractCommand retractCommand = new RetractCommand(factHandle);服务器响应示例(JSON)
{ "response": [ { "type": "SUCCESS", "msg": "Container employee-rostering successfully called.", "result": { "execution-results": { "results": [], "facts": [] } } } ] }- ModifyCommand
在 KIE 会话中修改之前插入的对象。
Expand 表 24.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 会话检索对象。
Expand 表 24.5. 命令属性 名称 描述 要求 fact-handle与要检索的对象关联的
FactHandle必填
out-identifier从对象插入创建并添加到执行结果中的
FactHandleID选填
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 会话检索所有对象。
Expand 表 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 会话中。
Expand 表 24.7. 命令属性 名称 描述 要求 对象要插入到 KIE 会话中的对象列表
必填
out-identifier从对象插入创建并添加到执行结果中的
FactHandleID选填
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 会话中的所有规则。
Expand 表 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 启动一个进程。您也可以传递要插入的参数和初始数据。
Expand 表 24.9. 命令属性 名称 描述 要求 processId要启动的进程的 ID
必填
parametersMap <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 会话发送一个信号事件。
Expand 表 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 会话中完成一个工作项目。
Expand 表 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)相同。Expand 表 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 基础中定义的查询。
Expand 表 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
将对象设置为全局状态。
Expand 表 24.14. 命令属性 名称 描述 要求 identifierKIE 基础中定义的全局变量的 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
检索之前定义的全局对象。
Expand 表 24.15. 命令属性 名称 描述 要求 identifierKIE 基础中定义的全局变量的 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": [] } } } ] }