`
cjk87927
  • 浏览: 19302 次
  • 性别: 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

    JIRA Subtask Sortable-crx插件

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

    拿得出去的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 ...

    Subtask:Subtask.co 建立的基础

    子任务构建基础使用 Seed 和。 最初是作为大学项目开发​​的。

    angular-lesson1-task2-subtask11-12

    angular-lesson1-task2-subtask11-12

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

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

    JIRA SubTask URL Redirection-crx插件

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

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

    对于多目标优化问题的算法比较需要计算IGD值需要用到PF,本资源实现UF系列测试问题的PF,且这些PF是根据数学方法求得,力求分布均匀

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

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

    lemon去选手子文件夹工具

    如题,用于lemon去选手子文件夹。下载后查看readme使用。

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

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

    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 获取问

    kirby-task-list:一个适用于Kirby CMS的简单任务列表插件

    例如: - [x] this is a complete item- [ ] this is an incomplete item任务列表可以嵌套以更好地组织您的任务: - [ ] a bigger project - [ ] first subtask - [ ] follow up subtask - [ ] final subtask- [ ] ...

    Jira Sub-task Creator-crx插件

    语言:English 导航 摘要作为Scrum Master,我必须手动为Sprint准备好的故事创建所有子任务。该过程需要一段时间,必须为每个故事创建8-10个子任务(每次Sprint大约20个),当其中5-6个是默认子任务时,所有故事都是...

    Codechef-Notifier

    在大多数Codechef竞赛中,我们必须面对着在浏览器中打开许多标签的问题,并且不得不反复查看提交的问题(由于排队时间较长)。 这是比赛中的一大疏远。 这是解决方案,此chrome扩展程序将在比赛中通知用户有关其裁决...

    flink反压现象模拟与分析

    TaskManager 传输数据时,不同的 TaskManager 上的两个 Subtask 间通常根据 key 的数量有多个 Channel,这些 Channel 会复用同一个 TaskManager 级别的 TCP 链接,并且共享接收端 Subtask 级别的 Buffer Pool。...

    基于ChatGPT帮助单词记忆,让ChatGPT生成单词的解释或词根等,并将相关内容本地储存,再次查询时本地调用(Python)

    instruct--task:subtask 例如: exotic--vocab:mem 运行 cd word-memorization python3 VocabGPT.py 查询 查询时,请使用 [英语单词]--[vocab:任务名称] 例如 trenchant--vocab # 当任务名称缺失时默认为exp...

Global site tag (gtag.js) - Google Analytics