论坛首页 入门技术论坛

有关使用Drools的Decision Tables(决策表)注意事项

浏览 3472 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-09-14   最后修改:2009-09-14
1.使用EXCEL作为决策表时,如果单元格中有设置“12,23”形式的参数值,请注意一定将所有这些单元格的格式设置为文本格式,如果是数字格式,表面看似完全正确的表格,却无法正常运行,耽误你很多的时间去发现这个小错误。比如我就在使用Rule Templates时,用EXCEL作为数据来源,在测试过程中,始终报告“org.drools.runtime.rule.ConsequenceException: java.lang.RuntimeException: java.lang.NullPointerException”的错误,到最后,查看错误栈的源时,无意看到“Caused by: java.lang.NullPointerException
at org.drools.template.parser.ArrayCell.addValue(ArrayCell.java:44)”
中的ArrayCell时才猜测到这个可能,实在是冤哪。

2.关于drl或drt的规则文件注释问题:千万不要被它的类似java的单行或多行注释假象迷惑,如果你像这样写块注释则一定会错的:

/*规则1:
rule "discount intervalDays refundsRate1_@{row.rowNumber}"
	when
	        ...
	then
		...;
end
*/


你必须这样进行多行注释:

rule "discount intervalDays refundsRate1_@{row.rowNumber}"
	when
		/*规则1:
		...
		*/
	then
		/*
		...
		*/
end

必须在块when或then作块内的单独注释!

对单行注释你也很容易犯下这样的错误:

//xxx
rule "discount intervalDays refundsRate2_@{row.rowNumber}"
	when
		...
	then
		...
end


你必须像这样来注释:

rule "discount intervalDays refundsRate2_@{row.rowNumber}"
	when
		//xxx:
		...
	then
                //xxx
		...
end


得出结论,不管是单行注释还是多行注释,你必须在块when或then作块内的单独注释!
   发表时间:2009-09-14  
貌似不是这个原因。好像是因为.drt文件中的
template header
discount[]
intervalDays
refundsRate[]
deduct

package xx.entity;

template "discount intervalDays refundsRate"
discount
intervalDays
refundsRate
deduct


必须要加上这段
template "discount intervalDays refundsRate"
discount
intervalDays
refundsRate
deduct


并且必须加上package,否则会报告
value rule "discount intervalDays refundsRate_@{row.rowNumber}" is not a valid column definition

不知道何原因,刚开始接触这玩意,以后弄明白了再说吧。
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics