Java Camunda BPMN-访问线程内的变量

Java Camunda BPMN-访问线程内的变量,java,spring,bpmn,camunda,Java,Spring,Bpmn,Camunda,在Camunda进程流中,我试图访问在RabbitMQ onMessage线程中创建的变量。。。 简言之,我有一个RabbitMQ使用者在侦听队列,一旦消息发布到队列,就会执行onMessage,并在这个onMessage中启动BPMN进程 @Component("MyProcessor") public class MyProcessor implements ChannelAwareMessageListener { public final void onMessage(Mess

在Camunda进程流中,我试图访问在RabbitMQ onMessage线程中创建的变量。。。 简言之,我有一个RabbitMQ使用者在侦听队列,一旦消息发布到队列,就会执行onMessage,并在这个onMessage中启动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.IsThisOrthortEnabled包装service.IsThisOrthortEnabled,我可能会得到一个空指针异常,因为创建单例时服务未初始化,仅在onMessage线程内

所以总结一下我的问题,我如何访问BPMN中线程内的变量

1:如果单例是访问线程中变量的错误方法,那么我应该如何访问它们?是否可以将该服务实例注入BPMN流


2:如果服务任务是用于访问这些变量的错误组件,我应该使用哪个组件?

您可以设置如下流程变量

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("service", service);
runtimeService.startProcessInstanceByKey("ABC", variables);

上面假设
SomeService
实现接口
java.io.Serializable
。如果不是这样,您可以创建一个POJO类,该类实现可序列化的,并填充流程所需的相关服务/消息属性。

您可以设置如下流程变量

Map<String, Object> variables = new HashMap<String, Object>();
variables.put("service", service);
runtimeService.startProcessInstanceByKey("ABC", variables);
上面假设
SomeService
实现接口
java.io.Serializable
。如果不是这样,您可以创建一个POJO类,该类实现
Serializable
,并填充流程所需的相关服务/消息属性