原来的文章就曾经提到过,在drools中,域约束好像只能适用于对象的简单类型域,复杂对象类型的是不能用域限定方式来做的。如:
rule "WEEKDAY_BALANCE"
salience 0
when
$customer : Customer( $card : card )
$scard : $card( discount == 0.9 )
then
System.out.println("...");
end
其中,card域就是一个“复杂”对象。那么上面的rule就是不合法的。
这个问题困扰多时,请教过dada,得知可以用eval来解决(或者,在3.1M中可以用from解决)。可处理了一些之后感觉还是有问题,尤其是一个对象中有多个“复杂”对象的时候。例如下面:
public class ProjMem {
private Project proj;
private Member mem;
}
这个类中的两个成员都是“复杂”对象。他们表征了一个项目参与关系。现在我想要实现这样的判断:如果一个成员mem(有id,name等属性)参与了2个或者以上的类型tp的项目proj(有id,type等属性),那么输出错误。可是怎么想也不知道该如何处理?!!!
这个答案在3.06版和3.1M版中的解决方案应该不一样吧?分别应该怎么解决呢?哪位高手可以指导一下?
谢谢了。。。
分享到:
相关推荐
在讨论的论坛中,开发者们探讨了如何在Drools规则引擎中处理复杂对象的问题。Drools是一款开源的Java规则引擎,它基于JBOSS社区,用于实现复杂的业务规则。 在Drools早期版本(如3.06和3.1M)中,规则定义存在一定...
- **WorkingMemory创建方式变更**:在Drools 4.0中引入了StatefulSession和 StatelessSession两种不同的会话类型,以取代原来的单一WorkingMemory类型。 - **WorkingMemory操作方法变更**:为了避免关键字冲突,部分...
- **新的自索引字段**:`this` 关键字,用于引用当前正在处理的对象,使得规则编写更加直观易懂。 - **条件元素嵌套与一阶逻辑支持**:增强了规则的表达能力,支持使用 `&&` 和 `||` 连接多个约束条件。 - **语法...
在这个名为"Drools规则引擎样例系统"的项目中,我们可以深入学习如何利用Drools进行规则的定义、存储、管理和执行,以及如何与Java代码紧密结合,构建出高效运行的业务系统。 首先,让我们了解一下Drools的核心概念...
10. **嵌套访问与属性导航**:支持嵌套访问,简化了集合、数组及映射的处理方式。 11. **XML 规则增强**:改进了 XML 规则的支持,使其更加友好易用。 ##### 1.1.2 核心引擎增强 1. **元数据类型支持**:增强了对...
- **WorkingMemory创建**:在Drools 3.0.x中,通过`rulebase.newWorkingMemory()`创建WorkingMemory。而在Drools 4.0.x中,则需要使用`rulebase.newStatefulSession()`创建有状态的Rule Session。 - **...
- **collect**: 支持集合操作,用于从一组对象中收集满足条件的对象。 - **accumulate**: 实现累加计算或其他聚合操作。 - **forall**: 检查一组条件是否对所有元素都成立。 - **not matches, not contains, in,...
Drools 4.0 是一个重要的更新,相较于之前的 Drools 3.0.x 版本,它在多个方面进行了重大改进,包括语言表达式、引擎性能、工具实用性及业务规则管理系统(BRMS)。以下将详细阐述这些更新内容: 1. **语言表达式...
压缩包中的"examples"可能包含多个子目录,每个子目录对应一个具体的示例,例如: 1. **Hello World**:这是最基础的示例,展示了如何创建和加载规则,以及如何使用Drools执行规则。通过这个例子,你可以了解到...
4. **递归**:在树结构中,通常需要使用递归算法来处理嵌套分支,即一个函数调用自身来解决复杂问题。 5. **Git**:分布式版本控制系统,用于跟踪和协调团队对代码的更改。 为了进一步探索这些项目,你可以解压文件...
这一特性允许在流程中使用 foreach 循环来动态地创建多个实例,非常适合处理列表数据。 ##### 2.4 Java 活动 允许开发者直接在 Java 中编写业务逻辑,提高代码的可读性和维护性。 ##### 2.5 赋值 在流程中定义...