2015-12-04 4 views
0

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

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

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

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

2 вопроса: -

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

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

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

ответ

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

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

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