Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 没有Maven的Drools Kie应用程序_Java_Maven_Drools_Drools Guvnor_Kie - Fatal编程技术网

Java 没有Maven的Drools Kie应用程序

Java 没有Maven的Drools Kie应用程序,java,maven,drools,drools-guvnor,kie,Java,Maven,Drools,Drools Guvnor,Kie,作为一名开发人员,我想创建一个Maven项目并构建一个可执行的独立JAR应用程序。(无弹簧靴) 在开发和构建过程中,我想添加一个Drools Kie工件作为依赖项 <dependency> <groupId>com.mycompany</groupId> <artifactId>mydrools</artifactId> <version>[1.0.0,)</version> </dependency

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

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

<dependency>
 <groupId>com.mycompany</groupId>
 <artifactId>mydrools</artifactId>
 <version>[1.0.0,)</version>
</dependency>
最重要的是,在我将应用程序部署到生产环境时:

  • 我不想在生产服务器上安装Maven
  • 我不希望我的应用程序扫描本地或远程Maven存储库
  • 我希望我的应用程序定期自动扫描Drools-Kie工件的新版本,而不需要参考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)。我通过org.apache.maven插件和相关类得到了大量错误

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

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

如何使用Drools 6.2.0.Final实现这一点

更新

这个问题与我们的工作密切相关


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

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

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


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

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

模型#1是一种动态规则更新模式。在5.3中,它通过http拉取编译类,现在在6&7中,它使用maven作为传输,因为它提供版本控制,并且是目前为止最丰富的工件版本控制和传输工具。在这种模式下,您有一个拉取规则的生产应用程序(jar或war)(通过kie ci通过maven Ether)从maven repo(如果您愿意,您可以为PROD提供专用的maven repo)。如果您使用此模型,那么您需要kie ci作为依赖项,它将神奇地在引擎盖下使用maven

您可以使用scanner&maven
settings.xml
配置为没有
,因此它应该只从生产服务器
~/.m2
文件夹中拉出,这样您就可以部署到服务器文件系统并使用OOTB scanner,而不会有从外部拉出的危险

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


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

我认为扫描文件系统最好由ja完成查看是否部署了新的KieBase。构建(即Drools编译)应该在开发环境中完成。(我看不到在“开发和构建过程”中“运行Drools引擎”的好理由。)很好的理由是,使用KieScanner(动态地重新加载工件)是在不中断服务(不停止、重新部署和重新启动)的情况下更新引擎的方法。但是没有人会让生产应用程序浏览(甚至是内部的)Maven存储库:我不希望Drools Kie重新加载我可能无法控制的工件(例如org.apache.*)我希望Kie只重新加载我的自定义Drools工件,而不加载Maven。只加载一个Jar文件。请注意,“运行Drools引擎”意味着运行从知识库创建的会话,将规则应用于作为事实插入的对象。那么:为什么在“开发和构建”期间“运行引擎”?好的,我的描述不准确,这是两个独立的步骤:-开发、构建和部署:我的Drools工件是要构建(以及以后)的Maven依赖项将我的可执行Jar部署到某个地方-我的可执行Jar将运行Drools引擎,然后我们回到我的原始语句:使用WatchService查看是否已部署新的KieBase。-我不确定“无服务中断”但是,新的KieBase是一套全新的规则,可以替换、添加和删除规则。在事实、议程和引擎中的所有形式的状态下,这应该如何工作?您的回答证实了我们的担忧,以及我们希望从Maven/外部jar解决方案转变为完全RESTful应用程序的原因(这
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 );