[rules-users] DROOLS Flow as a Manufacturing process execution engine - Noob questions about events and concurrency

Mauricio Salatino salaboy at gmail.com
Thu Apr 8 11:14:38 EDT 2010


Good questions, Let me try to clarify them for you

On Thu, Apr 8, 2010 at 10:25 AM, jeanjvr <jeanjvr at live.co.za> wrote:

>
> First I want to thank Kris for responding to my direct email - very quick
> response!
>
> I'll move over to the mailing list for now.
>
> I went and read the documentation for Flow and constructed a test flow
> attached to an application that launches and controls it. I did this is
> Eclipse for now using the GUI to test the applicability of the a work-flow
> engine to a simple manufacturing task.
>
> I attach a PNG image
> (http://i349.photobucket.com/albums/q388/shooter_za/jvr_test_flow.png) and
> a
> trimmed log of my flow just for interest sake at the end.
>
> My test Java app starts the flow in a new thread and allows me to trigger
> events in the flow with buttons (processInstance.signalEvent(String type,
> Object data)). If I use Drools in my project, the events would be generated
> by factory devices through an industrial protocol called OPC.
>
>
> Some noob questions:
>
> 1. I need concurrent execution in my flow. I use Split nodes to do this. Is
> this the correct way to achieve concurrency?
>
No really, if you want to represent with your business processes concurrent
tasks you use split and join nodes.
But if you are talking about multi-threaded programming this is not a good
choice. You can create multi-thread and concurrent code
to run inside a custom work item, but the concurrent threads will not be
visible in the processes graph.

>
> 2. I need to construct control loops. Pieces of the flow that execute over
> and over until a constraint
> directs flow to an End node. I see no reason why loops cannot be done in
> DROOLS flow.
>
You can use for each nodes for that kind of behaviors. Where the loop will
be executed N times based on a variable/collection

>
> 3. My biggest problem at this time is that my flow executes, but "ignores"
> Event nodes connected to AND Join nodes. The work-flow then ends and my
> thread exits, although the End nodes in question are not reached according
> to the log.
>
Can you provide a test case that demonstrate this behavior?

>
> I suppose the engine determines that no terminating End node can be reached
> and stops. I think that I maybe have an incorrect understanding of some
> aspect of the DROOLS work-flow engine.
>
> The core idea is to let one or more flows reach an AND Join node - and then
> wait until all Event nodes attached to the AND Join node is triggered,
> allowing the flow to continue.
>
>
>
>
> Other problems I will not list here now, as I believe I may be able to
> figure them out (variables, constraints). I just want to prove that Flow
> can
> be used.
>
>
> Anybody got any advice for me?
>
> Thanks
>
> Jean
>
>
>
>
> http://n3.nabble.com/file/n706102/jvr_test_flow.png
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:Start[id=1]
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND - Split Flow - Two concurent
> Processes[id=3]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Start Conveyor 1[id=4]
>
>
>
> Start Conveyor 1
>
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:Stop Conveyor 1[id=38]
>
>
>
> Stop Conveyor 1
>
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:End[id=9]
>
> AFTER RULEFLOW NODE TRIGGERED node:End[id=9]
>
> AFTER RULEFLOW NODE TRIGGERED node:Stop Conveyor 1[id=38]
>
> AFTER RULEFLOW NODE TRIGGERED node:Start Conveyor 1[id=4]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Start Conveyor 2[id=5]
>
>
>
> Start Conveyor 2
>
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND - Split Flow - Three concurent
> Processes[id=6]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Start Conveyor 3[id=7]
>
>
>
> Start Conveyor 3
>
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:Disciminator - Join - Continue if any
> input[id=10]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Load A onto conveyor 3[id=12]
>
>
>
> Load one subassembly A on to Conveyor 3
>
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:Split - After Load A onto conveyor
> 3[id=17]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Discriminator - Join - Continue if any
> input[id=13]
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=51]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=51]
>
> AFTER RULEFLOW NODE TRIGGERED node:Discriminator - Join - Continue if any
> input[id=13]
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=42]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=42]
>
> AFTER RULEFLOW NODE TRIGGERED node:Split - After Load A onto conveyor
> 3[id=17]
>
> AFTER RULEFLOW NODE TRIGGERED node:Load A onto conveyor 3[id=12]
>
> AFTER RULEFLOW NODE TRIGGERED node:Disciminator - Join - Continue if any
> input[id=10]
>
> AFTER RULEFLOW NODE TRIGGERED node:Start Conveyor 3[id=7]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Discriminator Join - Continue if any
> input[id=26]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Load B onto Conveyor 2[id=8]
>
>
>
> Load one subassembly B onto conveyor 2
>
>
>
> BEFORE RULEFLOW NODE TRIGGERED node:Split - After load B onto conveyor
> 2[id=24]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Discriminator Join - Continue if any
> input[id=47]
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=52]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=52]
>
> AFTER RULEFLOW NODE TRIGGERED node:Discriminator Join - Continue if any
> input[id=47]
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=49]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=49]
>
> AFTER RULEFLOW NODE TRIGGERED node:Split - After load B onto conveyor
> 2[id=24]
>
> AFTER RULEFLOW NODE TRIGGERED node:Load B onto Conveyor 2[id=8]
>
> AFTER RULEFLOW NODE TRIGGERED node:Discriminator Join - Continue if any
> input[id=26]
>
> BEFORE RULEFLOW NODE TRIGGERED node:Disciminator - Join - Continue if any
> input[id=37]
>
> BEFORE RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=39]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND Join - Continue if all input[id=39]
>
> AFTER RULEFLOW NODE TRIGGERED node:Disciminator - Join - Continue if any
> input[id=37]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND - Split Flow - Three concurent
> Processes[id=6]
>
> AFTER RULEFLOW NODE TRIGGERED node:Start Conveyor 2[id=5]
>
> AFTER RULEFLOW NODE TRIGGERED node:AND - Split Flow - Two concurent
> Processes[id=3]
>
> AFTER RULEFLOW NODE TRIGGERED node:Start[id=1]
>
> AFTER RULEFLOW STARTED
>
> --
> View this message in context:
> http://n3.nabble.com/DROOLS-Flow-as-a-Manufacturing-process-execution-engine-Noob-questions-about-events-and-concurrency-tp706102p706102.html
> Sent from the Drools - User mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>



-- 
- http://salaboy.wordpress.com
- http://www.jbug.com.ar
- Salatino "Salaboy" Mauricio -
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20100408/2fbbf9a4/attachment.html 


More information about the rules-users mailing list