i具有基于optaplanner的应用程序(基于Web),并且它从类Path的静态.DRL文件的评分约束中读取以求解。但是,我现在试图允许客户通过Drools Workbench产品创建/更改规则。我无法找到与使用Workbench创建的规则相关的任何文档或示例,该文件或示例使用Workbench创建的规则。据我所知,工作台的输出是一个JAR文件。
- 如何在optaplanner中动态使用该罐子来解决JAR文件中的规则?
- 我是否缺少任何例子?
我阅读了Geoffrey de Smet的这篇博客文章(http://www.optaplanner.org/blog/2014/04/04/17/puttheuserincontrolofthescoreconstraints.html)然而。这正是我要寻找的。感谢您的帮助!
一段时间后,我能够在包含规则和事实对象的JAR文件中读取,然后将其用于求解计划。因此,在提供罐子文件的情况下,这是对我有用的代码。
String url = "http://<enter url to service endpoint serving jar file here>";
KieServices ks = KieServices.Factory.get();
KieRepository kr = ks.getRepository();
UrlResource urlResource = (UrlResource) ks.getResources().newUrlResource(url);
InputStream is = urlResource.getInputStream();
Resource rs = ks.getResources().newInputStreamResource(is);
KieModule kModule = kr.addKieModule(rs);
KieContainer kContainer = ks.newKieContainer(kModule.getReleaseId());
KieBase kbase = kContainer.getKieBase("<kbase name here>");
// solver factory injected
solverFactory.getSolverConfig().getScoreDirectoryFactoryConfig().setKieBase(kbase);
Solver solver = solverFactory.buildSolver();
我在kmodule.xml文件中使用不同的kbase定义指向包含正确规则文件的正确软件包,因此在kmodule中有多个kbase。希望这可以帮助其他人在正确的位置开始。
我认为Geoffrey在手册中概述了说明。
我还没有自己尝试过(),但我认为您必须将罐子(其中包含在kmodule.xml中)作为依赖性。我相信您可以直接添加它或指定Maven依赖性。包含罐子后,您可以使用
检索KiebaseKieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
KieBase kBase1 = kContainer.getKieBase("KBase1");
solverFactory.getSolverConfig().getScoreDirectorFactoryConfig.setKieBase(kBase1 );