确定drools中参数的位置

时间:2014-01-28 18:27:43

标签: java drools

我正在使用这些参数执行drools规则。

session.execute(Arrays.asList(new Object[]{fileName,tableName}));

其中 fileName tableName = 字符串

但是当我运行一些规则时:

rule"A"
when
 $fileName: String()
 $tableName: String()
then
 System.out.println($fileName + " " + $tableName);
end

我在 BOTH 参数中有 fileName

fileName = fileName
tableName = fileName

如何在规则中声明正确的参数值?

2 个答案:

答案 0 :(得分:3)

执行调用后,你的工作记忆中有两个事实:

String "filename"
String "tablename"

规则将模式“String()”与这两个字符串中的任何一个匹配:

$fileName: String() ... matches String "filename" and String "tablename"
$tableName: String() ... matches String "filename" and String "tablename"

因此规则将触发四次,为您提供所有组合。 - 插入普通的数据类型(如String或Map或List)通常是不好的做法。它们不容易识别。声明(String是final)类Filename和Tablename为{String value; ...},插入这些类的对象并将规则写为

Filename( $fn: value )
Tablename( $tn: value )

答案 1 :(得分:0)

另一种方式(在评论中收回此提案)。 我们可以使用全局

  1. 在会话中设置全局变量

    session.setGlobal( “文件名”,文件名)

    session.setGlobal(“tableName”,tableName)

  2. 不要忘记设置.drl文件

    global java.lang.String fileName

    global java.lang.String tableName

    • 但是在 ADDITION (永远不会永远不会在cuncurrency app中使用此方法。)