我想在單獨的線程中使用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)
我在做什麼錯?是否有可用於確保在單獨的線程中執行工作流程的備選方案?
我認爲你是完全正確的。我也看到了這個源代碼。我再也看不到錯誤了。這意味着賽車狀況。我會等待是否有更全面的答案,說明如何正確完成這項工作,如果沒有,我會將您的答案標記爲正確答案。非常感謝您的幫助。 –