Good questions, Let me try to clarify them for you On Thu, Apr 8, 2010 at 10:25 AM, jeanjvr <[email protected]> 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 > [email protected] > https://lists.jboss.org/mailman/listinfo/rules-users > -- - http://salaboy.wordpress.com - http://www.jbug.com.ar - Salatino "Salaboy" Mauricio -
_______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
