Деревья решений и механизмы правил (Drools)

В приложении, над которым я сейчас работаю, мне нужно периодически проверять соответствие десятков тысяч объектов какой-либо услуге. Сама диаграмма решений имеет следующий вид, чуть больше: Decision diagram

В каждом из конечных узлов (кружков) мне нужно выполнить действие (изменить поле объекта, информацию журнала и т. Д.). Я пробовал использовать фреймворк Drool Expert, но в этом случае мне нужно было бы написать длинное правило для каждого пути на диаграмме, ведущего к конечному узлу. Drools Flow, похоже, тоже не создан для такого случая - я беру объект и затем, в зависимости от принятых решений, попадаю в один из конечных узлов; а затем снова для другого объекта. Или это? Не могли бы вы дать мне несколько примеров / ссылок на такие решения?

ОБНОВЛЕНИЕ:

Вызовы Drools Flow могут выглядеть так:

// load up the knowledge base
KnowledgeBase kbase = readKnowledgeBase();
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
Map<String, Object> params = new HashMap<String, Object>();

for(int i = 0; i < 10000; i++) {

    Application app = somehowGetAppById(i);

    // insert app into working memory
    FactHandle appHandle = ksession.insert(app);

    // app variable for action nodes
    params.put("app", app);

    // start a new process instance
    ProcessInstance instance = ksession.startProcess("com.sample.ruleflow", params);
    while(true) {
        if(instance.getState() == instance.STATE_COMPLETED) {
            break;
        }
    }

  // remove object from working memory
    ksession.retract(appHandle);
}

То есть: я бы взял объект Application и запустил для него новый процесс, когда процесс завершен (последний узел действия каким-то образом изменит приложение), я бы удалил объект из рабочей памяти и повторил процесс для нового объекта App. Что вы думаете об этом решении?

РЕШЕНИЕ:
I ' В итоге я использовал Drools Flow, и он работал нормально. Мой процесс принятия решений не так прост, как требует Drools Expert, и в зависимости от того, где в дереве решений находится процесс, он должен загружать списки объектов из базы данных, преобразовывать их, принимать решения, регистрировать все и т. Д. Я использую объект Process который передается процессу в качестве параметра и хранит все мои глобальные переменные (для процесса) и некоторые удобные методы, которые повторяются в разных точках дерева (например, написание кода Java в узлах Script Task isn Не очень удобная сама по себе). Я также в конечном итоге использовал Java для принятия решений (а не mvel или правила) - это быстрее и, я бы сказал, легче контролировать. Все объекты, с которыми я работаю, передаются как параметры и используются в коде как обычные переменные Java.

9
задан John Manak 6 May 2011 в 12:08
поделиться