[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:08:00 EDT 2018


    [ https://issues.jboss.org/browse/DROOLS-2427?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13552338#comment-13552338 ] 

NA NA edited comment on DROOLS-2427 at 3/27/18 1:07 PM:
--------------------------------------------------------

It behaves the same way (ignores the watch annotation) with the use of setter only. Not sure if its related to accumulate or not, but without accumulate it works just fine. 


was (Author: sash101):
It behaves the same way (ignores the watch annotation) with the use of setter only. Not sure if its related to accumulate or not, but without accumulate it works just fine.

> 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