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

jeanjvr jeanjvr at live.co.za
Thu Apr 8 10:25:45 EDT 2010


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?

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.

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.

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.



More information about the rules-users mailing list