直接从存储库加载Drools / KIE Workbench工件
我们尝试使用所有新的KIE工作台(以前称为Guvnor)和新的基于Maven的工件切换到Drools 6。
现在,我想使用第二篇图片中的博客文章中描述的系统(“部署”):通过HTTP从工作台存储库中加载规则(虚线箭头,从左侧的HTTP直接进入应用程序) 。
问题是,我不知道如何将工件加载到我的KieServices /
KieModule对象中。我基本上不想使用maven,也不能提供settings.xml
Java参数作为全局参数来提供maven的路径,因此没有此选项。
我认为,类似的问题是这一个。如此处所述,我还尝试加载URL资源,但问题似乎是系统无法确定ResourceType
给定URL(http://localhost:8080/kie-
drools/maven2/.../-1.0.0.jar)的类型。是的,我可以直接从浏览器访问存储库中的.jar,而无需进行身份验证。
任何想法或教程如何做到这一点?
我的测试代码:
public static void main(String[] args) { KieServices ks = KieServices.Factory.get();
KieRepository repo = ks.getRepository();
String url = "http://localhost:8080/kie-drools/maven2/de/test/test/1.0.0/test-1.0.0.jar";
Resource urlResource = ks.getResources().newUrlResource(url);
KieModule kModule = repo.addKieModule(urlResource); // this already fails
}
错误:
Exception in thread "main" java.lang.RuntimeException: Unable to fetch module from resource :[UrlResource path='http://localhost:8080/kie-drools/maven2/de/itm/Herma400/1.0.1/Herma400-1.0.1.jar'] at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:205)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.addKieModule(KieRepositoryImpl.java:161)
at kieTest.MainKieTest.main(MainKieTest.java:24)
Caused by: java.lang.NullPointerException
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.getPomProperties(ClasspathKieProject.java:197)
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:148)
at org.drools.compiler.kie.builder.impl.ClasspathKieProject.fetchKModule(ClasspathKieProject.java:109)
at org.drools.compiler.kie.builder.impl.KieRepositoryImpl.getKieModule(KieRepositoryImpl.java:190)
... 2 more
提前致谢!
回答:
我终于设法解决了这个问题。下面是一个工作示例,该示例通过HTTP从KIE存储库加载Drools工件并执行规则:
package kieTest;import java.util.Scanner;
import org.drools.compiler.kproject.ReleaseIdImpl;
import org.kie.api.KieServices;
import org.kie.api.builder.KieScanner;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.StatelessKieSession;
public class MainKieTest {
public static void main(String[] args) {
// works even without -SNAPSHOT versions
String url = "http://localhost:8080/kie-drools/maven2/de/test/Test/1.2.3/Test-1.2.3.jar";
// make sure you use "LATEST" here!
ReleaseIdImpl releaseId = new ReleaseIdImpl("de.test", "Test", "LATEST");
KieServices ks = KieServices.Factory.get();
ks.getResources().newUrlResource(url);
KieContainer kieContainer = ks.newKieContainer(releaseId);
// check every 5 seconds if there is a new version at the URL
KieScanner kieScanner = ks.newKieScanner(kieContainer);
kieScanner.start(5000L);
// alternatively:
// kieScanner.scanNow();
Scanner scanner = new Scanner(System.in);
while (true) {
runRule(kieContainer);
System.out.println("Press enter in order to run the test again....");
scanner.nextLine();
}
}
private static void runRule(KieContainer kieKontainer) {
StatelessKieSession kSession = kieKontainer.newStatelessKieSession("testSession");
kSession.setGlobal("out", System.out);
kSession.execute("testRuleAgain");
}
}
搜索解决方案时,我发现以下链接很有帮助:
- http://blog.athico.com/2013/12/deployment-with-drools-60.html
我希望有人将SO作为第一个搜索结果时会觉得有用;-)
以上是 直接从存储库加载Drools / KIE Workbench工件 的全部内容, 来源链接: utcz.com/qa/414605.html