3

私は Drools を初めて使用し、サンプル プログラムを動作させようとしています。このサンプルは、drools のドキュメントhttp://docs.jboss.org/drools/release/5.5.0.Final/drools-expert-docs/html_single/index.html#d0e9542に記載されています。このよだれルールは、整数をソートすることが期待されています。サンプルで指定されている数値を変更しただけで、期待どおりに並べ替えられません。drools バージョン 5.5.0、5.5.1、およびマスター 6.0.0 を使用してみましたが、同じ間違った結果が得られました。

主なコードは次のとおりです。

    パッケージcom.sample;

    パブリック クラスの例 2 {
      public static void main(String[] args) throws Exception {
        Number[] numbers = new Number[] { wrap(5), wrap(6), wrap(4), wrap(1), wrap(2) };
        new RuleRunner().runRules(new String[] { "Example3.drl" }, numbers);
      }

      プライベート静的整数ラップ(int i){
        新しい整数 (i) を返します。
      }
    }

RuleRunner クラスは例で示したものと同じですが、質問が煩雑になるため、ここで指定する必要はないと思います。KnowledgeBase のステートフル セッションを作成し、上記の「numbers」配列に指定されたファクトを挿入し、セッションで fireAllRules メソッドを呼び出すだけです。

ルール ファイル (Example3.drl) は次のとおりです。


rule "Rule 04"
    dialect "mvel"
  when
    $number : Number()
    not Number(intValue < $number.intValue)
  then
    System.out.println("Number found with value: " + $number.intValue());
    撤回($数);
終わり

私が得る出力は次のとおりです。

ファイルのロード: Example3.drl
挿入事実: 5
挿入事実: 6
挿入事実: 4
事実の挿入: 1
挿入事実: 2
値が見つかった数: 1
値が見つかった数: 4
値が見つかった数: 2
値が見つかった数: 5
値が見つかった数: 6

予期される正しい昇順ソートではありません。

私は何を間違っているのでしょうか?drools ルール エンジンがこの基本レベルで壊れるとは想像できません。

4

1 に答える 1

1

これは、5.5.0 以降で導入され、まだ存在するバグのようです。
このソート コードは 5.4.0 で正常に動作します。

回避策:



  「not Number(intValue < $number.intValue)」の代わりに  「not Number(intValue() < $number.intValue)」
を使用すると、機能します。



関数であることを伝えずに非 getter メソッドを使用すると、問題が発生するようです。

評価段階で製品の信頼性を低下させる、衰弱させる問題。

于 2013-01-18T05:03:30.307 に答える