On 15/05/2012, mike <mikemps(a)gmail.com> wrote:
that's nice ... n' a bit clever ... it could work ... I mean,
i could
automatically append that to all sessions given that i control compiling
the drls.
Is there any setting or something that detects infinite loops? Like it
would abort if if drools runs into an infinite loop?
Even wily strategies for loop detection aren't fail-safe. Loops can
occur over cycles of two, three, four,... rules. (Four was the max.
that has occurred here in 25 years, but that's no guarantee.) Now, if
you monitor activations and save the last n rules, that won't work
either, because you can have one rule firing repeatedly with varying
facts, and that's not necessarily an infinite loop - but it could be,
returning to the same set of facts after two, three, four,...
activations.
So, implementing any of the aforementioned would only help you in the
testing stage, you can't rely on it in production runs.
I guess I could do something with fireAllRules(int max) but figuring out a
reasonable max would be fuzzy. I could also use the no-loop attribute but
it would not pick up some cases of infinite loops.
There are scenarios where a maximum can be derived from the number of
rules, or facts, or both.
A crude safeguard would be a maximum duration, interrupting the thread
running the Engine.
-W
Thank you very much for you help
Cheers
Mike
On Tue, May 15, 2012 at 3:55 PM, Wolfgang Laun
<wolfgang.laun(a)gmail.com>wrote:
> A very low salience rule depending on nothing and calling halt will stop
> the run:
>
> rule Exit
> salience -999999999
> when
> then
> drools.halt();
> end
>
> -W
>
>
> On 15 May 2012 21:46, mike <mikemps(a)gmail.com> wrote:
>
>> Well I got this wrong sorry. Yes I can stop a session if I start it with
>> fireUntilHalt() but it never stops. I need it to finish by itself too.
>>
>> Thank you
>> Mike
>>
>>
>> On Tue, May 15, 2012 at 11:06 AM, mike <mikemps(a)gmail.com> wrote:
>>
>>> wow that worked like a charm!!! thank you very much Wolfgang, I owe u
>>> a
>>> beer or something :)
>>>
>>> Cheers
>>> Mike
>>>
>>>
>>> On Tue, May 15, 2012 at 11:01 AM, mike <mikemps(a)gmail.com> wrote:
>>>
>>>> Awesome I'll try that :)
>>>>
>>>> We got business ppl writing rules ... Those rules are going on
>>>> infinite
>>>> loops quite often ... Frankly I am not excited about killing the
>>>> session,
>>>> for me it's just a business request that I am trying to implement
>>>>
>>>> Thank you very much Wolfgang
>>>>
>>>> Cheers
>>>> Mike
>>>>
>>>>
>>>> On Tue, May 15, 2012 at 10:53 AM, Wolfgang Laun <
>>>> wolfgang.laun(a)gmail.com> wrote:
>>>>
>>>>> You are confusing jBPM processes and Java threads.
>>>>>
>>>>> You can interrupt the thread SessionThread, but that's not
reliable
>>>>> (if IE is handled, for instance),
>>>>>
>>>>> Best would be to call fireUntilHalt() and call the session's
halt
>>>>> method.
>>>>>
>>>>> But why would you want to do this sort of weird thing?
>>>>>
>>>>> -W
>>>>>
>>>>>
>>>>> On 15/05/2012, mike <mikemps(a)gmail.com> wrote:
>>>>> > Hi there,
>>>>> >
>>>>> > Is there any way to kill a running session?
>>>>> >
>>>>> > I've been trying with
StatefulKnowledgeSession.abortProcessInstance
>>>>> but i
>>>>> > can't get it working.
>>>>> >
>>>>> > For instance .. I got this drl
>>>>> >
>>>>> > rule "infinite loop"
>>>>> > when x : Integer()
>>>>> > then
>>>>> > System.out.println(x);
>>>>> > Thread.sleep(100);
>>>>> > insert(x + 1);
>>>>> > end
>>>>> >
>>>>> > n' this Thread
>>>>> >
>>>>> > public class SessionThread implements Runnable {
>>>>> > private StatefulKnowledgeSession session;
>>>>> > public SessionThread(StatefulKnowledgeSession session) {
>>>>> this.session =
>>>>> > session; }
>>>>> > public void run() { session.fireAllRules(); }
>>>>> > }
>>>>> >
>>>>> > then i create a session with the drl n' do something like
...
>>>>> >
>>>>> > session.insert(42);
>>>>> > Thread thread = new Thread(new SessionThread(session));
>>>>> > thread.start();
>>>>> > Thread.sleep(1000);
>>>>> > session.abortProcessInstance(thread.getId());
>>>>> >
>>>>> > I've tried diff processInstanceIds and
>>>>> > session.getProcessInstances()
>>>>> but
>>>>> > nothing seems to stop the running session
>>>>> >
>>>>> > Thank you
>>>>> > Mike
>>>>> >
>>>>> _______________________________________________
>>>>> rules-users mailing list
>>>>> rules-users(a)lists.jboss.org
>>>>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>>>>
>>>>
>>>>
>>>
>>
>> _______________________________________________
>> rules-users mailing list
>> rules-users(a)lists.jboss.org
>>
https://lists.jboss.org/mailman/listinfo/rules-users
>>
>>
>
> _______________________________________________
> rules-users mailing list
> rules-users(a)lists.jboss.org
>
https://lists.jboss.org/mailman/listinfo/rules-users
>
>