В потоке процесса Camunda я пытаюсь получить доступ к переменным, созданным внутри потока RabbitMQ onMessage ... Короче говоря, у меня есть потребитель RabbitMQ, который слушает очередь, один раз сообщение публикуется в очередь, onMessage выполняется, и внутри этого onMessage я запускаю процесс BPMN.Camunda BPMN - доступ к переменным внутри потока
@Component("MyProcessor")
public class MyProcessor implements ChannelAwareMessageListener {
public final void onMessage(Message message, Channel channel){
// create some variables based on the message
....
// do some database lookups based on the message
....
// enrich message based on some other factors
....
SomeService service = new SomeService(message);
if (service.isThisOrThatEnabled()){
System.out.println("Yes, it's enabled");
}
....
runtimeService.startProcessInstanceByKey("ABC");
....
}
}
Таким образом, исходя из входящего сообщения, я устанавливаю определенные переменные с областью действия, которая не выходит за пределы onMessage.
Когда я звоню задачу службы или использовать выражение внутри задачи службы в Camunda:
${MyProcessor.isThisOrThatEnabled() == true}
Это, очевидно, вызывать синглтон аннотированный с @Component и не имеет доступа к фактическому сообщению в OnMessage. Если MyProcessor.isThisOrThatEnabled обертывает service.isThisOrThatEnabled, я, вероятно, получу исключение нулевого указателя, поскольку служба не инициализируется при создании Singleton, только внутри потока onMessage.
Так подытожить мой вопрос, как получить доступ к переменным в BPMN, которые находятся внутри нить ...
1: Если одиночки являются неправильным способом доступа к переменным в потоке, как еще я должен быть доступ к ним? Можно ли внедрить экземпляр SomeService в поток BPMN?
2: Если служебные задачи являются неправильным компонентом, который будет использоваться для доступа к этим переменным, какой компонент я должен использовать вместо этого?
Это прекрасно работает, спасибо торбен! –