2016-05-09 13 views
0

У меня есть файл правила Правило Drools как: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 

узоры в когда положение может быть изменено как определения шаблонов, определяющих предмет помещается в таблицу базы данных, как : 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, чтобы при запуске приложения автоматически забирали изменения в базе данных и готовили файл правил Drools, читающий шаблон и данные базы данных.

Я смог настроить один элемент как шаблон, но не несколько в одном правиле.

Просьба предложить.

+0

взгляните на это, это может вам помочь .... http://opensourcesoftwareandme.blogspot.in/2015/08/dynamically-create-rules-using-drools.html – piyushj

+0

Итак, если я правильно понимаю, Мне нужно вернуть реализацию toString(), которая в конечном итоге заменит свойство одного шаблона как несколько условий. Я имею в виду, что если я смогу сохранить карту «Физики» против ListOfFeatures, то при получении списка у меня будет реализация toString(), которая объединит функции (с новой строкой), чтобы сформировать полный FeatureSet для шаблона , –

+0

yes true, дайте мне знать, если это поможет – piyushj

ответ

0

Примитивным решением было бы определить n шаблонов, для 1, 2, ... n строк для каждого правила/имени паттерна.

Для более разумного решения необходимо знать цель этих правил. Какое имя функции должно быть добавлено в глобальный список и почему?

+0

Как мы можем сгруппировать эти отдельные шаблоны, чтобы сформировать одно правило. Say 'Feature (subjectName ==" Math ", rating> = 9)' находится в шаблоне1 и 'Feature (subjectName ==" Physics ", rating> = 9)' находится в template2. Но вместе они образуют правило ** «Физика» **. Не могли бы вы привести пример. –

+0

Эти два примера не являются двумя шаблонами, это два * экземпляра * одного шаблона, причем имя субъекта и рейтинговое значение являются параметрами для экземпляра. - Возможно, вы ответите на мой вопрос - поскольку я не вижу цели этих правил. – laune