Re: [rules-users] Temporal rules in decision table
Amazing! thanks a lot Wolfgang! Kind regards On Wed, Mar 12, 2014 at 10:27 AM, Wolfgang Laun wrote: > You can create a rule with a timer to update Current with the required > frequency. > > rule "set current" >timer (int: 1s 1s) >no-loop > when >$c: Current() > then >modify( $c ){ setXYZ(whatever) } > end > > > > On 11/03/2014, Ioannis Christodoulou wrote: > > Thanks a lot for the prompt reply and the detailed example! > > It took me some time but I managed to convert it to a working xls > decision > > table. > > > > Now, I wanted to figure out how to automatically update the Current > object > > regularly, in order to re-calculate the rules over time. > > My application is a java ee one. Would creating a @schedule on a > singleton > > method be a good solution, or is there another better advice for it? > > > > Thanks again! > > > > Ευχαριστώ πολύ, > >Ιωάννης Χριστοδούλου > > > > > > On Tue, Mar 11, 2014 at 8:50 PM, Wolfgang Laun > > wrote: > > > >> As you have Level with a field date, you can access that point in time > in > >> milliseconds, using getTimeInMillis(). For the current time, you might > >> insert an object of class Current with a member now of class Calendar. > >> > >> rule closest > >> when > >> Current( $now: now ) > >> $level: Level( $value == 2, $date: date ) > >> not $x: Level( Math.abs( $x.getDate().getTimeInMillis() - > >> $now.getTimeInMillis() ) < Math.abs( $date.getTimeInMillis() - > >> $now.getTimeInMillis() ) ) > >> then > >> // $level is the Level fact closest to Current with a level of 2 > >> end > >> > >> Untested. If the long expression gives you trouble, try enclosing it in > >> eval(...). > >> -W > >> > >> > >> On 11 March 2014 18:14, JChrist wrote: > >> > >>> Hello everyone, > >>> I was messing with drools v6.0.1.Final the past week and I have not > been > >>> able to completely understand how to integrate the rule engine to my > >>> specification. > >>> > >>> For the needs of my project, I want to regularly insert some data in > the > >>> engine, similar to the following: > >>> class Level { double value;Calendar date; } > >>> this class contains some values at specific time points (both in the > >>> past > >>> and in the future). > >>> > >>> I would like to be able create a decision table based on the "current" > >>> time > >>> (plus or minus a variable offset) and the value of the closest Level to > >>> that > >>> time point. > >>> > >>> For example, assuming it is '2014-11-03 19:10:00' and the level objects > >>> in > >>> the session currently are: > >>> '1.0 2014-11-03 18:00:00' and '2.0 2014-11-03 19:00:00', > >>> > >>> I would want a rule to say that if current level value is 2.0 then do > >>> some > >>> stuff and it would make a match. > >>> > >>> I would really appreciate any help on how to overcome this issue, as > >>> well > >>> as > >>> any good examples/tutorials regarding this. > >>> > >>> Kind regards. > >>> > >>> > >>> > >>> > >>> -- > >>> View this message in context: > >>> > http://drools.46999.n3.nabble.com/Temporal-rules-in-decision-table-tp4028638.html > >>> Sent from the Drools: User forum mailing list archive at Nabble.com. > >>> ___ > >>> rules-users mailing list > >>> rules-users@lists.jboss.org > >>> https://lists.jboss.org/mailman/listinfo/rules-users > >>> > >> > >> > >> ___ > >> rules-users mailing list > >> rules-users@lists.jboss.org > >> https://lists.jboss.org/mailman/listinfo/rules-users > >> > > > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Temporal rules in decision table
You can create a rule with a timer to update Current with the required frequency. rule "set current" timer (int: 1s 1s) no-loop when $c: Current() then modify( $c ){ setXYZ(whatever) } end On 11/03/2014, Ioannis Christodoulou wrote: > Thanks a lot for the prompt reply and the detailed example! > It took me some time but I managed to convert it to a working xls decision > table. > > Now, I wanted to figure out how to automatically update the Current object > regularly, in order to re-calculate the rules over time. > My application is a java ee one. Would creating a @schedule on a singleton > method be a good solution, or is there another better advice for it? > > Thanks again! > > Ευχαριστώ πολύ, >Ιωάννης Χριστοδούλου > > > On Tue, Mar 11, 2014 at 8:50 PM, Wolfgang Laun > wrote: > >> As you have Level with a field date, you can access that point in time in >> milliseconds, using getTimeInMillis(). For the current time, you might >> insert an object of class Current with a member now of class Calendar. >> >> rule closest >> when >> Current( $now: now ) >> $level: Level( $value == 2, $date: date ) >> not $x: Level( Math.abs( $x.getDate().getTimeInMillis() - >> $now.getTimeInMillis() ) < Math.abs( $date.getTimeInMillis() - >> $now.getTimeInMillis() ) ) >> then >> // $level is the Level fact closest to Current with a level of 2 >> end >> >> Untested. If the long expression gives you trouble, try enclosing it in >> eval(...). >> -W >> >> >> On 11 March 2014 18:14, JChrist wrote: >> >>> Hello everyone, >>> I was messing with drools v6.0.1.Final the past week and I have not been >>> able to completely understand how to integrate the rule engine to my >>> specification. >>> >>> For the needs of my project, I want to regularly insert some data in the >>> engine, similar to the following: >>> class Level { double value;Calendar date; } >>> this class contains some values at specific time points (both in the >>> past >>> and in the future). >>> >>> I would like to be able create a decision table based on the "current" >>> time >>> (plus or minus a variable offset) and the value of the closest Level to >>> that >>> time point. >>> >>> For example, assuming it is '2014-11-03 19:10:00' and the level objects >>> in >>> the session currently are: >>> '1.0 2014-11-03 18:00:00' and '2.0 2014-11-03 19:00:00', >>> >>> I would want a rule to say that if current level value is 2.0 then do >>> some >>> stuff and it would make a match. >>> >>> I would really appreciate any help on how to overcome this issue, as >>> well >>> as >>> any good examples/tutorials regarding this. >>> >>> Kind regards. >>> >>> >>> >>> >>> -- >>> View this message in context: >>> http://drools.46999.n3.nabble.com/Temporal-rules-in-decision-table-tp4028638.html >>> Sent from the Drools: User forum mailing list archive at Nabble.com. >>> ___ >>> rules-users mailing list >>> rules-users@lists.jboss.org >>> https://lists.jboss.org/mailman/listinfo/rules-users >>> >> >> >> ___ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Temporal rules in decision table
Thanks a lot for the prompt reply and the detailed example! It took me some time but I managed to convert it to a working xls decision table. Now, I wanted to figure out how to automatically update the Current object regularly, in order to re-calculate the rules over time. My application is a java ee one. Would creating a @schedule on a singleton method be a good solution, or is there another better advice for it? Thanks again! Ευχαριστώ πολύ, Ιωάννης Χριστοδούλου On Tue, Mar 11, 2014 at 8:50 PM, Wolfgang Laun wrote: > As you have Level with a field date, you can access that point in time in > milliseconds, using getTimeInMillis(). For the current time, you might > insert an object of class Current with a member now of class Calendar. > > rule closest > when > Current( $now: now ) > $level: Level( $value == 2, $date: date ) > not $x: Level( Math.abs( $x.getDate().getTimeInMillis() - > $now.getTimeInMillis() ) < Math.abs( $date.getTimeInMillis() - > $now.getTimeInMillis() ) ) > then > // $level is the Level fact closest to Current with a level of 2 > end > > Untested. If the long expression gives you trouble, try enclosing it in > eval(...). > -W > > > On 11 March 2014 18:14, JChrist wrote: > >> Hello everyone, >> I was messing with drools v6.0.1.Final the past week and I have not been >> able to completely understand how to integrate the rule engine to my >> specification. >> >> For the needs of my project, I want to regularly insert some data in the >> engine, similar to the following: >> class Level { double value;Calendar date; } >> this class contains some values at specific time points (both in the past >> and in the future). >> >> I would like to be able create a decision table based on the "current" >> time >> (plus or minus a variable offset) and the value of the closest Level to >> that >> time point. >> >> For example, assuming it is '2014-11-03 19:10:00' and the level objects in >> the session currently are: >> '1.0 2014-11-03 18:00:00' and '2.0 2014-11-03 19:00:00', >> >> I would want a rule to say that if current level value is 2.0 then do some >> stuff and it would make a match. >> >> I would really appreciate any help on how to overcome this issue, as well >> as >> any good examples/tutorials regarding this. >> >> Kind regards. >> >> >> >> >> -- >> View this message in context: >> http://drools.46999.n3.nabble.com/Temporal-rules-in-decision-table-tp4028638.html >> Sent from the Drools: User forum mailing list archive at Nabble.com. >> ___ >> rules-users mailing list >> rules-users@lists.jboss.org >> https://lists.jboss.org/mailman/listinfo/rules-users >> > > > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users
Re: [rules-users] Temporal rules in decision table
As you have Level with a field date, you can access that point in time in milliseconds, using getTimeInMillis(). For the current time, you might insert an object of class Current with a member now of class Calendar. rule closest when Current( $now: now ) $level: Level( $value == 2, $date: date ) not $x: Level( Math.abs( $x.getDate().getTimeInMillis() - $now.getTimeInMillis() ) < Math.abs( $date.getTimeInMillis() - $now.getTimeInMillis() ) ) then // $level is the Level fact closest to Current with a level of 2 end Untested. If the long expression gives you trouble, try enclosing it in eval(...). -W On 11 March 2014 18:14, JChrist wrote: > Hello everyone, > I was messing with drools v6.0.1.Final the past week and I have not been > able to completely understand how to integrate the rule engine to my > specification. > > For the needs of my project, I want to regularly insert some data in the > engine, similar to the following: > class Level { double value;Calendar date; } > this class contains some values at specific time points (both in the past > and in the future). > > I would like to be able create a decision table based on the "current" time > (plus or minus a variable offset) and the value of the closest Level to > that > time point. > > For example, assuming it is '2014-11-03 19:10:00' and the level objects in > the session currently are: > '1.0 2014-11-03 18:00:00' and '2.0 2014-11-03 19:00:00', > > I would want a rule to say that if current level value is 2.0 then do some > stuff and it would make a match. > > I would really appreciate any help on how to overcome this issue, as well > as > any good examples/tutorials regarding this. > > Kind regards. > > > > > -- > View this message in context: > http://drools.46999.n3.nabble.com/Temporal-rules-in-decision-table-tp4028638.html > Sent from the Drools: User forum mailing list archive at Nabble.com. > ___ > rules-users mailing list > rules-users@lists.jboss.org > https://lists.jboss.org/mailman/listinfo/rules-users > ___ rules-users mailing list rules-users@lists.jboss.org https://lists.jboss.org/mailman/listinfo/rules-users