Я использовал компонент KIE и правило drools для создания правила расчета продуктов доставки. Я определил свое правило в * .drl следующим образом:
Мой *.drl
файл:
package shipment.orderrate;
dialect "mvel"
import org.mag.erp.model.Product
function Double calculateVolume(Double height, Double width, Double depth){
if(height == null || width == null || depth == null){
return 0d;
}
if(height == -1 || width == -1 || depth == -1){
return 0d;
}
return height * width * depth;
}
rule "Calculate Shipping_by_volumne"
when
$p: Product(calculateVolume(height, width, depth) >= 0.0, calculateVolume(height, width, depth) < 100.0, shippingTotal == null
then
modify($p){
setShippingTotal(80000.0)
};
end
Класс файла Java Product.java
находится в моем компоненте с исходным кодом:
package org.mag.erp.model;
import java.io.Serializable;
public class Product implements Serializable {
private String productId;
private Double height;
private Double width;
private Double weight;
private Double depth;
private Double shippingTotal;
//*getter and setter property*
}
Когда я запустил moqui, он выдает мне эту ошибку:
00:06:57.151 ERROR main o.drools.c.k.b.i.KieProject Unable to build KieBaseModel:MagOrderShippingRateKB
Unable to resolve ObjectType 'Product' : [Rule name='Calculate Shipping_by_volumne']
Unable to Analyse Expression @Modify with($p){ setShippingTotal(80000.0) };:
[Error: unable to resolve method using strict-mode: org.drools.core.spi.KnowledgeHelper.$p()]
Но если я переместу файл Product.java
в org.moqui.util
пакет в moqui-util
компонент и отредактирую import org.mag.erp.model.Product
в import org.moqui.util.Product
в моем *.drl
файле, moqui запустится нормально и без ошибок.
Почему это случилось? Что такое специальный конфиг в moqui-util
, который делает сборку KieBase
без ошибок, когда я помещаю Product.java
в этот компонент?