[rules-users] Rule does not fire after 'Modify/Update' of a fact - Drools 5.1.1 !
Wolfgang Laun
wolfgang.laun at gmail.com
Tue Apr 5 01:56:24 EDT 2011
What happens if you insert two Product/Option pairs, one with the price
already set and the other still with price == null?
One thing that could explain the effect you describe it is calling
ksession.fireAllRules( 1 )
to run the engine. If this isn't the cause, we'd need to see all the code,
in a minimum examle to reproduce this.
-W
On 5 April 2011 05:38, groovenarula <gnarula1 at la-z-boy.com> wrote:
> Hello all,
>
> For some reason I have a rule that does not fire after a Modify/Update.
>
> I have 2 facts - Product and Option. The relationship between them is that
> a
> 'Product' can have 0 - N 'Option'(s).
>
> Based on that, I added a 'product' field to the 'Option' object. I'm
> creating and inserting my facts
> using the following code :
>
> Product prod = new Product ("001","002", "A");
> prod.setPrice(new BigDecimal("300.00"));
> Option opt = new Option ("H1","",prod);
>
> ksession.insert(prod);
> ksession.insert(opt);
>
>
> Now in my .DLR, I have the following rule :
>
> rule "Set Options price"
> salience 50
>
> when
>
> $prod : Product ( price != null )
> $option : Option ( product == $prod )
>
> then
>
> System.out.println( "Getting Options " + $prod );
>
> end
>
> This gives me the correct output in the console :
>
> Getting Options Product [category=001, grade=A, price=300.00, style=002]
>
> The rule fired successfully.
>
> I start running into problems when I try to update the 'price' field using
> a
> rule, instead of through code.
>
> So for example, if I have the following rule also defined in the same drl
> file :
>
> rule "Set price"
> salience 500
>
> when
>
> $prod : Product ( category == "001", price == null )
>
> then
>
> $prod.setPrice ( new BigDecimal ( "300.00" ) );
> update( $prod );
> System.out.println( $prod );
>
> end
>
> And then change my code as follows (remove the setPrice call) :
>
> Product prod = new Product ("001","002", "A");
> Option opt = new Option ("H1","",prod);
>
> ksession.insert(prod);
> ksession.insert(opt);
>
> I only get the following output :
>
> Product [category=001, grade=A, price=300.00, style=002]
>
> What am I missing here ? I thought the rule 'Set Price' should update the
> product fact with
> the new price and the rules would get re-evaluated. After the
> re-evaluation,
> the LHS of 'Set Options Price' should now be true and it should have fired.
> But it does not.
>
> Am I mis-understanding something about activation here ? If I am, can
> someone please help explain what the gap is and how to re-write the rules
> so
> that I can achieve the above objective ?
>
> Any help will be appreciated. I've spend several hours trying different
> permutations and combinations and got no where.
>
> Thanks
> Gurvinder
>
>
> --
> View this message in context:
> http://drools-java-rules-engine.46999.n3.nabble.com/Rule-does-not-fire-after-Modify-Update-of-a-fact-Drools-5-1-1-tp2778508p2778508.html
> Sent from the Drools - User mailing list archive at Nabble.com.
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110405/6552f145/attachment.html
More information about the rules-users
mailing list