[
https://issues.jboss.org/browse/DROOLS-2427?page=com.atlassian.jira.plugi...
]
NA NA commented on DROOLS-2427:
-------------------------------
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)