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 <[email protected]>: > > >> 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 >> [email protected] >> https://lists.jboss.org/mailman/listinfo/rules-users >> Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm >> _______________________________________________ rules-users mailing list [email protected] https://lists.jboss.org/mailman/listinfo/rules-users
