我有一个Maven项目,其中包含.drl
个文件中的规则和另一个项目,它是一个SpringBoot
Web服务器。规则可以通过POST请求发送到服务器,然后将它们添加到Maven项目中,并且可以像从一开始就一样激活。
规则被“注意到”,因为我每次提交新规则时都会更新Maven规则项目(通过调用mvn clean install
)。
我尝试了很多配置,最合乎逻辑的镜头是下面这两个:
首先尝试:
@Bean
public KieSession kieSession() {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("ftn.bsep9","drools-spring-kjar", "0.0.1-SNAPSHOT"));
KieBaseConfiguration config = ks.newKieBaseConfiguration();
config.setOption(EventProcessingOption.STREAM);
KieBase kieBase = kContainer.newKieBase("myKBase", config);
KieSession kSession = kieBase.newKieSession();
KieScanner kScanner = ks.newKieScanner(kContainer);
kScanner.start(10000); // check for rule changes every 10 seconds
return kSession;
}
...
第N次尝试:
@Bean
public KieSession kieSession() {
KieServices ks = KieServices.Factory.get();
KieFileSystem kfs = ks.newKieFileSystem();
KieModuleModel kModule = ks.newKieModuleModel();
KieBaseModel baseModel = kModule.newKieBaseModel("defaultKieBase")
.setDefault(true)
.setEventProcessingMode(EventProcessingOption.STREAM);
baseModel.newKieSessionModel("defaultKSession")
.setDefault(true)
.setClockType(ClockTypeOption.get("pseudo"));
kfs.writeKModuleXML(kModule.toXML());
KieBuilder kieBuilder = ks.newKieBuilder( kfs ).buildAll();
System.out.println("ERRORS: " + kieBuilder.getResults().getMessages(Message.Level.ERROR).size());
KieContainer kContainer = ks.newKieContainer(ks.newReleaseId(
"ftn.bsep9","drools-spring-kjar", "0.0.1-SNAPSHOT"));
KieSession kSession = kContainer.newKieSession();
KieScanner kScanner = ks.newKieScanner(kContainer);
kScanner.start(10000); // check for rule changes every 10 seconds
return kSession;
}
感谢任何帮助,尤其是解释为什么您的代码有效而我的代码无效。 :)
注意:以下代码有效,但我无法使用over window:time(5m)
drools'表达式,因为它需要 STREAM EventProcessing
@Bean
public KieSession kieSession() {
KieServices ks = KieServices.Factory.get();
KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("ftn.bsep9","drools-spring-kjar", "0.0.1-SNAPSHOT"));
KieScanner kScanner = ks.newKieScanner(kContainer);
kScanner.start(10000);
return kContainer.newKieSession();
}
答案 0 :(得分:0)
我终于设法通过正确设置依赖项来解决问题。我正在使用6.2.0.Final
和kie-ci
工件的kie-spring
版本。我尝试过版本:7.7.0
,7.2.0
,6.5.0
和6.4.0
,但都没有。
KieSession
正在创建Bean,如下所示:
@Bean
public KieSession kieSession() {
final KieServices kieServices = KieServices.Factory.get();
final ReleaseId releaseId = kieServices.newReleaseId(groupId, artifactId, version);
final KieContainer kieContainer = kieServices.newKieContainer(releaseId);
final KieSession kieSession = kieContainer.newKieSession();
final KieScanner kieScanner = kieServices.newKieScanner(kieContainer);
kieScanner.start(10000);
log.warn(":) created a KIE Container - returning...");
return kieSession;
}
包含KIE工件版本的pom.xml文件的一部分如下:
...
<properties>
<kie.version>6.2.0.Final</kie.version>
</properties>
...
<dependencies>
...
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-ci</artifactId>
<version>${kie.version}</version>
</dependency>
<dependency>
<groupId>org.kie</groupId>
<artifactId>kie-spring</artifactId>
<version>${kie.version}</version>
</dependency>
...
</dependencies>
在此过程中有助于运行mvn dependency:tree
并检查正在使用哪些工件/项目的版本。
以下是the complete pom.xml file给我的链接。
可以找到mvn dependency:tree
生成的依赖关系树||here||。