Привязка сообщений и сигналов активности к сообщениям JMS

У меня есть два вопроса о Activiti BPMN:

1) Как программно анализировать определения сообщений

2) Как программно перехватывать события IntermediateThrowEvent.

Я работаю над проектом, в котором будет использоваться встроенный механизм Activiti BPMN (в настоящее время версия 5.11). В настоящее время приложение управляется отправкой и получением сообщений JMS, и я подумал, что было бы естественным представить их как сообщения и сигналы Activiti. Приложение должно включать множество отдельных JVM, каждая из которых работает с одним механизмом BPMN с различными процессами для отправки и получения сообщений друг от друга.

У меня есть несколько мыслей о том, как реализовать каждый сценарий, но я не уверен, как анализировать сообщения из моего процесса BPMN для реализации варианта 2a, и я не уверен, как перехватить middleThrowEvent для реализации варианта 1b:

а) Получение сообщений:

Вариант 1a — подпишитесь на одну тему, куда приходят все сообщения JMS, и поместите сообщение Activiti или имя сигнала Activiti в сообщения JMS в качестве полезной нагрузки. Когда приходит сообщение JMS, я могу затем запросить каждый механизм, чтобы увидеть, какие текущие выполнения подписываются на сообщения и какие процессы необходимо запустить:

List<ProcessDefinition> pds= repositoryService.createProcessDefinitionQuery()
  .messageEventSubscription("messageNameInsideJMSPayload")
  .list();

for (ProcessDefinition pd: pds) 
{
    RunBPMProcess.runtimeService.startProcessInstanceByMessage(messageName, 
    di.getId().toString(), processVariables);
}

Вариант 2а. Подпишитесь на динамическую тему, которая напрямую соответствует имени сообщения Activiti или имени сигнала активности. Сложность здесь заключается в том, как проанализировать сообщение или имя сигнала из процесса BPMN. Мне удалось проанализировать ссылку на сообщение с помощью пользовательского BpmnParseListener, но я могу получить только ссылку на сообщение, а не имя сообщения из реализации.

pec = ProcessEngineConfiguration.createStandaloneProcessEngineConfiguration();
  if (pec instanceof ProcessEngineConfigurationImpl)
  {

    List<BpmnParseListener> preParseListeners = new ArrayList <>();

    preParseListeners.add(new BPMNMessageAndSignalParser(pontus));


    ((ProcessEngineConfigurationImpl) pec).setCustomPreBPMNParseListeners(preParseListeners );


  }

б) Отправка сообщений:

Вариант 1b) Я хотел бы в идеале перехватить IntermediateThrowEvent, чтобы я мог отправить сигнал в виде сообщения JMS, но я не уверен, как это сделать.

Я новичок в Activiti, поэтому прошу прощения, если пропустил что-то очевидное; Кроме того, вот пример рабочего процесса, чтобы помочь поставить проблему в контекст:

<?xml version="1.0" encoding="UTF-8" ?>
<definitions id="definitions"
             targetNamespace="http://activiti.org/bpmn20" 
             xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xmlns:activiti="http://activiti.org/bpmn">
  <message id="pontusMessage" name="pontusMessage"/>
  <signal id = "pontusSignal" name="pontusSignal"/>
  <process id="test" name="PontusNetworks Test"  isExecutable="true">

    <startEvent id="start"/>

    <sequenceFlow id="flow1" sourceRef="start" targetRef="messageReceiver" />

    <intermediateCatchEvent id="messageReceiver">
        <messageEventDefinition messageRef="pontusMessage" />
    </intermediateCatchEvent>

    <sequenceFlow id="flow2" sourceRef="messageReceiver" targetRef="signalSender">
    </sequenceFlow>


    <intermediateThrowEvent id="signalSender">
        <signalEventDefinition signalRef="pontusSignal" />
    </intermediateThrowEvent>
    <sequenceFlow id="flow3" sourceRef="messageReceiver" targetRef="theEnd2"/>

    <endEvent id="theEnd2" />

  </process>

</definitions>

Заранее спасибо за любые идеи.


person Leo    schedule 17.12.2012    source источник


Ответы (1)


Как программно анализировать определения сообщений

Я не уверен, что вы имели в виду, но, по-видимому, у Activiti есть механизм уведомления при анализе XML-определения процесса BPMN. Это позволяет подключить прослушиватель, который будет уведомлен о нескольких событиях.

Я написал интересный пост об этом . Конечно, центр уведомлений — это то, что мы действительно хотели бы видеть в будущих версиях.

person RoiG    schedule 22.12.2012