Drools:如何删除动态创建的 drl?

Drools : How to remove dynamically created drl?

我正在处理一个需要动态 add/update/remove drls 的用例。

我在这里使用规则模板(使用数据库中的数据)生成 drl 字符串,并使用以下代码添加它。

        KieServices ks = KieServices.Factory.get();
        KieRepository kr = ks.getRepository();
        KieFileSystem kfs = ks.newKieFileSystem();
        
        kfs.write("src/main/resources/" + ruleName + ".drl", drl);
        
        KieBuilder kb = ks.newKieBuilder(kfs);
        kb.buildAll();
        
        if (kb.getResults().hasMessages(Message.Level.ERROR)) {
            System.out.println(kb.getResults().toString());
        }
        KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());

我应该使用哪个 API 来删除这些 drls?

KieFileSystem 有一个 delete 方法可能是您需要的。您已经使用的 write 方法将 DRL 文件“写入”文件系统。 delete 方法删除该 DRL 文件。您需要在调用该方法时指定文件路径,因此有必要跟踪这些路径,尤其是当您有多个时。

请注意,该方法采用可变参数,因此您可以传递多个文件。

KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kfs = ks.newKieFileSystem();

// Write the file:        
kfs.write("src/main/resources/" + ruleName + ".drl", drl);

// Delete the file:
kfs.delete("src/main/resources/" + ruleName + ".drl");

来源:KieFileSystem javadoc