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

在JBPM服务器加载过程中从数据库加载Drools规则

芮化
2023-03-14

现在,我们正试图根据业务规则的需要集成Drools引擎。我们希望将所有规则存储在数据库中,这些规则将在JBPM服务器启动时(或Java VM启动时)加载。因此,规则将被加载到工作内存中,并可在需要时在JBPM流程中使用。

这里有2个问题:-

1)如何完成这一工作(从数据库加载规则,并在JBPM服务器加载时将它们放入JBPM和Drools的工作内存中)?

其思想是,一旦加载了规则,就可以根据需要访问进程中的任何地方。

另外,如果我们想用从Drools规则中获得的值更新jBPM变量,那么我们该怎么做呢?

共有1个答案

陈毅
2023-03-14

在启动时,您可以通过从数据库加载资源、将字符串转换为字节数组并创建知识库来实现这一点:

    Resource workflowResource = ResourceFactory.newByteArrayResource(workflowBpmnByteArray);
    Resource rulesResource = ResourceFactory.newByteArrayResource(resourceByteArray);

    KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
    knowledgeBuilder.add(workflowResource, ResourceType.BPMN2);
    knowledgeBuilder.add(rulesResource, ResourceType.DRL);

    KnowledgeBaseConfiguration config = KnowledgeBaseFactory.newKnowledgeBaseConfiguration();
    KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase("knowledgeBase", config);
    knowledgeBase.addKnowledgePackages(knowledgeBuilder.getKnowledgePackages());

请记住,将资源添加到知识构建器将导致它们被编译,因此在创建知识库之前应该检查错误。

生成的知识库可以缓存在内存中,并用于在应用程序中创建流程实例。

 类似资料:
  • 问题内容: 在启动时如何从数据库表中加载规则并从Drools 6.2.0中的同一表中更新规则呢?我找到了一个使用Drools 5 的示例,我可能可以将它从Scala转换为Java,但看起来API发生了巨大变化……例如,我看不到RuleBaseFactory类。 任何样品或文件将不胜感激。 问题答案: 我不确定从哪儿拿来的。以下是在Drools 5.3(可能更早)至5.6中的完成方式: 省略号指示用

  • 问题内容: 我在将服务中的数据填充到视图中时遇到问题。我有这样定义的服务 和我的控制器 如果我从控制器使用$ http.get,数据将很好地填充,但是,如果我尝试从服务中调用数据,那么我什么也不会得到。我知道查询是异步的,但是我很难理解一旦返回数据就如何填充$ scope变量。我可以使用$ rootscope广播事件并在控制器中侦听它,但这似乎并不是完成此事件的正确方法。对于如何正确执行此操作的任

  • 我在我的项目中使用drools,并假设它有100条规则。我有两个流程(通常它有开始节点- 现在我使用第一个进程流的kiesation和调用start进程,我看到它加载了所有100条规则而不是只有50条,并给我编译和运行时错误。所以请帮助我理解为什么来自不同规则流组的规则在一个流程中执行,这些规则与它的规则流组无关?我在加载条件时看到了所有这些。

  • 我使用Drools 7作为规则引擎。最初,我使用以下代码从类路径加载规则,以构建无状态KieSession: 然后我决定从DB加载规则,下面是代码: 令我担心的是,KnowledgeBuilder界面位于一个内部包(“org.kie.internal”)中。 当使用“公共”API从DB加载规则时,是否有其他方法构建无状态KieSession?

  • 我们目前正在将jBPM(7.37.final)规则部署到一个Kie执行服务器,并使用执行服务器自动公开的REST API调用规则。 但是由于一些体系结构的限制,我们不能使用REST API调用规则。该选项是执行一个基于jar(kie服务器客户机或其他)的集成,并从客户机(java应用程序)远程调用执行服务器上的规则。 Virges Vinay

  • 我正在研究一个血液供应链的模拟,并创建和导入了一些表来管理各种代理群体的主数据,如血液处理中心、检测中心、医院等。这些表包含所述代理的名称和lat/lon坐标。 这些表都是MySQL数据库的一部分,我用它的接口连接到AnyLogic,正如我所说,导入了这些表。到目前为止还不错,但是,当我想为每个数据库条目创建代理群体并将代理的参数分配到表的各个字段时,AnyLogic不能将名称(在MySQL中为V