我想在单独的线程中使用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)
我在做什么错?是否有可用于确保在单独的线程中执行工作流程的备选方案?
我认为你是完全正确的。我也看到了这个源代码。我再也看不到错误了。这意味着赛车状况。我会等待是否有更全面的答案,说明如何正确完成这项工作,如果没有,我会将您的答案标记为正确答案。非常感谢您的帮助。 –