> 2) Have a rule that calls wait() on a well-known lock object when it
> sees a "pause" fact. Here I'll use fetch to get it, but it could be
> from a Java method, a static member, etc.
>
> (defrule pause
> ?p <- (pause)
> =>
> (synchronized (fetch LOCK) ((fetch LOCK) wait))
> (retract ?p))
>
This is good. Another variation would be to assert the pause fact with an
external address of the lock object to wait on so you would have:
(defrule pause
?p <- (pause ?resume)
=>
(synchronized ?resume (?resume wait))
(retract ?p)
)
NB: I try to stay away from (store) and (fetch).
This raises some questions that push my understanding of jess. If thread #1
activates this rule and waits on the RHS, what happens if:
a) other threads call run() or runUntilHalt()
How can I guarantee that all possible threads will block? My current system
doesn't have this scenario but I am just trying to understand how this could
be generalized into a "complete engine pause", not just a single thread
pause.
b) other threads fire property change events matched by LHS patterns.
I assume activations will be added/removed as necessary but no rules fire
unless run() is called by another thread.
> 3) When thread 2 wants thread 1 to pause, it uses
>
> rete.store("LOCK", wellKnownObject);
> rete.assertString("(pause)");
>
> 4) To wake it up, #2 just says
>
> synchronized (wellKnownObject) {
> wellKnownObject.notify();
> }
>
> This doesn't seem to complicated to me -- what do you think?
No, it is very simple. I just need some time to wrap my head around it. I'm
sure I will be back with more questions once the fog lifts.
Thanks for the help!
alan
--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------