Проблема с созданием DSL и бизнес-правил в Drools - PullRequest
0 голосов
/ 17 июня 2010

Я использую Eclipse с плагином Drools для создания правил. Я хочу создать бизнес-правила, и главная цель - попытаться предоставить пользователю набор параметров, которые он может использовать для создания правил. Например: если у Apple может быть только 3 цвета: я хочу предоставить опцию, например раскрывающийся список, чтобы пользователь мог заранее знать, какие опции он может использовать в своих правилах. Является ли это возможным? Я создаю dsl, но не могу предоставить вышеуказанную функциональность для бизнес-правила. У меня возникла ошибка при реализации базового DSL также. Код для добавления dsl выглядит следующим образом в моем классе RuleRunner ()

InputStream ruleSource = RuleRunner.class.getClassLoader (). GetResourceAsStream ("/ Rule1.dslr");

InputStream dslSource = RuleRunner.class.getClassLoader (). GetResourceAsStream ("/ sample-dsl.dsl");

// Загрузка правил, используя DSL

addRulesToThisPackage.addPackageFromDrl ( новый InputStreamReader (ruleSource), новый InputStreamReader (dslSource));

В моем рабочем каталоге есть и sample-dsl .dsl, и Rule1.dslr.

Ошибка при добавлении dsl в пакет (последняя строка)

стек ошибок:

Исключение в потоке "main" java.lang.NullPointerException

  at java.io.Reader.<init>(Unknown Source)

  at java.io.InputStreamReader.<init>(Unknown Source)

  at com.org.RuleRunner.loadRuleFile(RuleRunner.java:96)

  at com.org.RuleRunner.loadRules(RuleRunner.java:48)

  at com.org.RuleRunner.runStatelessRules(RuleRunner.java:109)

  at com.org.RulesTest.main(RulesTest.java:41)

Мой файл DSL имеет базовое отображение в соответствии с онлайн-документацией.

Правило dsl, которое я создал:

экспандер sample-dsl.dsl

правило "Статус изменяет статус B"

  when

        There is an A

           -        has an address

         There is a B

             - has name

  then

        - print updated A and Aaddress

Конец

Я создал DSL в затмении.

Правильный ли код, который я добавил для загрузки в мой пакет? Или я что-то упустил ????

Кажется, моя программа не может найти dsl?

Пожалуйста, помогите. Можете ли вы указать мне правильное направление для создания удобного бизнес-правила ??

Спасибо.

1041 * J *

1 Ответ

1 голос
/ 02 июля 2010

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

KnowledgeBase kBase = KnowledgeBaseFactory.newKnowledgeBase(<KnowledgeBaseConfiguration>);
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add( ResourceFactory.newClassPathResource( "rules/myRuleFile.drl", getClass() ),
              ResourceType.DRL );
kbuilder.add( ResourceFactory.newClassPathResource( "rules/myDslFile.dsl", getClass() ),
              ResourceType.DSL );
if ( kbuilder.hasErrors() ) {
    System.err.println( builder.getErrors().toString() );

}
kbase.addKnowledgePackages( kbuilder.getKnowledgePackages() );

Теперь что касается предоставления вашегопользователи имеют возможность создавать файлы правил со встроенными ограничениями, вы смотрели на Drools Guvnor? (http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-guvnor/html_single/index.html) Я еще не включил его в свой проект, но немного исследовал. Я думаю, что он может обеспечитьфункциональность, которую вы ищете, позволяя пользователям создавать и редактировать файлы правил. Удачи!

...