[jboss-jira] [JBoss JIRA] (DROOLS-2427) Drools @Watch not working with accumulate in code

NA NA (JIRA) issues at jboss.org
Tue Mar 27 13:04:01 EDT 2018


     [ https://issues.jboss.org/browse/DROOLS-2427?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

NA NA updated DROOLS-2427:
--------------------------
    Attachment: PropertyReactiveBug.zip


> Drools @Watch not working with accumulate in code
> -------------------------------------------------
>
>                 Key: DROOLS-2427
>                 URL: https://issues.jboss.org/browse/DROOLS-2427
>             Project: Drools
>          Issue Type: Bug
>          Components: core engine
>            Reporter: Mario Fusco
>            Assignee: Mario Fusco
>         Attachments: PropertyReactiveBug.zip
>
>
> I'm using Drools 7.6 and for some reason @watch doesn't stop the rule from reactivating itself or other rules when only the unwatched property is changed. Which results in an infinite loop.
> Can someone figure out what am I doing wrong?
> The rule:
> {code}
> package com.model
> import com.model.*;
> import java.util.List;
> rule "10% for 15 High-range Items"
>     when
>         $o: Order($lines: orderLines) @watch(!discount)
>         Number(intValue >= 15) from accumulate(
>             OrderLine($item: item, $q: quantity) from $lines and
>             Item(category == Item.Category.HIGH_RANGE) from $item,
>             sum($q)
>         )
>     then
>         modify($o) {increaseDiscount(0.10)}
> end
> {code}
> The model used is from the book Mastering JBoss Drools. The method increase discount has been annotated with @Modifes. The order class:
> {code}
> public class Order implements Serializable {
>     private static final long serialVersionUID = 1L;
>     private Long orderId;
>     private Date date;
>     private Customer customer;
>     private List<OrderLine> orderLines = new ArrayList<>();
>     private Discount discount;
>     public Order() {
>     }
>     public Long getOrderId() {
>         return orderId;
>     }
>     public void setOrderId(Long orderId) {
>         this.orderId = orderId;
>     }
>     public Customer getCustomer() {
>         return customer;
>     }
>     public void setCustomer(Customer customer) {
>         this.customer = customer;
>     }
>     public Date getDate() {
>         return date;
>     }
>     public void setDate(Date date) {
>         this.date = date;
>     }
>     public List<OrderLine> getOrderLines() {
>         return orderLines;
>     }
>     public void setItems(List<OrderLine> orderLines) {
>         this.orderLines = orderLines;
>     }
>     public double getTotal() {
>         return this.getOrderLines().stream()
>                 .mapToDouble(item -> item.getItem().getSalePrice() *     item.getQuantity())
>                 .sum();
>     }
>     public int getTotalItems() {
>         return this.getOrderLines().stream()
>                 .mapToInt(item -> item.getQuantity())
>                 .sum();
>     }
>     @Modifies({"discount"})
>     public void increaseDiscount(double increase) {
>         if (discount == null) {
>             discount = new Discount(0.0);
>         }
>         discount.setPercentage(discount.getPercentage() + increase);
>     }
>     public Discount getDiscount() {
>         return discount;
>     }
>     public double getDiscountPercentage() {
>         return discount.getPercentage();
>     }
>     public void setDiscount(Discount discount) {
>         this.discount = discount;
>     }
> }
> {code}



--
This message was sent by Atlassian JIRA
(v7.5.0#75005)


More information about the jboss-jira mailing list