在JBPM服务器加载期间从数据库加载Drools规则

时间:2015-12-04 14:41:58

标签: drools jbpm drools-guvnor

我们正在使用jBPM来满足我们的流程需求。但是,此jBPM进程是通过我们REST APIs的{​​{1}}触发的。因此,

  • Java code有应用程序代码,我们使用API​​从这里触发jBPM流程。

  • Java App(JBPM 6.1)正用于流程执行。此实例也在那里,但可以远程访问。

现在,我们正在尝试将jBPM instance集成到我们的业务规则需求中。我们想要的是我们将所有规则存储在数据库中,这些规则将在JBPM服务器启动时(或Java VM启动时)加载。因此,规则将被加载到工作存储器中,并在需要时可用于JBPM过程。

这里有两个问题: -

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

这个想法是,一旦加载规则,就可以根据需要在任何地方访问它们。

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

1 个答案:

答案 0 :(得分:0)

在启动时,您可以通过从数据库加载资源并将字符串转换为字节数组并创建知识库来完成此操作:

    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());

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

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