Drools:用于相同格式的多个模式的模板

时间:2016-05-09 10:59:11

标签: drools rule-engine

我有一个Drools规则规则文件:

package com.test

import com.test.fact.Feature;

global com.test.Course subjects;

rule "CS"
when
    Feature( subjectName=="Math", rating >= 6)
    Feature( subjectName=="Computers", rating >= 9)
    Feature( subjectName=="Electronics", rating >= 3)
then
    subjects.addSubjectName("Computers");
end

rule "Physics"
when
    Feature( subjectName=="Math", rating >= 9)
    Feature( subjectName=="Physics", rating >= 9)
then
    subjects.addSubjectName("Physics");
end

可以更改when子句中的模式,因为定义主题的模式定义放在数据库表中,如下所示: PatternDefinition(PatternName,FeatureName,FeatureValue),其中PatternDefinition是具有PatternName,FeatureName和FeatureValue的表名,是列。

E.g。对于规则“CS”,定义将使用模式名称“CS”,如下所示:

Row 1 -> CS, Math, >=9
Row 2 -> CS, Computers, >=9
Row 3 -> CS, Electronincs, >=3

我无法更改数据库表,因为有大量数据并且被引用到很多子项目中。

特定规则的定义可以随着新主题的添加或定义的更改而改变(假设特定主题的评级要求发生变化)。这些在数据库中从后台更改。

我需要将上述规则转换为Drools-template,以便应用程序启动时自动获取数据库中的更改并准备读取模板和数据库数据的Drools规则文件。

我已经能够将单个功能配置为模板,但不能在单个规则中配置多个。

请建议。

1 个答案:

答案 0 :(得分:0)

原始解决方案是定义n个模板,每个规则/模式名称为1,2,... n行。

对于更智能的解决方案,需要了解这些规则的目的。要将哪个功能名称添加到全局列表中,为什么?