规则集拦截器
您可以在规则会话上实现规则集拦截器,以使规则集选择依赖于涉及已修改的 RuleApp 或规则集属性的特定事件。
- 扩充输入参数 (压缩,数据)
- 提供定制安全性检查
- 将请求路由到规则集 (例如,使用到期日期)
- 将逻辑规则集路径与物理规则集路径分开
使用规则集拦截器在运行时根据某些路由逻辑选择规则集,并以透明方式将服务添加到执行组件。 更具体地说,您可以使用拦截器来补充规则集路径,修改输入参数以及执行。 在规则会话上实现拦截器时,当发生涉及您已修改的 RuleApp 或规则集属性的特定事件时,将自动选择规则集。
您可以在无状态和有状态规则会话上使用拦截器。 唯一的区别在于方法的调用方式。
您必须具有监视器权限才能使用拦截器。 因此,您还必须具有应用程序服务器上的 Java™ EE 管理权限。
用例
基本示例包括使用属性来设置开始日期和结束日期,并让 Rule Execution Server 在给定日期或时间自动调用规则集。 另一个典型用例是执行请求,在这些请求中,不同地理区域的规则不同。
- 根据执行请求中 XOM 对象的值在 RuleApp 中选择规则集。
- 根据执行请求中 XOM 对象的值来更改 RuleApp 内的规则集路径。
- 在无状态规则会话和消息驱动的规则 Bean 中添加,除去或修改规则集参数值。
- 在托管透明决策服务中。 请参阅 透明决策服务 (Transparent decision services)。
API 和打包
缺省情况下,不会对会话请求启用规则集拦截器。 因此,要使用规则集拦截器,客户机应用程序必须首先对其会话请求启用规则集拦截器。
- 关于 IlrSessionRequest: :在会话请求上调用此方法后,只有此会话请求启用了规则集拦截器。 当前和将来的会话请求不受影响。
- 在创建会话请求之前, IlrSessionFactory, 上。 在会话工厂上调用此方法后,仅会启用从此会话工厂创建的未来会话请求的规则集拦截器。
通过 Java 类名指定拦截器。 Java类必须实现 IlrSessionInterceptor。
要更改执行过程所使用的规则集路径,请通过注册拦截器来使用 transformRsPath 回调方法。 无状态规则会话仅在调用 beforeExecute 方法之前调用此方法。 创建会话时,有状态会话仅调用方法一次。
在执行之前先调用拦截器,然后在执行之后再执行预处理和后处理操作。 在预处理阶段,拦截器通过设置输入请求以及 RuleApp 和规则集属性来修改已执行的规则集。
必须将类打包到客户机 EAR 中,然后使用 ruleapp.interceptor.classname RuleApp 属性向 Rule Execution Server 注册该类。 类在当前客户端类加载器中加载并实例化,方法 IlrSessionInterceptor.transformRsPath 被调用,并传递IlrSessionFactory ,该对象RuleApp 和规则集属性的只读树。 transformRsPath 方法返回一个 IlrPath 对象,该对象包含要在指定的 RuleApp中调用的规范规则集路径。
运行时间
- 在无状态会话中:
- 将为每个规则集执行调用 beforeExecute, transformRsPath和 afterExecute 方法。
- 在执行规则集之前,将执行 transformRsPath 和 beforeExecute 方法。
- 在执行后立即调用 afterExecute 方法。
- 在有状态会话中:
- 创建有状态会话时,仅调用一次 transformRsPath 方法。 这是因为规则集路径在有状态会话中不可改变。
- 然后,将在同一有状态会话中的每个规则集执行前后分别调用 beforeExecute 和 afterExecute 方法。