[rules-users] Drools Flow: waiting for process to complete without polling

Kris Verlaenen kris.verlaenen at cs.kuleuven.be
Fri Oct 2 07:00:56 EDT 2009


You could either embed Drools inside your application, or run it as a
separate service, either are probably fine.  Note that, if you configure
persistence, it will automatically store the state of your process
instances at "safe points" during the execution of your application. 
That means that you can shut it down safely and continue across
applications.

Kris

Quoting Alexandros Karypidis <akarypid at yahoo.gr>:

> Hello Kris,
> 
> Thank you for your reply.
> 
> I am currenty doing "test-driven" development outside an application
> 
> server to learn the API. I launch processes from within a unit test 
> method; hence my need to wait in this manner so that I can perform a
> 
> final assertion on process state (after the process is complete).
> 
> You are totally correct to point out that in real life, I will be 
> executing long-running processes from within JBoss in my application
> 
> across multiple executions of the application. So what is the typical
> 
> approach for doing that? Do you typically install Drools as a service
> in 
> a SAR, or do you launch it with a servlet startup listener when the
> WAR 
> starts? Also, how do you make sure a clean undeploy/shutdown occurs 
> where process execution is gracefully suspended and process states
> are 
> saved? Can you give me some pointers?
> 
> Thank you.
> 
> Kris Verlaenen wrote:
> > I'm not sure that having a thread wait like this until all
> processes
> > have completed is a good idea in general, as in theory processes
> could
> > run for a long time (hours/days/weeks/...).  Unless of course you
> are
> > only using synchronous processes, but in that case the engine will
> only
> > return once the process has been completed anyway (if you call it
> > synchronously).
> >
> > But the approach you suggest is valid, you can register an event
> > listener to react whenever a process instance is completed, or
> similarly
> > you could use the history log to retrieve this kind of information
> > (making it decoupled from the actual execution).
> >
> > Kris
> >
> > Quoting Alexandros Karypidis <akarypid at yahoo.gr>:
> >
> >   
> >> Hello,
> >>
> >> I'm not very experienced in the Drools Flow API so I'm looking
> into
> >> the 
> >> best way to code a simple thing: wait for all processes in a
> session
> >> to 
> >> complete without polling.
> >>
> >> The only way I could thing of from the javadoc reference I read,
> is
> >> to 
> >> synchronize and do a wait()/notify() using a ProcessEventListener.
> It
> >>
> >> seems a lot of work for a use-case that is too basic. I set up a 
> >> listener like this:
> >>
> >>     pel = new ProcessEventListener() {
> >>        // ...
> >>             public void
> afterProcessCompleted(ProcessCompletedEvent
> >> pce) {
> >>                 synchronized (this) {
> >>                     notifyAll();
> >>                 }
> >>             }
> >>     }
> >>     ksession.addEventListener(pel);
> >>
> >> ...then wait for processes (one in this simplified case) to
> complete
> >>
> >> like this:
> >>
> >>     synchronized (pel) {
> >>         new Thread(new Runnable() {
> >>             public void run() {
> >>                 ksession.fireUntilHalt();
> >>             }
> >>         }).start();
> >>         ksession.startProcess("some.process");
> >>         pel.wait(); // the notifyAll() resumes this
> >>     }
> >>
> >> Is there a better way to do this?
> >>
> >> _______________________________________________
> >> rules-users mailing list
> >> rules-users at lists.jboss.org
> >> https://lists.jboss.org/mailman/listinfo/rules-users
> >> Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
> >>     
> 




Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm



More information about the rules-users mailing list