Дроулы не могут загружать правила в Spring Boot Project

Я использую Drools 7.5.0-final в весеннем проекте Boot.

Я работаю над многомодульным проектом Gradle. Правила и kmodule.xml присутствуют в проекте подмодуля. Этот модуль упакован в виде Jar внутри толстого загрузочного Jar-файла Spring.

  <?xml version="1.0" encoding="UTF-8"?>
<kmodule xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns="http://jboss.org/kie/6.0.0/kmodule">
<!-- <configuration>
  <property key="drools.propertySpecific" value="ALLOWED"/>
</configuration> -->

<kbase name="rules.employee.tax"   packages="uk.gov.hmrc.itmp.service.application.rules.employee.tax" > 
<ksession name="rules.employee.tax.session" type="stateful"  />
<ksession name="rules.employee.tax.statelesssession" type="stateless" />
</kbase>  
</kmodule>

Я создаю контейнер из пути к классам.

KieContainer kContainer = kieService.newKieClasspathContainer();

при запуске сервера (java -jar) он загружает Kmodule.xml и печатает все kbase и sessionName.

Но когда я запускаю правила, возвращается zero rules fired.

Он отлично работает, когда я запускаю приложение весенней загрузки из Eclipse. Пожалуйста, помогите.


person Chandresh Mishra    schedule 07.02.2018    source источник
comment
есть ли кто-нибудь еще, кто получил ту же проблему? У меня есть репродуктор, если это поможет решить проблему.   -  person Chandresh Mishra    schedule 09.02.2018


Ответы (4)


Похоже, это ошибка в KieServices и Uber-файле SPring Boot. Здесь опубликован обходной путь: https://groups.google.com/forum/#!topic/drools-usage/odQjmBess5A

По сути, настройте плагин Spring Boot Maven, чтобы распаковать банки kie.

         <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <requiresUnpack>
                        <dependency>
                            <groupId>com.sample</groupId>
                            <artifactId>kproject1</artifactId>
                        </dependency>

                       <dependency>
                           <groupId>com.sample</groupId>
                           <artifactId>kproject2</artifactId>
                       </dependency>
                    </requiresUnpack>

                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
person MattTheCat    schedule 28.09.2018

Убедитесь, что у вас есть следующие зависимости

implementation group: 'org.kie', name: 'kie-api', version: '7.16.0.Final'
implementation group: 'org.drools', name: 'drools-core', version: '7.16.0.Final'
implementation group: 'org.drools', name: 'drools-compiler', version: '7.16.0.Final'
implementation group: 'org.kie', name: 'kie-spring', version: '7.16.0.Final'

и удалите зависимость spring-boot-devtools, если она у вас есть.

(Это сработало для меня.)

person Akash Chandwani    schedule 29.01.2019

При использовании spring-boot-devtools это связано с тем, что ваши факты обычно загружаются с использованием «Restart Classloader», а ваши классы Drools с использованием «Base Classloader». Поэтому объекты фактов не совпадают при выполнении ваших правил.

Я решил эту проблему, используя «Restart Classloader» для классов Drools, создав файл src/main/resources/META-INF/spring-devtools.properties в моем приложении spring-boot со следующим содержимым:

restart.include.dools=/(drools|kie)\-.*\.jar

Связанные весенние документы

person hie    schedule 08.05.2019
comment
Я не использовал devtools - person Chandresh Mishra; 12.05.2019

Это была ошибка в Drools, и она была решена в этой JIRA: https://issues.redhat.com/browse/DROOLS-2311?_sscc=t

person Chandresh Mishra    schedule 05.01.2020