将我自己的服务注入Activiti Api服务任务

时间:2016-06-21 08:52:47

标签: activiti inject

我正在努力通过自己的服务公开Activiti Api。 在其中一个serviceTasks中,我需要使用自己的服务(比如,XyzService),

我尝试使用setter / getter,它不起作用,无论如何我不必使用getter / setter, 有没有其他方法可以在此serviceTask中注入此XyzService,以便我可以使用它?

任何帮助将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

尝试以下方法:

在构建xyzService之前,将包含ProcessEngineConfiguration的bean地图添加到ProcessEngine。来自地图的对象可以通过键在表达式中访问。例如:

ProcessEngineConfigurationImpl cfg =
    (ProcessEngineConfigurationImpl) ProcessEngineConfiguration.createStandaloneInMemProcessEngineConfiguration();

Map<Object, Object> beans = new HashMap<>();
beans.put("xyzService", new XyzService());

ProcessEngine engine = cfg.setBeans(beans).buildProcessEngine();

使用Field Injection

将服务注入服务任务
<serviceTask id="servicetask" name="Service Task" activiti:class="com.example.MyJavaDelegate">
  <extensionElements>
    <activiti:field name="xyzServiceExp">
      <activiti:expression>${xyzService}</activiti:expression>
    </activiti:field>
  </extensionElements>
</serviceTask>

MyJavaDelegate

的位置
public class MyJavaDelegate implements JavaDelegate {

    private Expression xyzServiceExp;

    @Override
    public void execute(DelegateExecution execution) throws Exception {
        XyzService xyzService = (XyzService) xyzServiceExp.getValue(execution);
        ....
    }

    public void setXyzServiceExp(Expression xyzServiceExp) {
        this.xyzServiceExp = xyzServiceExp;
    }
}

或者您可以将带有注入服务的JavaDelegate实例放入beans地图并将服务任务定义为

<serviceTask id="servicetask" name="Service Task"
        activiti:delegateExpression="${myJavaDelegateInstance}" />