The basic behaviour of the engine is to re-evaluate all rules where a
new, updated or deleted fact is referenced via its (sub)class or some
interface name. If the LHS is true, the rule is fired.
To insert a complex fact requiring setter calls, make sure to do the
insert() after all the settings.
There are some variations due to rule attributes, see the docs.
-W
On Tue, Nov 10, 2009 at 1:37 PM, Javier Vera Gomez
<Javier.Vera(a)andorratelecom.ad> wrote:
Man... you made my day!
Such a Dumb! Thats true, first is inserted the Task and after that the Param is added. Im
wondering if I update the fact, all the rules fired before updating it would fire again?
Or just the rules which conditions are changed?
I guess:
R1
When
T
T.X
Then
...
R2
When
T
T.Y
Then
...
R3
When
T
Then
...
If T is asserted but not T.X neither T.Y, R3 is fired. If after this, T.X is asserted (I
mean updating T), I guess R3 will not be fired again... and if T is updated again but
retracting T.X, then R1 should perform rollback of the RHS clausure... is this the actual
behavior?
-----Mensaje original-----
De: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org] En
nombre de Wolfgang Laun
Enviado el: dimarts, 10 / novembre / 2009 12:41
Para: Rules Users List
Asunto: Re: [rules-users] Inconsistent behavior between LHS and RHS ...
There are a couple of scenarios that might produce this effect:
One is:
// session is running !
Task t = new Task();
session.insert ( t );
t.getTechnicalParams().add(...)
Can you exclude this or a similar scenario, where Parameters are added
to an existing Task() fact, without update() of the fact?
-W
On Tue, Nov 10, 2009 at 9:22 AM, Javier Vera Gomez
<Javier.Vera(a)andorratelecom.ad> wrote:
> Thanks for answering,
>
> Further detail:
> The actual output is the rule is fired (ie, the param is not found) and then the
param is printed out. So, in fact, the param does exists.
>
> The Task is created as usual, nothing special here (insert (new Task...)
>
> Code fragment from Task.java:
>
> public String getParameter(String name){
> for (Parameter param : getTechnicalParams()) {
> if( name.equals(param.getName()) ) {
> return param.getValue();
> }
> }
> return null;
> }
>
> @XmlElement(name="parameter",nillable = true)
> @XmlElementWrapper(name="technicalParams")
> protected List<Parameter> technicalParams;
>
> public List<Parameter> getTechnicalParams() {
> if (technicalParams == null) {
> technicalParams = new ArrayList<Parameter>();
> }
> return this.technicalParams;
> }
>
>
> It is important to note that in other flows of similar rules this is working
perfect... I know I have not giving so much input but I do not know what else could
provide.
>
> Any clues ?
>
> -----Mensaje original-----
> De: rules-users-bounces(a)lists.jboss.org [mailto:rules-users-bounces@lists.jboss.org]
En nombre de Wolfgang Laun
> Enviado el: dilluns, 9 / novembre / 2009 13:56
> Para: Rules Users List
> Asunto: Re: [rules-users] Inconsistent behavior between LHS and RHS ...
>
> It's difficult to assess this case without the code from Task.java,
> especially mehtods getParameter(), getTechnicalParams(); the code used
> to create the Task fact, and the actual output.
> -W
>
> 2009/11/9 Javier Vera Gomez <Javier.Vera(a)andorratelecom.ad>:
>> Hi,
>>
>> I've been using drools 4.07 for a while. I have found a weird case. It seems
>> that when evaluating the LHS some fact is true but the RHS probes it wasn't
>> actually true.
>>
>> The example code is at the end. It is very weird to me I have no clue about
>> how to solve this or what could be happening!
>>
>> rule "A-Rule"
>> no-loop true
>> ruleflow-group "validate-task"
>> salience -9999999
>> when
>> >$task : Task( type == "Creacio_Profile_Radius" )
>> >eval($task.getParameter("PRIMARYDNS")==null)
>> then
>> >System.out.println(">>>DBGPar0:
>> "+$task.getTechnicalParams().get(0).getName());
>> >System.out.println(">>>DBGPar1:
>> "+$task.getTechnicalParams().get(1).getName());
>> >System.out.println("Getparam PRIMARYDNS:
>> "+$task.getParameter("PRIMARYDNS"));
>> end
>>
>>
>> further explanation:
>>
>> The Task class has a List<Parameter> technicalParams, originally the eval
>> part was:
>> not(Parameter (name=="PRIMARYDNS") from $task.technicalParams())
>>
>> it didn't work and I coded this "getParameter" method just to make
some
>> tests. So, it seems the collection appears "empty" to the LHS but in
fact it
>> isnt!
>>
>> any clue?
>>
>> thanks a lot,
>>
>> Javier
>>
>> _______________________________________________
>> 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
>
_______________________________________________
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