0

Drools 5.1.1 では問題なく動作している Drools ルールがいくつかありますが、5.5.0 にアップグレードすると壊れます。次に例を示します。

when
    Map( $limit: this["FailureLimit"] ) 
    activity: LimitExceededActivity( failureRate > $limit)
then
    ...

次のエラーが表示されます。

[Error: Comparison operation requires compatible types. Found float and class java.lang.Object]
[Near : {... failureRate > $limit ....}]

この場合のマップは HashMap<String, Number> です。消去のために Drools が必ずしもこれを認識しているとは限りませんが、どうすれば $limit が数値であることを納得させることができるでしょうか?

4

2 に答える 2

0

あまり派手ではありませんが、解決策は次のとおりです。

when
    $m: Map(this["FailureLimit"] != null) 
    LimitExceededActivity( $f: failureRate)
    $limit: Number(floatValue < $f) from $m["FailureLimit"]
then

ユースケースによっては、最初のパターンの 'this["FailureLimit"] != null' を削除できます。

このソリューションの背後にあるアイデアは、「from」パターンにキャストを任せることです。

それが役に立てば幸い、

于 2013-10-03T13:01:31.687 に答える