强制结束令牌(token)引发的问题
2006-09-05 18:00
393 查看
在Jbpm中可以在代码里面调用token.end()强制结束一个令牌的执行。
例如在以下应用中:在fork(分支) 和join(联合)中将产生两个子令牌,而我们的需求是:当其中一个执行路线到达join节点时即继续父令牌的执行,而取消另外一个子令牌的执行。这时就需要我们在join节点的node-enter事件处理action中调用token.end()方法强制结束另外一个令牌。
虽然调用token.end()可以结束令牌的执行,但是该令牌上的任务实例却依然存在,也就是说任务实例依然可以被所分配到的参与者看到并执行。
刚开始我想到调用taskInstance.end()方法来结束相关任务实例,但是这样产生的问题是,它会调用该任务的执行,并触发相关事件动作,并标识该任务已由参与者完成。而我们想要的是取消任务,即不允许该任务再执行相关事件动作,并标识该任务的参与者并没有完成任务,这在某些业务上是需要的。
另外又发现任务实例上有一个cancel()方法,结果通过源码可以看到,cancel方法会去调用end方法,所以也不可行。
如此以来,最后只有一个方法可用,那就是调用taskInstance.setEnd(Date)方法,这样不会触发相关事件动作,但是因为Jbpm是依赖于结束时间来判断任务的完成与否,所以依然标识了该任务已经被执行。另外在调用TaskMgmtSession().findTaskInstances(actorId)时依然会返回该任务,因为这个方法所调用的HQL中是根据任务实例的isOpen属性为true进行查找的(可在hibernate.queries.hbm.xml文件中找到),而taskInstance.setEnd(Date)不会修改isOpen属性,所以在取任务时需要进行过滤。
也许是小弟愚昧,至今我还没有找到一个可以解决这个问题的方法,个人认为Jbpm应该在任务实例中提供取消任务的接口方法(可修改cancel方法满足此需求)和任务取消标志,并且在调用token.end()时对该令牌上未完成任务自动调用取消方法。
例如在以下应用中:在fork(分支) 和join(联合)中将产生两个子令牌,而我们的需求是:当其中一个执行路线到达join节点时即继续父令牌的执行,而取消另外一个子令牌的执行。这时就需要我们在join节点的node-enter事件处理action中调用token.end()方法强制结束另外一个令牌。
虽然调用token.end()可以结束令牌的执行,但是该令牌上的任务实例却依然存在,也就是说任务实例依然可以被所分配到的参与者看到并执行。
刚开始我想到调用taskInstance.end()方法来结束相关任务实例,但是这样产生的问题是,它会调用该任务的执行,并触发相关事件动作,并标识该任务已由参与者完成。而我们想要的是取消任务,即不允许该任务再执行相关事件动作,并标识该任务的参与者并没有完成任务,这在某些业务上是需要的。
另外又发现任务实例上有一个cancel()方法,结果通过源码可以看到,cancel方法会去调用end方法,所以也不可行。
如此以来,最后只有一个方法可用,那就是调用taskInstance.setEnd(Date)方法,这样不会触发相关事件动作,但是因为Jbpm是依赖于结束时间来判断任务的完成与否,所以依然标识了该任务已经被执行。另外在调用TaskMgmtSession().findTaskInstances(actorId)时依然会返回该任务,因为这个方法所调用的HQL中是根据任务实例的isOpen属性为true进行查找的(可在hibernate.queries.hbm.xml文件中找到),而taskInstance.setEnd(Date)不会修改isOpen属性,所以在取任务时需要进行过滤。
也许是小弟愚昧,至今我还没有找到一个可以解决这个问题的方法,个人认为Jbpm应该在任务实例中提供取消任务的接口方法(可修改cancel方法满足此需求)和任务取消标志,并且在调用token.end()时对该令牌上未完成任务自动调用取消方法。
相关文章推荐
- 对箫杉《强制结束令牌(token)引发的问题》的思考
- Struts的Token(令牌)机制解决表单重复提交的问题
- STRUTS中利用同步令牌(Token)解决重复提交的问题(转载)
- token令牌防止重复提交的问题
- C#强制弹出下拉框和引发的鼠标问题
- 由强制更新引发的退出应用问题
- Struts的Token(令牌)机制解决表单重复提交的问题
- 以不同用户身份运行程序,/savecred只需要输入一次密码(GetTokenByName取得EXPLORER.EXE的令牌,然后调用CreateProcessAsUser,而且使用LoadUserProfile解决另存文件的问题)good
- Struts中利用同步令牌(Token)解决重复提交的问题
- 多继承下函数指针强制转换所引发的诡异问题(CCNotificationCenter)
- u3d 一个工程编译一半强制结束进程导致的问题
- struts中的Token(令牌)解决重复提交问题
- win遇到强制结束进程失败的问题
- oracle 10g的隐含参数_complex_view_merging引发的性能问题
- 基于.Net Framework 4.0 Web API开发(4):ASP.NET Web APIs 基于令牌TOKEN验证的实现
- Activity中开辟了线程更新UI,线程未结束,退出了Activity,导致问题
- 由parseInt("09")引发的问题
- SQL SERVER修改函数名容易引发的问题分析
- java实现数据库备份和恢复源码---解决路径带空格引发的问题
- 04-Windows频繁打开和关闭端口可能引发的问题 | 07.杂项