当前位置: 首页 > 知识库问答 >
问题:

没有Maven的流口水Kie应用程序

谢豪
2023-03-14

作为一名开发人员,我想创建一个Maven项目,并构建一个可执行的独立JAR应用程序。(无Spring启动)

在开发和构建过程中,我想添加一个Drools Kie工件作为依赖项

<dependency>
 <groupId>com.mycompany</groupId>
 <artifactId>mydrools</artifactId>
 <version>[1.0.0,)</version>
</dependency>

将我的应用程序构建为可执行Jar并运行它。我的应用程序具有调用Drools引擎的代码:

KieSession kSession = kContainer.newKieSession();
kSession.insert(myBean);
kSession.fireAllRules();

最重要的是,在我将应用程序部署到生产环境时:

  • 我不想在我的正式服上安装Maven
  • 我不希望我的应用程序扫描本地或远程Maven存储库
  • 我希望我的应用程序自动定期扫描我的DroolsKie工件的新版本,而无需任何Maven存储库的引用,只需查看文件系统

我已经尝试过了

String fileName = System.getenv("HOME") + "/libs/mydrools-1.0.0.jar";
File file = new File(fileName);
KieRepository kieRepository = ks.getRepository();        
KieContainer kContainer = ks.newKieContainer(ks.newReleaseId("com.mycompany", "mydrools", "1.0.0"));
kieRepository.addKieModule(ks.getResources().newFileSystemResource(file));
KieScanner kScanner = ks.newKieScanner( kContainer );
kScanner.start( 10000L );

加载JAR可以很好地工作,但似乎我还必须至少配置一个最小的Maven存储库(~/.m2文件夹和一个settings.xml)。我从组织那里得到了一堆错误。阿帕奇。maven插件和相关类。

当然,我不希望我的生产环境依赖或依赖任何Maven配置。我只想用另一个JAR(例如libs/mydrools-1.0.0.JAR)作为依赖项运行一个JAR,并在更新libs/mydrools-1.0时动态地重新加载该依赖项。0.jar。

基本上我需要设置内部Drools Kie Maven插件完全禁用(离线)。

如何使用Drools 6.2实现这一点。0.决赛?

最新消息

这个问题与

完全离线使用Drools 6 Maven架构

http://lists.jboss.org/pipermail/rules-users/2014-June/036245.html

共有2个答案

柯书
2023-03-14

从架构上讲,您有三种规则部署模型:

模型#1是一种动态规则更新模式。在5.3中,它通过http(现在是6.0)拉取编译

你可以用扫描仪

模型2是一个不变的规则模型。因此,概念是将规则作为资源嵌入到应用程序中,它们无法更新。这适用于不可变的部署,如CD管道和容器/docker部署,这些部署需要测试应用程序的当前状态。说到容器不禁止动态更新选项,我是从纯体系结构的角度讲的。为此,请从DEP中省略kie ci,并使用“getKieClasspathContainer()”(正如whomer所说)从resources文件夹加载规则,并且在不重新部署应用程序的情况下,它将永远不会尝试更新。

Model#3是一种集中式的“服务器”模式(由于使用有限,我只是为了完整起见才添加它)。它是您在应用程序运行时之外集中执行规则的地方,IBM的规则(和营销)引擎使之流行。但是,对于大多数用例来说,它都是次优的,除非在托管服务类型的应用程序中,您希望交叉收费。它不能随应用程序自然扩展,实体必须通过网络进行反序列化,因此性能较差等等。。但是,您确实可以获得中央日志记录。

安聪
2023-03-14

答案是你没有。KIE 6。*(7)内置了maven,KieScanner类使用maven查找更新。如果在ReleaseId中指定一个版本范围,例如[1.0.0,],扫描仪将工作得更好

我的公司正在将基于KIE的应用程序部署到生产环境中。我们正在PROD中建立一个Artifactory存储库,还将有一个maven存储库。

您可以通过不使用KieScanner来禁用maven部分,而是使用getKieClasspathContainer()来获取KIE容器。不过,您不会对规则进行动态更新。

KIE还提供了一个执行服务器,将规则推送到RESTAPI中。执行服务器规则也可以通过maven更新。

 类似资料:
  • 问题内容: 这是我的流口水验证问题的第二部分。第一部分已经回答,我的代码中已经实现了建议的解决方案。 这是我的java类结构 好的,我的问题是,如果FinanceItemName为“土地或建筑物”,并且该用户的地址符合以下条件,则我需要验证FinanceDetails实例的itemValue, AddressStatus ==当前 AddressType ==物理 AddressUseType =

  • 我不太会流口水和咕噜。 我有一个关于规则流的基本问题。 我在guvnor插件上使用引导编辑器创建了3条规则。现在我想根据第一条规则的结果调用第二条或第三条规则。 e、 g.如果患者年龄小于18岁,则进行第二条规则的小检查,否则请调用第三条规则由高级医生进行检查。 那么,这可以通过使用规则流来实现吗?如果是,如何?是否有任何示例链接和文档来演示它?非常感谢您的帮助。 谢啦

  • 我使用的API接受单个AKKA接收器,并用数据填充: 有没有一种方法,在不深入阿卡的深度的情况下,用两个汇而不是一个汇来处理输出? 例如 如果我可以访问方法使用的Flow,我可以使用,但流不会公开。 目前唯一的解决方法是将一个处理字符串的水槽传递给两个StringBuilder,以替换,但这似乎违背了AKKA的观点。如果不花几天时间学习AKKA,我就不知道是否有办法将输出从接收器中分离出来。 谢谢

  • 我有一个drl文件,它在两个规则流组中包含规则:“第一个规则流组”和“第二个规则流组”。这些组的激活取决于“规则A”和“规则B”。是否有任何方法可以停用规则B,以便在规则A条件匹配时触发,从而仅将焦点设置为“第一个规则流组”?

  • 我正在使用Spring MVC和Drools expert。spring版本4.0。0 drools版本(6.0.1) 我正在使用RAD 8和WAS 8 应用程序启动失败,出现异常(见下文) spring集成在批处理模式下工作正常。当我从web应用程序调用它时,当我将kie后处理器添加到应用程序上下文时,web应用程序就会失败。 这是堆栈跟踪。

  • 我在Scala/Spark中有一个批处理作业,它根据一些输入动态创建Drools规则,然后评估规则。我还有一个与要插入到规则引擎的事实相对应的输入。 到目前为止,我正在一个接一个地插入事实,然后触发关于这个事实的所有规则。我正在使用执行此操作。 seqOp运算符的定义如下: 以下是生成的规则的示例: 对于同一RDD,该批次花了20分钟来评估3K规则,但花了10小时来评估10K规则! 我想知道根据事