第 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 basesKIE 会话。如果不存在 KIE 基础,请点击 Add KIE baseKIE 会话 来定义新的 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&gt; 参数,用于在进程启动中传递参数

选填

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": []
        }
      }
    }
  ]
}