8 Replies Latest reply on Mar 5, 2008 9:59 AM by Ronald van Kuijk

    Strange behaviour when using fork

    Rudi Adianto Newbie

      Hello,

      I have a flow that basically does the following:
      AO -> RO#1 -> ... -> HBS -> REV_ADM -> REV#1 -> ... -> REV#3 ->
      -> COM_ADM -> COM#1 -> ... ->COM#3 ->

      (continued)
      join1 -> dropped

      on each node, it should be checked whether any user is currently assigned to it. if yes, create a task and assign. if not, continue execution.
      my idea to this is to make each task-node "create-task=false", assign an "enter-node" handler that checks whether any user is assigned to the node, and then create task/continue execution.
      This solution works fine when the execution path is straightforward (no forking and async execution involved).
      but when "fork" come into play, the behaviour is far from what i expected.

      the debug print (from my own code, to simplify the printout) is like the following:

      http://www.2shared.com/file/2939237/171d5892/stdout_jbpm.html


      as you can see after HBS node it hits the fork node, and it started to execute in a way beyond my comprehension.
      yet more strange behaviour is that when the execution is stopped in HBS for a while (created a task and waited for the task to be completed), the printout is far shorter, but still far from what i expected and still beyond my comprehension:

      Token(/)264445391 calc auth level
      Token(/)264445391 review RO #1
      Token(/)264445391 review RO #2
      Token(/)264445391 review SRM
      Token(/)264445391 review GAM
      Token(/)264445391 review BM
      Token(/)264445391 review HOBS
      Token(/)264445391 review HA
      Token(/)264445391 review HR
      Token(/)264445391 review HBS
      Token(/to.pick compliances)264625293 pick compliances
      Token(/to.pick compliances)264625293 compliance #1
      Token(/to.pick compliances)264625293 compliance #2
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #2
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #1
      Token(/to.pick compliances)264625293 compliance #2
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #2
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick reviewer)264625334 pick reviewer
      Token(/to.pick reviewer)264625334 reviewer #1
      Token(/to.pick reviewer)264625334 reviewer #2
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #2
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #1
      Token(/to.pick reviewer)264625334 reviewer #2
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #2
      Token(/to.pick reviewer)264625334 reviewer #3
      Token(/to.pick reviewer)264625334 reviewer #3
      


      i'm expecting that after "review HBS", it should be like

      Token(/to.pick compliances)264625293 pick compliances
      Token(/to.pick compliances)264625293 compliance #1
      Token(/to.pick compliances)264625293 compliance #2
      Token(/to.pick compliances)264625293 compliance #3
      Token(/to.pick reviewer)264625334 pick reviewer
      Token(/to.pick reviewer)264625334 reviewer #1
      Token(/to.pick reviewer)264625334 reviewer #2
      Token(/to.pick reviewer)264625334 reviewer #3

      and then join and finish.

      did i do something wrong? is ctx.getNode().leave(ctx) is the wrong way to continue execution? or continuing execution from inside an action handler is not a supported way at all?

      the unit test can be downloaded from

      http://www.2shared.com/file/2939148/caa56d9d/fork_test.html

      anyone has any insight???

      regards,

      rudi