规则会话

规则会话是客户机与规则引擎之间的运行时连接。 规则会话使用规则引擎资源。

规则会话与一个或多个规则集相关联,但与规则引擎的连接仅限于一个规则集。

规则会话 API 提供以下服务:
  • 访问 Rule Execution Server 存储库中部署的所有规则集和 RuleApps 的列表。
  • 规则集的执行。

规则会话的 API 显示在 ilog.rules.res.session 包中。

执行请求和执行响应

规则会话包含一个请求 IlrSessionRequest )和一个响应 IlrSessionResponse )。 您可以使用会话请求通过无状态规则会话来执行规则集。 会话请求包含有关规则集执行的信息,例如 IN 参数和跟踪设置。 会话响应包含从无状态规则集执行返回的信息,例如 OUT/INOUT 参数和跟踪数据。

规则集路径

规则会话在规则集路径上运行。 Rule Execution Server 使用已部署规则集的路径来查找规则集及其所属的 RuleApp 。 规则集路径是类 IlrPath的实例。

规则集路径在指定 RuleApp 名称和版本号以及规则集名称和版本号时称为 规范 ,如下所示:

/{RuleApp name}[/{version}]/{ruleset name}[/{version}]
  • {RuleApp name}{ruleset name} 元素都是必需的。
  • /{version} 元素是可选的。 如果未指定版本,那么将使用 RuleApp 或规则集的最新激活版本。 {version} 等同于 {number}.{number}
限制:
RuleApp 和规则集名称中不允许所有字符:
  • 仅使用字母,数字和下划线 (_) 字符。
  • 第一个字符不能是数字 (0-9)。
  • 允许使用标识为字母的 Unicode 字符。
如果将 Rule Execution Server 持久性设置为 file,请记住 Windows 环境不区分大小写。
表 1. 有效规则集路径
有效规则集路径
/rule8_8app/6_ruleset_6/1.0
/rule8_8app/1.0/6_ruleset_6
/rule8_8app/6_ruleset_6
/rule8_8app/1.0/6_ruleset_6/1.0

要指定规则集路径,还可以使用规则集拦截器。

无状态和有状态规则会话

规则会话可以是有状态或无状态的。
无状态规则会话
无状态规则会话是不处理状态的执行会话: 在两个方法调用之间,会话不会维护任何数据或引擎信息。 无状态规则会话是 IlrStatelessSession 类的实例。 在无状态规则会话中,您可以通过在执行请求和执行启动之间插入观察者来异步执行规则集,具体取决于执行事件。 要插入观察者,请实现 IlrAsyncExecutionObserver。
有状态规则会话
有状态规则会话链接到单个规则集路径,并启用对工作内存的访问。 IlrStatefulSession支持多种 execute 方法。

工厂

要创建规则会话,请使用客户机应用程序可用来引用会话实现的类工厂。 工厂是通过规则会话 API 调用 Rule Execution Server 的入口点。 您可以使用 IlrSessionFactor的方法创建有状态、无状态和管理会话,创建执行请求,并启用拦截器。

针对各种应用程序环境提供了实现:
Java™ SE
对于 Java SE 环境或仅 Web 容器。 通过 Java SE 工厂,可以在 Java EE 应用程序服务器外部使用规则会话。 该实现作为 Java SE 执行单元 (XU) 嵌入。 Java EE 实现使用完整的 Java EE 执行单元。
普通旧 Java 对象 (POJO)
对于具有简单 Java 对象模型的 Java EE 环境。 POJO 模型在 Java EE 应用程序服务器中可用。

通常,您为目标环境实例化规则会话工厂,然后使用生成的对象来访问规则会话。 请参阅 ilog.rules.res.session 包描述以获取代码样本。

规则集参数

在规则集特征符中声明为 XML 或 BOM 类型的输入参数必须作为 java.lang.String 对象传递。 在规则集特征符中声明为 XML 或 BOM 类型的输出参数将作为 java.lang.String 对象返回。

决策标识

您可以在客户端应用程序中使用规则会话API和 IlrSessionResponse#getExecutionId(来返回决策标识符(ID)。 您可以通过调用 IlrSessionRequest.IlrSessionRequest#setExecutionId(javalang.String 方法来覆盖这些标识符。

您可以在 Decision Warehouse 中使用决策标识来查找特定事务并查看已执行的规则。
注意: 定义决策标识时,请确保它是唯一的。 否则,客户机将接收响应,但不会在 Decision Warehouse 中注册该响应。 在输出字符串中发出警告。