2016-06-21 95 views
0

我正在通過我自己的服務暴露Activiti Api。 在serviceTasks之一,我需要用我自己的服務(比如,XyzService),注入我自己的服務Activiti Api服務任務

我使用的setter /吸氣試過了,也不行,反正我沒有用的getter/setter, 有任何其他方式注入這個XyzService在這個serviceTask,這樣我就可以使用它?

任何幫助將不勝感激,謝謝。

+0

你在項目中使用Spring嗎? – Evgeny

+0

我不使用Activiti Activiti – OutOfMind

回答

0

嘗試以下方法:

添加豆類地圖包含xyzServiceProcessEngineConfiguration建設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}" /> 
+0

非常感謝!這工作 – OutOfMind