今天在做了个fork和的demo中碰到一个问题!  我在fork节点有2条分支.其中一条分支的tasknode节点有2个transition.
一条指向join节点另外一条指向end节点.当我在这个tasknode节点中走end这条transition时.确实他已经走到了end节点.但为什么processInstance没有结束呢? 而且其他节点照样可以继续流程.  
十分的不解.请高手指点.

解决方案 »

  1.   

    在BPMN spec里,end event有好多种,你可能混淆了none end event和terminate end event了, 走到none end event时什么事情也不干,只是回收一个token, terminate end event才会结束process instance的运行。
      

  2.   

    那我该去怎么实现呢.如果fork内的某个节点直接转向fork外的end节点.那我又该怎么去关闭其他fork内的节点,同时结束整个流程呢? 请给指点下。 谢谢
      

  3.   

    bpmn 规范里介绍了一个token的机制,如果遇到terminate end event, 就应该回收所有空闲的token.然后每一个node在执行的时候都应该要求持有一个token才能执行。因为没有空闲的token, 其它的node都没法执行了,就可以结束整个流程至于要close已经执行的node, process instace里应该要有一个记录所有持有token的node,通过这个记录拿到这些node, 依次关闭就行了。
    当然结束整个流程也可以通过设置状态来实现,每个node在执行前先判断process instance的状态,如果是terminate 状态就不再执行。 不过这是野路子,没有token看起来严格。
      

  4.   

    对于stateful的node, 还必须要有持久化才行,存process instance 的时候也要把上面说的记录存到数据库里,不然如果jvm重启就会找不到当前有哪些node正在执行(等待)了
      

  5.   

    我手工把所有的活动的taskinstance取消掉,然后把token全部end掉.然后让ROOTTOKEN.singal().虽然问题是解决了.总是感觉很便纽. 哎.先结贴吧.3Q.有问题在来请教.呵呵!