`
cjk87927
  • 浏览: 19939 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

SubTask completeTask 问题

    博客分类:
  • JBPM
阅读更多
代码:

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)

分享到:
评论
7 楼 cjk87927 2010-08-20  
xyz20003 写道
taskService.newTask()

谢谢
6 楼 xyz20003 2010-08-20  
taskService.newTask()
5 楼 cjk87927 2010-08-20  
xyz20003 写道
以hibernate的级联来说,还是断开关联比较好。

那一般来说,用什么方法动态创建任务比较好呢
4 楼 xyz20003 2010-08-18  
以hibernate的级联来说,还是断开关联比较好。
3 楼 cjk87927 2010-08-18  
xyz20003 写道
怀疑你是否执行了多次create(),造成subTask底下出现了subTask。

如果不是的话,尝试手工断开subTask与superTask的关联,通过subTask.setSuperTask(null) superTask.getSubTasks().remove(subTask);

通过断开subTask 与 superTask的关联 子任务是可以结束的,但是不就表示子任务无法单独结束呢?
2 楼 xyz20003 2010-08-17  
怀疑你是否执行了多次create(),造成subTask底下出现了subTask。

如果不是的话,尝试手工断开subTask与superTask的关联,通过subTask.setSuperTask(null) superTask.getSubTasks().remove(subTask);
1 楼 xyz20003 2010-08-17  
这个问题是因为superTask上还有关联的subTask,你想直接完成并删除superTask,就会报错还有关联。

相关推荐

    java-subtask1

    在这个名为“java-subtask1”的项目中,我们可能涉及到的是一个关于Java编程的子任务,可能是开发一个特定功能、解决某个技术问题或是进行性能优化。 首先,让我们从“java-subtask1-master”这个文件名来分析。...

    JIRA Subtask Sortable-crx插件

    “jira subtask Shorable”是Jira SubStasks的微妙增强。 这允许您通过拖动和丢弃来移动它们,而不是使用令人讨厌的小箭头。 将子任务拖到所需位置后,其位置将透明地保存,因此不需要重新加载。

    Subtask:Subtask.co 建立的基础

    在IT行业中,"Subtask:Subtask.co 建立的基础"这个标题暗示了一个关于软件开发的项目,尤其是关于子任务管理和协作的平台。在这个项目中,"构建基础"指的是设立项目的初始架构和核心功能,这通常涉及到选择合适的...

    拿得出去的Subtask JIRA「JIRA Subtask Sortable」-crx插件

    拖放以重新排序子任务。 “ JIRA子任务可排序”是JIRA子任务的细微增强。这使您可以通过拖放来移动它们,而不是使用烦人的小箭头。将子任务拖动到所需位置后,其位置将透明保存,因此不需要重新加载。...

    gulp-subtask

    npm install gulp-subtask 用法 首先。 用gulp初始化gulp-subtask。 var g = require ( 'gulp' ) ; var SubTask = require ( 'gulp-subtask' ) ( g ) ; var task = new SubTask ( ) . src ( 'test/js/*.js'...

    subtask.js:延长的承诺

    特征.pick(path) 安全地选择所需的数据使用对象创建承诺并使用键/值执行** 现在 subtask.js 建立在 promise 之上,并且与旧版本相比发生了很大变化。 如果您想检查旧 API,请检查。如何使用定义任务任务由task ...

    多目标优化问题之UF系列测试问题PF

    在多目标优化问题中,我们经常遇到需要同时优化多个相互冲突的目标函数的情况。这类问题的解决方案通常不只有一个,而是一组解,被称为帕累托前沿(Pareto Frontier),简称PF。帕累托最优是指在不使任何目标恶化的...

    angular-lesson1-task2-subtask11-12

    本项目“angular-lesson1-task2-subtask11-12”是Angular初学者的一个实践任务,主要涉及TypeScript在Angular应用中的使用。 首先,我们要理解TypeScript的基本概念。TypeScript是JavaScript的一个超集,它添加了可...

    lua实例:任务模块

    setmetatable(subTask, SubTask) return subTask end function SubTask:execute() if not self.parentTask:isDone() then error("父任务未完成,不能执行子任务") end print("执行子任务:" .. self.name) ...

    JIRA SubTask URL Redirection-crx插件

    禁用jira子任务标签的事件传播 该插件主要用于禁用jira子任务标签的事件传播,从而解决了子任务url重定向故障的问题。 支持语言:English (United States)

    bulk-create-issues-for-jira:允许 JIRA 普通用户一次创建多个问题的插件(来自 CSV 文件)

    为 JIRA 批量创建问题在 JIRA 中一次创建多个问题。 所有常规 JIRA 问题都可以使用此功能,所有问题都将在用户拥有的权限下创建。 与 JIRA 导入器插件不同,该插件将识别并强制执行您的配置 - 必须填写所有必填字段...

    yidu-s4k 医渡云结构化4K数据集

    "readme-subtask1.txt"是对子任务一的额外说明,"subtask2_training_part1.xlsx"和"subtask2_training_part2.xlsx"以及"subtask2_test.xlsx"则是医疗实体及属性抽取任务的训练和测试数据,以Excel表格格式存储。...

    交互设计精简--交互设计

    &lt;subTask name="drawPathTask" type="task" executeTimes="-1" multiExeStartStatus="multiStart" cursor="pathBorder" dataMember="seg2" templateName="drawPath"&gt; &lt;subTask name="drawCurve" type="diagram" ...

    webtasks:基于 express 和 subtask.js 的轻量级 Web 框架

    网络任务基于和轻量级 Web 框架特征使开发人员将复杂的 Web 应用程序逻辑解耦为小逻辑块以供重用,并加快实现和测试。 所有逻辑组件都是 commonjs 中的 webtasks。 所有 webtask 都是异步的。 React 支持(和服务器...

    给小朋友的NOIP提醒

    - **问题分析**:学会将复杂问题分解为更小的子问题,运用已有的知识来解决新问题。 总的来说,参加NOIP不仅要具备扎实的编程基础,还要有良好的赛场策略和心理素质。通过不断地练习和学习,才能在比赛中取得理想的...

    lemon去选手子文件夹工具

    "lemon去选手子文件夹工具"是一款专为处理特定文件夹问题而设计的软件工具。根据提供的信息,我们可以推测这个工具的主要功能是帮助用户从包含多个子文件夹的结构中,选择性地移除或“去选”某些不希望保留的子...

    gamework:Gamework 用于控制 LÖVE2d 游戏引擎中的流程

    addSequence ( task, subtask, halt, ... ) 将要添加到主task的subtask排队。 如果halt为真,则子任务被标记为暂停任务。 当排队的任务被提升为子任务时,这会触发 subtask: added( ... ) 回调。 addSubtask ( ...

    Flink分布式运行环境.docx

    在Flink分布式运行环境中,每个TaskManager是一个JVM进程,使用多个线程执行subtask。每个TaskManager都会配置若干个任务槽来控制worker能够接收的最大任务数。每个任务槽代表了TaskManager的固定部分的资源。用户...

    plugin-subtask-forecast:[未维护]根据估计和用户时间表在日历中显示子任务预测

    用于Kanboard的子任务日历预测插件 该插件显示用户日历中子任务的估计。 必须填写用户时间表,才能查看日历中的时隙。 要求 看板&gt; = 1.0.29 &lt;= 1.0.37 时间表插件 作者 弗雷德里克·古洛特(Frederic Guillot) ...

    jira.sh:Bash脚本的JIRA客户端

    吉拉 用于外壳程序脚本的JIRA Client。 配置 转到您的个人资料以获取API令牌 : ...export JIRA_PASS= " your-token-... if [[ $( issue_is_subtask " AA-999 " ) == " true " ]] ; then echo " is subtask " if 获取问

Global site tag (gtag.js) - Google Analytics