我需要在运行时添加.drl文件(来自S3存储桶),并将其提供给drools规则引擎
无法在运行时通过ResourceFactory.newURLResource()添加规则 此外,KnowledgeBase已弃用或无法解析 我已经尝试了文档中的所有片段 公共类规则管理器{我需要在运行时添加.drl文件(来自S3存储桶),并将其提供给drools规则引擎,drools,rule-engine,drools-guvnor,drools-kie-server,Drools,Rule Engine,Drools Guvnor,Drools Kie Server,无法在运行时通过ResourceFactory.newURLResource()添加规则 此外,KnowledgeBase已弃用或无法解析 我已经尝试了文档中的所有片段 公共类规则管理器{ public RuleRunner() { } public void runRules(String[] rules, Object[] facts) throws Exception { KnowledgeBase kbase = KnowledgeB
public RuleRunner() {
}
public void runRules(String[] rules,
Object[] facts) throws Exception {
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
for ( int i = 0; i < rules.length; i++ ) {
String ruleFile = rules[i];
System.out.println( "Loading file: " + ruleFile );
kbuilder.add( ResourceFactory.newClassPathResource( ruleFile,
RuleRunner.class ),
ResourceType.DRL );
}
Collection<KnowledgePackage> pkgs = kbuilder.getKnowledgePackages();
kbase.addKnowledgePackages( pkgs );
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
for ( int i = 0; i < facts.length; i++ ) {
Object fact = facts[i];
System.out.println( "Inserting fact: " + fact );
ksession.insert( fact );
}
ksession.fireAllRules();
}
在Drools中,现在一切都是面向jar的。因此,您需要使用新创建的规则重新构建您的KJar(它可能是一个仅写入内存文件系统的“虚拟KJar”(KieModule)。要查看示例,请查看Drools中的IncrementalComplationTest类[1]。如果搜索Drools代码库,您还可以找到其他测试类和示例。例如,此[2] [1]
[2]
String drlURL ="https://s3.amazonaws.com/somebucket4/rules.drl";
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write(ResourceFactory.newUrlResource(drlURL));
KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem);
kieBuilder.buildAll();
KieModule kieModule = kieBuilder.getKieModule();
return kieServices.newKieContainer(kieModule.getReleaseId());
}