Запускать дроулы с отдельными файлами DRL

Приходится запускать дроолы для разных классов с отдельными drl файлами.

Мой первый код выглядит так:

KieServices ks = KieServices.Factory.get();
                KieContainer kContainer = ks.getKieClasspathContainer();
                KieSession kSession = kContainer.newKieSession("ksession-rules");

 for (AccessA access : listA) {
                    FactHandle fh = kSession.insert(access);

                    kSession.fireAllRules(1);
                    kSession.delete(fh);
                }

В папке правил для AccessA-AccessD есть несколько файлов drl.

Как я могу активировать эти отдельные правила для специального доступа?


person Matthias M    schedule 28.08.2015    source источник


Ответы (1)


У вас есть два варианта - но смотрите последний абзац.

Первое: создайте отдельные базы знаний и отдельные сеансы для каждой из четырех категорий «доступа».

Второе: поместите правила для четырех категорий в четыре разные группы повестки дня и установите фокус, прежде чем вставлять факты.

Но поскольку факты из четырех категорий являются объектами четырех разных классов AccessA, AccessB, AccessC и AccessD, нет причин чрезмерно усложнять эту базу правил. Шаблоны будут отражать имя класса, поэтому правила для B, C и D не будут активированы при вставке факта класса AccessA.

person laune    schedule 28.08.2015
comment
Спасибо! Как я могу вставить факт класса? Я начинаю только с кода выше, и у меня были проблемы, потому что объект соответствовал разным правилам из разных файлов drl. Должен ли я добавить код, в котором указать необходимый файл drl? - person Matthias M; 28.08.2015
comment
Если я использую группы повестки дня, я должен добавить следующий код. Это правильно? Повестка дня = ksession.getAgenda(); повестка дня.getAgendaGroup(AccessA).setFocus(); - person Matthias M; 28.08.2015
comment
Я понял, что ваши AccessA, -B, -C, -D - это разные классы Java. Если у вас нет сведений о различных классах Java, вам придется использовать группы повестки дня. - Да, это getAgenda + getAgendaGroup + setFocus. - person laune; 28.08.2015
comment
@laune В случае первого варианта слюни, похоже, дают неправильные результаты. Проблема описана здесь: groups.google.com/forum/#!topic /слюни-использование/_4aj6JTfd1M - person user; 17.02.2020