[jboss-jira] [JBoss JIRA] (DROOLS-2427) Drools @Watch not working with accumulate in code
Mario Fusco (JIRA)
issues at jboss.org
Wed Mar 28 11:40:01 EDT 2018
[ https://issues.jboss.org/browse/DROOLS-2427?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13553032#comment-13553032 ]
Mario Fusco commented on DROOLS-2427:
-------------------------------------
Fix cherry-picked to branch 7.7.x with https://github.com/kiegroup/drools/commit/c5b998e776baeabbe297013727afef0bde1051c8
> 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