当前位置: 首页 > 面试题库 >

直接从存储库加载Drools / KIE Workbench工件

谢嘉
2023-03-14
问题内容

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

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

问题是,我不知道如何将工件加载到我的KieServices /
KieModule对象中。我基本上不想使用maven,也不能提供settings.xmlJava参数作为全局参数来提供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作为第一个搜索结果时会觉得有用;-)



 类似资料:
  • 问题内容: 我在GitLab服务器上有一个专用存储库,使用SSH可以使用git clone拉出一个项目。 但是我想直接从服务器上在Linux命令行上运行脚本(更具体地说,是Drupal / Drush .make文件) 我尝试使用原始文件运行它: (为了方便非Drupal用户,我们可以说) 没有成功。当然,它会返回登录页面。 可能吗? 问题答案: 在Chris的宝贵帮助下,您可以通过以下方法从Gi

  • 我有两个私人JFrog存储库设置。一个存储库处理发布,另一个处理快照。下面是我如何在我的设置中定义它的。xml文件。 我的多模块maven项目中的多个内部依赖项都收到了这个错误: 从外观上看,Maven似乎并没有试图联系官方的Maven Central repo以获取这些依赖项,而是在我的私有存储库上失败了。我的印象是,如果私有存储库不包含特定工件,它将尝试联系Maven Central。 从Ma

  • 有没有办法使用java或任何其他语言从maven存储库下载jar文件? 在Maven项目中,当我添加依赖项时,如果本地系统上不存在jar文件,它通常会从远程存储库下载jar文件。 有没有办法做到这一点,而不用像在库中那样使用Maven,或者构造一个URL,然后获取jar?

  • 如果我试图使用命令上传一个jar 但我在Nexus Repository Manager OSS中找不到这个选项卡。这应该在tab摘要之后,但它不在那里。

  • 我正在使用 Pyspark 尝试从 blob 存储中读取 zip 文件。我想在加载后解压缩文件,然后将解压缩的 CSV 写回 Blob 存储。 我正在遵循以下指南,该指南解释了一旦读取如何解压缩文件:https://docs.databricks.com/_static/notebooks/zip-files-python.html 但是它不能解释我是如何从blob中读取zip文件的。我有以下代码