2016-08-18 119 views
1

我正在使用KieFileSystem.write来动态加载.drl文件。它在虚拟文件系统中写入文件的位置有关系吗?我在网上找到的所有教程似乎都建议src/main/resources/myRules.drl,据我所知,写入其他位置的规则(如myRules.drl)未被加载。在Drools中动态加载规则时的文件位置6

我想我读了Drools扫描类路径.drl文件的地方。这是否意味着当虚拟文件系统被明确创建或者虚拟文件替换物理文件系统时,它也会从物理文件系统加载文件?

规则加载是如何工作的?

我没有为我的项目使用maven顺便说一句。

+0

也许这应该有助于http://stackoverflow.com/questions/23542610/drools-6-0-dynamically-load-rules-at-runtime – piyushj

回答

0

规则很简单。您需要明确告诉drools您尝试加载的资源类型。 ResourceFactory支持的classpath资源,溪流,文件等

这里是你如何可以使用自定义的文件资源获得KieBase实例的实例。

List<Resource> resources = Arrays.asList(
    // loads file from "real" filesystem 
    ResourceFactory.newFileResource("example.drl") 
); 

KieServices kieServices = Factory.get(); 
KieFileSystem kfs = kieServices.newKieFileSystem(); 
resources.forEach(kfs::write); 
KieContainer kieContainer = 
    kieServices.newKieContainer(
     kieServices.getRepository().getDefaultReleaseId()); 

KieBaseConfiguration config = 
    Factory.get().newKieBaseConfiguration(); 
KieBase base = kieContainer.newKieBase(config);