👽个人博客:https://everspring.github.io/
👽公众号:爱历史的IT男
Drools的规则在测试的时候一定要多线程去压一次。以下问题都是在一条请求下正常,多线程或者连续请求几十次以上才出现的问题。
- Exception in thread "Thread-52" java.lang.RuntimeException: Null accessor on node 原因未知,不用管,不会影响规则的触发。 这个问题一般是在第20次运行的时候出来
- 出现以下异常
异常一、java.lang.RuntimeException: Exception jitting:
异常二、java.lang.VerifyError method: evaluate signature: (Ljava/lang/Object;Lorg/drools/common/InternalWorkingMemory;Lorg/drools/reteoo/LeftTuple;)Z) Expecting to find object/array on stack
异常三、NullPointerException
出现此类异常是因为有 整数数组 contains ...,比如以下
rule "UW7133"
salience 44
activation-group "UW"
agenda-group "UW"
when
$uw:UWCalculateBase();
$pol:LCPolSchema();
$cont:LCContSchema(SaleChnl=="03"&&(BankCode=="0128" && $pol.PayIntv == 12 &&[3,5] contains $pol.PayEndYear && $pol.PayEndYearFlag=="Y";
then
System.out.println("trigger: " + kcontext.getRule().getName());
drlResult.setResultMessage(kcontext.getRule().getName());
end
PayEndYear是int类型,[3,5] contains $pol.PayEndYear 就会导致以上问题。改成字符串正常,比如:
["3", "5"] contains String.valueOf($pol.PayEndYear)
3、java.lang.ClassCastException: java.lang.String cannot be cast to [I
是因为比较的时候是字符串==数字,比如 PayEndYear是字符串,PayEndYear == 1这种情况下就会出现以上异常。没有并发情况下是正常的,但有并发就会出现