2016-12-20 21 views
0

パフォーマンスの問題から、同じKieBaseオブジェクトを再利用して、同じルールセットに対する各ルール呼び出しに対して新しいKieSessionを生成しようとします。 Everthingythは、キャッシュされたkieBaseから新たに作成されたkieSessionが突然、それが想定されていたルールを起動するのを止めるまで、うまく機能します。KieBaseオブジェクトが破損しましたか?

しかし、キャッシュされたkieBaseを取り除き、新しいkieBaseと新しいkieSessionを再作成すると、すぐに作業が開始されます。

kieBaseオブジェクトはセッション固有のデータを保持していません。しかし、この動作は、キャッシュされたkieBaseが時間の経過とともに改ざんされる可能性があることを示しているようです。

私たちが使用しているバージョンは6.3.0.Finalです。

これに関するヒントは高く評価されます。

+0

は、私はあなたが効果を再現する例を提供し、DroolsのJIRA上のエラーを発生させることを示唆しています。 SOはあなたにバグを手伝うことができません。 – laune

答えて

0

この問題もありました。矢継ぎ早で20回のセッションを作成した後、21日のセッションは、以前の20回のセッション上で動作しなかったにもかかわらず、このルールでのBigDecimalへのキャストにClassCastExceptionがスローになりますビットの周りを掘った後

rule IsMaterialChange_TotalMonthlyIncomeAmountUpdate when 
    Data("TOT_MO_INCM_AMT-ORIGINAL_VALUE"; $originalTotalMonthlyIncomeAmount : value) 
    Data("TOTALMONTHLYINCOMEAMOUNT"; (BigDecimal) value != (BigDecimal) $originalTotalMonthlyIncomeAmount) 
then 
    insert(new IsMaterialChange("TotalMonthlyIncomeAmountUpdate", true)); 
end 

、私が見つかりました。 this answerはJITコンパイラを原因として指しています。それは私の問題と正確に並んだデフォルトの閾値20を持っています。なんらかの理由で、JITコンパイラはこの値をキャストする際に問題があります。

は、私はこのようなJITコンパイラを無効:

KieContainer kieContainer = kieServices.newKieContainer(kieServices.getRepository().getDefaultReleaseId()); 
KieBaseConfiguration kieBaseConfiguration = kieServices.newKieBaseConfiguration(); 

// Disable JIT Compiler to prevent ClassCastException BigDecimal 
kieBaseConfiguration.setOption(ConstraintJittingThresholdOption.get(-1)); 
KieBase kieBase = kieContainer.newKieBase(loaderKey, kieBaseConfiguration); 
+1

こんにちはcurbo、コメントにこれらの種類の応答を投稿する必要があります。これは答えではなく、人々はそれを下降させます。 – klvs

関連する問題