gpt4 book ai didi

java - 直接从存储库加载 Drools/KIE Workbench Artifact

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:42:39 28 4
gpt4 key购买 nike

我们尝试使用全新的 KIE 工作台(以前称为 Guvnor)和基于 maven 的新 Artifact 切换到 Drools 6。

现在我想使用 this blog post 中描述的系统在第二张图片中(“部署”):通过 HTTP 从工作台存储库加载规则(虚线箭头,从左侧的 HTTP 直接进入应用程序)。

问题是,我不知道如何将 Artifact 加载到我的 KieServices/KieModule 对象中。我基本上不想使用 maven,我也无法提供全局的 maven 的 settings.xml 的路径作为 Java 参数,所以这个选项没有了。

我认为类似的问题是 this one .正如那里提到的,我也尝试加载一个 URL 资源,但问题似乎是系统无法确定给定的 URL 是哪种 ResourceType (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 Artifact 并执行规则:

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");
}
}

在搜索解决方案时,我发现以下链接很有帮助:

我希望有人在将 SO 作为第一个搜索结果时发现它有用;-)

关于java - 直接从存储库加载 Drools/KIE Workbench Artifact ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21186570/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com