没有 Maven 的 Drools Kie 应用程序
Drools Kie application without Maven
作为一名开发人员,我想创建一个 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 存储库
- 我希望我的应用程序自动定期扫描我的 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 和另一个 JAR(例如 libs/mydrools-1.0.0.jar)作为依赖项,并可能在我更新 libs/mydrools-1.0 时动态重新加载该依赖项。 0.jar.
基本上我需要将内部 Drools Kie Maven 插件设置为完全禁用(离线)。
如何使用 Drools 6.2 执行此操作。0.Final?
更新
此问题与
密切相关
Using Drools 6 Maven architecture completely offline
http://lists.jboss.org/pipermail/rules-users/2014-June/036245.html
答案是你不知道。 KIE 6.*(和 7)内置了 maven,KieScanner class 使用 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),它从 maven 存储库(如果您愿意,可以为 PROD 提供专用的 maven 存储库)中提取规则(通过 kie-ci 通过 maven aether) ).如果你使用这个模型,那么你需要 kie-ci 作为依赖,它会神奇地在引擎盖下使用 maven。
您可以使用扫描器并配置一个没有 <servers>
的 Maven settings.xml
,因此它应该只从生产服务器 ~/.m2
文件夹中提取, 允许您部署到服务器文件系统并使用 OOTB 扫描器,而没有任何从外部拉取的危险。
模型 #2 是一个不可变的规则模型。 所以概念是您将规则作为资源嵌入到应用程序中,它们无法更新。这适用于不可变部署,例如 CD 管道和需要测试应用程序当前状态的 container/docker 部署。话虽如此,容器并不禁止动态更新的选项,但我是从纯粹的架构角度讲的。为此,请从 deps 中省略 kie-ci 并使用 'getKieClasspathContainer()'(如谁所说)从资源文件夹加载规则,并且它永远不会尝试在不重新部署应用程序的情况下进行更新。
模型 #3 是一种集中式 "server" 模式(由于用途有限,我只是为了完整性而添加它)。它是您在应用程序运行时之外集中执行规则的地方,因 IBM 的规则(和营销)引擎而流行。但是,对于大多数用例而言,它的性能较差,但在您想要交叉收费的托管服务类型应用程序中除外。它不会随着应用程序自然扩展,实体必须通过网络 de/serialized 因此性能很差等等。但是你确实得到了中央日志记录。
作为一名开发人员,我想创建一个 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 存储库
- 我希望我的应用程序自动定期扫描我的 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 和另一个 JAR(例如 libs/mydrools-1.0.0.jar)作为依赖项,并可能在我更新 libs/mydrools-1.0 时动态重新加载该依赖项。 0.jar.
基本上我需要将内部 Drools Kie Maven 插件设置为完全禁用(离线)。
如何使用 Drools 6.2 执行此操作。0.Final?
更新
此问题与
密切相关Using Drools 6 Maven architecture completely offline
http://lists.jboss.org/pipermail/rules-users/2014-June/036245.html
答案是你不知道。 KIE 6.*(和 7)内置了 maven,KieScanner class 使用 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),它从 maven 存储库(如果您愿意,可以为 PROD 提供专用的 maven 存储库)中提取规则(通过 kie-ci 通过 maven aether) ).如果你使用这个模型,那么你需要 kie-ci 作为依赖,它会神奇地在引擎盖下使用 maven。
您可以使用扫描器并配置一个没有 <servers>
的 Maven settings.xml
,因此它应该只从生产服务器 ~/.m2
文件夹中提取, 允许您部署到服务器文件系统并使用 OOTB 扫描器,而没有任何从外部拉取的危险。
模型 #2 是一个不可变的规则模型。 所以概念是您将规则作为资源嵌入到应用程序中,它们无法更新。这适用于不可变部署,例如 CD 管道和需要测试应用程序当前状态的 container/docker 部署。话虽如此,容器并不禁止动态更新的选项,但我是从纯粹的架构角度讲的。为此,请从 deps 中省略 kie-ci 并使用 'getKieClasspathContainer()'(如谁所说)从资源文件夹加载规则,并且它永远不会尝试在不重新部署应用程序的情况下进行更新。
模型 #3 是一种集中式 "server" 模式(由于用途有限,我只是为了完整性而添加它)。它是您在应用程序运行时之外集中执行规则的地方,因 IBM 的规则(和营销)引擎而流行。但是,对于大多数用例而言,它的性能较差,但在您想要交叉收费的托管服务类型应用程序中除外。它不会随着应用程序自然扩展,实体必须通过网络 de/serialized 因此性能很差等等。但是你确实得到了中央日志记录。