gpt4 book ai didi

java - 将规则添加到现有的 KiePackage 和 KieBase

转载 作者:行者123 更新时间:2023-11-30 08:40:38 27 4
gpt4 key购买 nike

我正在尝试向已使用 KieBuilder 定义和构建的 KiePackage 添加规则。

我知道您可以使用以下方法删除规则:

base.removeRule("com.somepackage", "ruleName");

但是是否有添加规则的等价物?我尝试将新的 .drl 文件添加到 KieFileSystem 中并使用 KieScanner 获取更改,但它似乎不起作用:

KieBaseConfiguration config = service.newKieBaseConfiguration();
KieBase base = kContainer.newKieBase(config);

KieFileSystem fileSystem = service.newKieFileSystem();
KieBuilder builder = service.newKieBuilder(fileSystem);

fileSystem.write(originalDrlFile, someFile)
builder.buildAll() // first drl is loaded

fileSystem.write(newlDrlFile, someFile)

KieScanner scanner = service.newKieScanner(kContainer);
scanner.scanNow();
KieSession ksession1 = kContainer.newKieSession();

builder.buildAll() // reloading with new drl.

当我根据 ksession1 评估事实时,KieBase 中不存在新规则。我错过了什么吗?

最佳答案

private KieSession kieSession;
public void build() throws Exception {
KieServices kieServices = KieServices.Factory.get();

KieFileSystem kfs = kieServices.newKieFileSystem();
FileInputStream fis2 = new FileInputStream( "override/r2.drl" );
kfs.write( "src/main/resources/r2.drl",
kieServices.getResources().newInputStreamResource( fis2 ) );
FileInputStream fis1 = new FileInputStream( "override/r1.drl" );
kfs.write( "src/main/resources/r1.drl",
kieServices.getResources().newInputStreamResource( fis1 ) );

KieBuilder kieBuilder = kieServices.newKieBuilder( kfs ).buildAll();

Results results = kieBuilder.getResults();
if( results.hasMessages( Message.Level.ERROR ) ){
System.out.println( results.getMessages() );
throw new IllegalStateException( "### errors ###" );
}

KieContainer kieContainer =
kieServices.newKieContainer( kieServices.getRepository().getDefaultReleaseId() );

KieBase kieBase = kieContainer.getKieBase();
kieSession = kieContainer.newKieSession();
}

build 方法说明了增量构建。要添加规则,您可以再次使用包含新规则的附加 DRL 文件来完成整个过程。或者,如果您保留 KieFileSystem,您可以稍后添加 DRL 文件,再次调用 buildAll,重新创建 KieBase,等等。

关于java - 将规则添加到现有的 KiePackage 和 KieBase,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563049/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com