Optaplanner与Drools Workbench集成

时间:2015-05-12 17:45:51

标签: drools optaplanner kie-workbench

我有一个基于Optaplanner的应用程序(基于Web),它从类路径中的静态.drl文件中读取评分约束以进行解决。但是,我现在正试图让客户通过Drools Workbench产品创建/更改规则。我没有找到任何与使用Workbench创建的规则集成到我的应用程序相关的文档或示例。据我所知,Workbench的输出是一个jar文件。

  • 如何在Optaplanner中动态使用该jar来解决jar文件中的规则?
  • 我有什么例子吗?

我读过Geoffrey De Smet(http://www.optaplanner.org/blog/2014/04/17/PutTheUserInControlOfTheScoreConstraints.html)的这篇博客文章,他建议他将在未来的帖子中展示,但还没有。这正是我正在寻找的。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

过了一会儿,我能够读取包含规则文件和事实对象的jar文件,然后使用它们来解决计划。所以,在提供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。希望这可以帮助其他人在正确的地方开始。

答案 1 :(得分:1)

我认为杰弗里概述了here in the manual的指示。

我自己还没有尝试过(但是)但我认为你必须添加jar(其中包含kmodule.xml)作为依赖项。我相信你可以直接添加它或指定maven依赖。包含jar后,您可以使用

检索KieBase
KieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
KieBase kBase1 = kContainer.getKieBase("KBase1");
solverFactory.getSolverConfig().getScoreDirectorFactoryConfig.setKieBase(kBase1 );