流口水:为什么是无状态会话?
Drools: Why stateless sessions?
Drools 使用会话来存储运行时数据。为此,有两种会话:无状态和有状态。与无状态会话相比,有状态会话允许迭代调用并且似乎比无状态会话具有所有优势。
那么为什么还要有无状态会话呢?他们服务的目的是什么?与有状态会话相比,它们的优势是什么?
谢谢。
对于许多其他一般无状态 场景,Drools 无状态会话可能有助于过滤或数据预处理或数据验证。
对于不同的用例,我体验过 Drools 中有状态和无状态会话的需求;对于无状态用例,一些示例:
- 数据验证: 规则定义验证约束,当收到消息/业务对象时,它会根据规则进行验证
- 过滤: 规则定义给定消息是否通过 down/forward 数据管道
- 预处理: 规则定义消息/业务对象在传递down/forward 数据管道
之前如何预格式化或调整
在这些示例中,您注意到在根据规则对对象进行评估后会话不需要保持任何状态。在这些示例中,最好只丢弃会话并为下一个 message/object 创建一个新会话,因为它们可以单独进行完整评估。从技术上讲,如果规则定义明确,行为将是幂等的,这意味着如果您(无意中?)再次循环相同的 object/message,结果将是相同的。最后,当我说 object/message 时,它并不一定意味着单个 Pojo,它可能是对象的集合。
Drools 使用会话来存储运行时数据。为此,有两种会话:无状态和有状态。与无状态会话相比,有状态会话允许迭代调用并且似乎比无状态会话具有所有优势。
那么为什么还要有无状态会话呢?他们服务的目的是什么?与有状态会话相比,它们的优势是什么?
谢谢。
对于许多其他一般无状态 场景,Drools 无状态会话可能有助于过滤或数据预处理或数据验证。
对于不同的用例,我体验过 Drools 中有状态和无状态会话的需求;对于无状态用例,一些示例:
- 数据验证: 规则定义验证约束,当收到消息/业务对象时,它会根据规则进行验证
- 过滤: 规则定义给定消息是否通过 down/forward 数据管道
- 预处理: 规则定义消息/业务对象在传递down/forward 数据管道 之前如何预格式化或调整
在这些示例中,您注意到在根据规则对对象进行评估后会话不需要保持任何状态。在这些示例中,最好只丢弃会话并为下一个 message/object 创建一个新会话,因为它们可以单独进行完整评估。从技术上讲,如果规则定义明确,行为将是幂等的,这意味着如果您(无意中?)再次循环相同的 object/message,结果将是相同的。最后,当我说 object/message 时,它并不一定意味着单个 Pojo,它可能是对象的集合。