我正在尝试实现一个规则引擎,在持久化到数据库之前,我的业务对象必须经过这个引擎。
规则将由用户通过用户界面创建。
你能给我建议一下最好的方法来实现这一点吗?任何文档或现有工具都将是有用的。
我知道Drools,但相信drools中的规则被编码到.drl文件中,这不允许用户在任何时候动态创建规则。
发布于 2016-08-18 19:08:06
drools中的规则被编码成.drl文件,不允许用户随时动态创建规则。
Drools特别用于动态规则创建和集成,而不实际接触应用程序代码。正确的方法是使用Kie-workbench进行规则创建和管理,并在应用程序中动态加载这些规则。
规则将由用户通过用户界面创建。
实际上,对于需求,kie-workbench的工作效果最好,因为它甚至为您提供了创建和更新规则的指导GUI。
能给我建议一下实现这一点的最佳方法吗?任何文档或现有工具都将是有用的。
首先,我建议您了解一下这中如何部署工作台,如何在工作台中创建和管理规则,以及如何在Java中从工作台加载和执行规则的这。
使用自定义的规则管理接口
如果希望使用自己构建的用户界面创建规则,可以在文件系统或java类路径中部署创建的规则,甚至可以通过url公开它们。Drools提供了通过it API集成所有上述场景的方法。您可以检查下面的示例以从文件系统访问、编译和执行规则。对于从类路径或外部url加载规则,也可以采用类似的方法。
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
KieFileSystem kfs = ks.newKieFileSystem();
File file = new File("path/to/drl");
kfs.write(ks.getResources().newFileSystemResource(file)
.setResourceType(ResourceType.DRL));
KieBuilder kb = ks.newKieBuilder(kfs);
kb.buildAll();
if (kb.getResults().hasMessages(Level.ERROR)) {
throw new RuntimeException("Build Errors:\n" + kb.getResults().toString());
}
KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());
KieSession kSession = kContainer.newKieSession();
kSession.insert(fact);
kSession.fireAllRules();https://stackoverflow.com/questions/39024468
复制相似问题