在jbpm中fork的分支问题

moonjaya 2009-04-20 10:29:34
今天在做了个fork和的demo中碰到一个问题! 我在fork节点有2条分支.其中一条分支的tasknode节点有2个transition.
一条指向join节点另外一条指向end节点.当我在这个tasknode节点中走end这条transition时.确实他已经走到了end节点.但为什么processInstance没有结束呢? 而且其他节点照样可以继续流程.
十分的不解.请高手指点.
...全文
453 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
moonjaya 2009-04-23
  • 打赏
  • 举报
回复
我手工把所有的活动的taskinstance取消掉,然后把token全部end掉.然后让ROOTTOKEN.singal().虽然问题是解决了.总是感觉很便纽. 哎.先结贴吧.3Q.有问题在来请教.呵呵!
艾德 2009-04-22
  • 打赏
  • 举报
回复
对于stateful的node, 还必须要有持久化才行,存process instance 的时候也要把上面说的记录存到数据库里,不然如果jvm重启就会找不到当前有哪些node正在执行(等待)了
艾德 2009-04-22
  • 打赏
  • 举报
回复
bpmn 规范里介绍了一个token的机制,如果遇到terminate end event, 就应该回收所有空闲的token.

然后每一个node在执行的时候都应该要求持有一个token才能执行。因为没有空闲的token, 其它的node都没法执行了,就可以结束整个流程

至于要close已经执行的node, process instace里应该要有一个记录所有持有token的node,通过这个记录拿到这些node, 依次关闭就行了。


当然结束整个流程也可以通过设置状态来实现,每个node在执行前先判断process instance的状态,如果是terminate 状态就不再执行。 不过这是野路子,没有token看起来严格。
moonjaya 2009-04-22
  • 打赏
  • 举报
回复
那我该去怎么实现呢.如果fork内的某个节点直接转向fork外的end节点.那我又该怎么去关闭其他fork内的节点,同时结束整个流程呢? 请给指点下。 谢谢
艾德 2009-04-21
  • 打赏
  • 举报
回复
在BPMN spec里,end event有好多种,你可能混淆了none end event和terminate end event了,

走到none end event时什么事情也不干,只是回收一个token, terminate end event才会结束process instance的运行。

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧