SubTask completeTask 问题

代码:

package com.cloud.test;

import java.util.List;
import org.jbpm.api.Configuration;
import org.jbpm.api.ProcessEngine;
import org.jbpm.api.TaskService;
import org.jbpm.api.task.Task;
import org.jbpm.pvm.internal.task.TaskImpl;

/**
 * 子任务测试
 * @author Administrator
 *
 */
public class SubTask {

	/**
	 * 获取流程引擎
	 * @return
	 */
	public static ProcessEngine getProcessEngine() {
		
		Configuration cfg = new Configuration();
		return cfg.buildProcessEngine();
	}
	
	
	public void create() {
		
		ProcessEngine engine = getProcessEngine();
		//启动任务
		engine.getExecutionService().startProcessInstanceByKey("SubTask");
		
		//创建子任务
		TaskService ts = engine.getTaskService();
		List<Task> tasks = ts.findPersonalTasks("abc");
		if (tasks !=null && tasks.size() >= 1) {
			Task parent = tasks.get(0);
			System.out.println(parent.getId() + "_" + parent.getName());
			Task task = ts.newTask(parent.getId());
			task.setAssignee("abc");
			((TaskImpl)task).setSignalling(false);
			task.setName("subTask_new");
			ts.saveTask(task);
			System.out.println("success");
		}
	}
	
	public void audit() {
		
		ProcessEngine engine = getProcessEngine();
		TaskService ts = engine.getTaskService();
		List<Task> tasks = ts.findPersonalTasks("abc");
		
		for (Task task : tasks) {
			System.out.println(task.getId() + "_" + task.getName());
			if ("subTask_new".equals(task.getName())) {
				ts.completeTask(task.getId());
			}
		}
	}
	
	public static void main(String[] args) {
		
//		new SubTask().create();
		new SubTask().audit();
	}
}



xml:

<?xml version="1.0" encoding="UTF-8"?>

<process name="SubTask" xmlns="http://jbpm.org/4.4/jpdl">
   <start name="start1" g="182,42,48,48">
      <transition name="to task1" to="task1" g="-53,-17"/>
   </start>
   <task name="task1" g="159,132,92,52" assignee="abc">
      <transition name="to end1" to="end1" g="-47,-17"/>
   </task>
   <end name="end1" g="182,245,48,48"/>
</process>


报错:

Exception in thread "main" org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [org.jbpm.pvm.internal.task.TaskImpl#440004]
	at org.hibernate.impl.SessionImpl.forceFlush(SessionImpl.java:1041)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:188)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:117)
	at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:93)
	at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:534)
	at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:526)
	at org.hibernate.engine.CascadingAction$5.cascade(CascadingAction.java:241)
	at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:291)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:239)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
	at org.hibernate.engine.Cascade.cascadeCollectionElements(Cascade.java:319)
	at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java:265)
	at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java:242)
	at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:192)
	at org.hibernate.engine.Cascade.cascade(Cascade.java:153)
	at org.hibernate.event.def.AbstractFlushingEventListener.cascadeOnFlush(AbstractFlushingEventListener.java:154)
	at org.hibernate.event.def.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:145)
	at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:88)
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
	at org.jbpm.pvm.internal.tx.HibernateSessionResource.prepare(HibernateSessionResource.java:56)
	at org.jbpm.pvm.internal.tx.StandardTransaction.commit(StandardTransaction.java:107)
	at org.jbpm.pvm.internal.tx.StandardTransaction.complete(StandardTransaction.java:64)
	at org.jbpm.pvm.internal.tx.StandardTransactionInterceptor.execute(StandardTransactionInterceptor.java:57)
	at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.executeInNewEnvironment(EnvironmentInterceptor.java:53)
	at org.jbpm.pvm.internal.svc.EnvironmentInterceptor.execute(EnvironmentInterceptor.java:40)
	at org.jbpm.pvm.internal.svc.RetryInterceptor.execute(RetryInterceptor.java:56)
	at org.jbpm.pvm.internal.svc.SkipInterceptor.execute(SkipInterceptor.java:43)
	at org.jbpm.pvm.internal.svc.TaskServiceImpl.completeTask(TaskServiceImpl.java:88)
	at com.cloud.test.SubTask.audit(SubTask.java:59)
	at com.cloud.test.SubTask.main(SubTask.java:67)

你可能感兴趣的:(java,thread,Hibernate,xml,jbpm)