Загрузка правил Drools из базы данных во время загрузки сервера JBPM

Мы используем jBPM для нужд нашего процесса. Однако этот jBPM процесс запускается через REST APIs из нашего Java code. Таким образом,

  • Java App был код приложения, и отсюда мы запускаем процесс jBPM с помощью API.

  • jBPM instance(JBPM 6.1) используется для выполнения потока процесса. Этот экземпляр также присутствует, но доступ к нему осуществляется удаленно.

Теперь мы пытаемся интегрировать Drools engine для нужд наших бизнес-правил. Мы хотим, чтобы все наши правила хранились в базе данных, и эти правила загружались при запуске сервера JBPM (или при загрузке виртуальной машины Java). Таким образом, правила будут загружаться в рабочую память и при необходимости будут доступны для использования в процессе JBPM.

2 вопроса здесь: -

1) Как мы это делаем (загружаем правила из базы данных и помещаем их в рабочую память JBPM и Drools сразу после загрузки сервера JBPM)?

Идея состоит в том, что после загрузки правил к ним можно обращаться в любом месте процесса по мере необходимости.

Кроме того, если мы хотим обновить переменную jBPM значением, полученным из правил Drools, которые были загружены ранее, как мы можем это сделать?


person jbdundas    schedule 04.12.2015    source источник


Ответы (1)


При запуске вы можете сделать это, загрузив ресурсы из базы данных и преобразовав строки в массивы байтов и создав базу знаний:

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

Помните, что добавление ресурсов в конструктор знаний приведет к их компиляции, поэтому перед созданием базы знаний следует проверить наличие ошибок.

Полученную базу знаний можно кэшировать в памяти и использовать для создания экземпляров процесса в приложении.

person John Scattergood    schedule 12.12.2015