Optaplanner 与 Drools 集成 Workbench
Optaplanner Integration with Drools Workbench
我有一个基于 Optaplanner 的应用程序(基于 Web),它从类路径中的静态 .drl 文件读取评分约束以解决问题。但是,我现在正试图让客户通过 Drools Workbench 产品 create/change 规则。我没有找到与将使用 Workbench 创建的规则集成到我的应用程序相关的任何文档或示例。据我所知,Workbench 的输出是一个 jar 文件。
- 如何在 Optaplanner 中动态使用该 jar 来解决 jar 文件中的规则?
- 有没有我遗漏的例子?
我阅读了 Geoffrey De Smet (http://www.optaplanner.org/blog/2014/04/17/PutTheUserInControlOfTheScoreConstraints.html) 的博客 post,他建议他将来 post 进行演示,但还没有。这正是我要找的。感谢您的帮助!
我认为杰弗里概述了说明 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 );
一段时间后,我能够读取包含规则文件和事实对象的 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。希望这可以帮助其他人从正确的地方开始。
我有一个基于 Optaplanner 的应用程序(基于 Web),它从类路径中的静态 .drl 文件读取评分约束以解决问题。但是,我现在正试图让客户通过 Drools Workbench 产品 create/change 规则。我没有找到与将使用 Workbench 创建的规则集成到我的应用程序相关的任何文档或示例。据我所知,Workbench 的输出是一个 jar 文件。
- 如何在 Optaplanner 中动态使用该 jar 来解决 jar 文件中的规则?
- 有没有我遗漏的例子?
我阅读了 Geoffrey De Smet (http://www.optaplanner.org/blog/2014/04/17/PutTheUserInControlOfTheScoreConstraints.html) 的博客 post,他建议他将来 post 进行演示,但还没有。这正是我要找的。感谢您的帮助!
我认为杰弗里概述了说明 here in the manual。
我自己(还)没有尝试过,但我认为您必须添加 jar(其中包含 kmodule.xml)作为依赖项。我相信您可以直接添加它或指定 Maven 依赖项。包含 jar 后,您可以使用
检索 KieBaseKieServices kieServices = KieServices.Factory.get();
KieContainer kContainer = kieServices.getKieClasspathContainer();
KieBase kBase1 = kContainer.getKieBase("KBase1");
solverFactory.getSolverConfig().getScoreDirectorFactoryConfig.setKieBase(kBase1 );
一段时间后,我能够读取包含规则文件和事实对象的 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。希望这可以帮助其他人从正确的地方开始。