0
文書によると、「強制はフィールドタイプではなく値型の賛成で常に」Droolsの強制は、私が試したし、それは常に真実ではない代
に失敗します。
ルール:
rule "get event field "
when
m : Message(getEventField("bigDecimalB") > "7.5")
then
System.out.println("hit");
end
Messageクラス:
public class Message {
private Map<String, Object> map = new HashMap<String, Object>();
public Object getEventField(String key) {
Object object = map.get(key);
if (object != null) {
//class=java.math.BigDecimal in my test
System.out.println("getEventField, fieldName=" + key + ", class=" + object.getClass().getCanonicalName());
}
return object;
}
//setter and getter
}
とテスト:ほとんどのケースで
String str = "{\"bigDecimalB\":10.2}";
Map<String, Object> map = JSON.parseObject(str);
Message message = new Message();
message.setMap(map);
kSession.insert(message);
kSession.fireAllRules();
、それは "のBigDecimal comparation" であると明らかに10.2> 7.5、それは 'ヒット'を出力します。
しかし、失敗することがあり、「ヒット」が印刷されないことがあります。
強制は成功しておらず、「文字列比較」です。再現するのは難しいです。私は完全に混乱していて、理由を知らない。
私はdrools-6.2.0-finalとalibabaのfastjson(https://github.com/alibaba/fastjson)を使用しています。
ありがとうございました。
実行時にdroolsは正確なタイプを知っていますか? – bylijinnan
はい、それは遅すぎます。あなたが念頭に置いておくと、多くの可能性の間で動的な決定が必要です。 – laune