原来的文章就曾经提到过,在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操作方法变更**:为了避免关键字冲突,部分...
在这个名为"Drools规则引擎样例系统"的项目中,我们可以深入学习如何利用Drools进行规则的定义、存储、管理和执行,以及如何与Java代码紧密结合,构建出高效运行的业务系统。 首先,让我们了解一下Drools的核心概念...
- **WorkingMemory创建**:在Drools 3.0.x中,通过`rulebase.newWorkingMemory()`创建WorkingMemory。而在Drools 4.0.x中,则需要使用`rulebase.newStatefulSession()`创建有状态的Rule Session。 - **...
- **支持条件元素的嵌套**:这意味着可以在规则中实现更为复杂的逻辑结构,比如一阶逻辑的完整支持。 - **支持使用 `&&` 和 `||` 连接多个约束条件**:这使得条件语句的构建变得更加直观。 - **语法解析器的增强**:...
Drools 4.0 是一个重要的更新,相较于之前的 Drools 3.0.x 版本,它在多个方面进行了重大改进,包括语言表达式、引擎性能、工具实用性及业务规则管理系统(BRMS)。以下将详细阐述这些更新内容: 1. **语言表达式...
压缩包中的"examples"可能包含多个子目录,每个子目录对应一个具体的示例,例如: 1. **Hello World**:这是最基础的示例,展示了如何创建和加载规则,以及如何使用Drools执行规则。通过这个例子,你可以了解到...
4. **递归**:在树结构中,通常需要使用递归算法来处理嵌套分支,即一个函数调用自身来解决复杂问题。 5. **Git**:分布式版本控制系统,用于跟踪和协调团队对代码的更改。 为了进一步探索这些项目,你可以解压文件...