Could you maybe send me your project so I could take a look myself and
debug to find out what's going on?
Kris
Quoting Femke De Backere <femmyke(a)gmail.com>:
Thx for the explanation.
I added the code to my application, but my timer still doesn't seem
to
work, but now my app doesn't crash anymore.
Femke
Op 8-mrt-09, om 03:51 heeft Kris Verlaenen het volgende geschreven:
> Femke,
>
> The reason is that the Drools engine by default is a passive
> component,
> meaning that it will only execute if you tell it to explicitly
(e.g.
> using fireAllRules()). In this case, if you use a small timer the
> engine is still executing startProcess() and hence the timer will
be
> executed. When using a larger timer delay, the timer will trigger
but
> will only put an action on the action queue. If you would call
> fireAllRules after one minute, all queued actions (in this case
the
> execution of the timer) will be executed. You can however also
> configure the Drools engine to fire continuously using
> fireUntilHalt().
> I just added this new section in the documentation to explain it:
>
> By default, the Drools engine is a passive component, meaning that
it
> will only start processing if you tell it to (for example, you
first
> insert the necessary data and then tell the engine to start
> processing).
> In passive mode, a timer that has been triggered will be put on
the
> action queue. This means that it will be executed the next time
the
> engine is told to start executing by the user (using fireAllRules()
or
> if the engine is already / still running), in which case the timer
> will
> be executed automatically.
>
> When using timers, it does usually make sense to make the Drools
> engine
> an active component, meaning that it will execute actions whenever
> they
> become available (and not wait until the user tells it to start
> executing again). This would mean a timer would be executed once it
is
> triggered. To make the engine fire all actions continuously, you
must
> call the fireUntilHalt() method. That means the engine will
continue
> firing until the engine is halted. The following fragment shows how
to
> do this (note that you should call fireUntilHalt() in a separate
> thread
> as it will only return if the engine has been halted (by either the
> user
> or some logic calling halt() on the session):
>
> new Thread(new Runnable() {
> public void run() {
> ksession.fireUntilHalt();
> }
> }).start();
>
> // starting a new process instance
> ksession.startProcess("...");
> // any timer that will trigger will now be executed automatically
>
> Kris
>
> Quoting Femke De Backere <femmyke(a)gmail.com>:
>
>> Hi!
>>
>> I have a really strange problem with my ruleflow. I have a
ruleflow
>>
>> process with some workhandlers. The flow seems to work perfectly,
>> until I arrive at the timer. The timer itself executes well, if
it
>> delays for a period of only 4 milliseconds. The flow stops running
on
>>
>> the join component (because I don't reach the workhandler
CheckRass,
>>
>> in the debugging).
>>
>> If I give the timer a delay period of 1 minute (60 000
>> milliseconds), the flow stops running at the timer component. The
>> action nodes before and after the timer contain print statements
and
>>
>> in this case I never reach the printstatement after the timer.
>>
>> I really don't understand why my flow stops running at these
points,
>>
>> as I never reach an end node. Does anyone see the problem? (I
added a
>>
>> printscreen of my ruleflow)
>>
>> Thx!
>>
>> Femke
>>
>> If I
>
>
>
> _______________________________________________
> 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