2015-09-09 146 views
0

我想在單獨的線程中使用jBPM 6.2運行jBPM進程。因此,我創建了一個名爲WorkflowThread的類,並在每次需要運行新進程時啓動新的工作流線程。類的代碼是這樣的:jBPM - 在單獨的線程中運行進程

public WorkflowThread(KieSession session, String workflowID, Map<String, Object> arguments) { 
    this.session = session; 
    this.workflowID = workflowID; 
    this.arguments = arguments; 
    this.workflowInstance = this.session.createProcessInstance(workflowID, arguments); 
} 

public void run(){ 
    if(this.workflowInstance.getState() == ProcessInstance.STATE_PENDING){ 
     this.session.startProcessInstance(this.workflowInstance.getId()); 
    }else{ 
     try { 
      throw new Exception("The process with id "+this.workflowInstance.getId()+" is not pending but in state "+this.workflowInstance.getState()); 
     } catch (Exception e) { 
      logger.error(e); 
      e.printStackTrace(); 
     } 
    } 

} 

調用代碼:

WorkflowThread thread = new WorkflowThread(this.ksession, workflowID, arguments); 
thread.start(); 

然而,儘管我試圖啓動前檢查過程中的狀態(我檢查它尚未開始),我得到一個異常:在線程「線程1」 java.lang.IllegalArgumentException異常

例外:一個流程實例只能在org.jbpm.process.instance.impl一次 開始.ProcessInstanc eImpl.start(ProcessInstanceImpl.java:233) 在org.jbpm.workflow.instance.impl.WorkflowProcessInstanceImpl.start(WorkflowProcessInstanceImpl.java:389) 在org.jbpm.process.instance.ProcessRuntimeImpl.startProcessInstance(ProcessRuntimeImpl.java: 195) 在org.jbpm.process.instance.ProcessRuntimeImpl.startProcessInstance(ProcessRuntimeImpl.java:204) 在org.drools.core.impl.StatefulKnowledgeSessionImpl.startProcessInstance(StatefulKnowledgeSessionImpl.java:1911) 在welcome.auth.workflowmanager。 WorkflowThread.run(WorkflowThread.java:43)

我在做什麼錯?是否有可用於確保在單獨的線程中執行工作流程的備選方案?

回答

0

假設jBPM sources你有狀態不匹配。這看起來像一個種族條件。但是,我沒有jBPM的經驗,所以也許我錯了。

+0

我認爲你是完全正確的。我也看到了這個源代碼。我再也看不到錯誤了。這意味着賽車狀況。我會等待是否有更全面的答案,說明如何正確完成這項工作,如果沒有,我會將您的答案標記爲正確答案。非常感謝您的幫助。 –

相關問題