0

Eclipse に非常に単純な Drools プロジェクトがあり、問題なく完了するまで実行されますが、.drl ファイルを開くかクリックすると、Eclipse で次のエラーが表示されます。

エラーが発生しました。詳細については、エラー ログを参照してください。org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction を org.drools.runtime.rule.AccumulateFunction にキャストできない

[OK] をクリックしてプログラムを再度実行すると、問題なく動作します。.drl ファイルをクリックして再度クリックすると、エラーが再び表示されます。Eclipse ログには、次のスタック トレースがあります。

エントリー org.eclipse.ui.workbench 4 2 2016-08-25 23:35:24.144

!MESSAGE プラグイン「org.eclipse.ui.workbench」からコードを呼び出すときに問題が発生しました。

!STACK 0 java.lang.ClassCastException: org.drools.core.base.accumulators.BigDecimalSumAccumulateFunction は org.drools.compiler.PackageBuilderConfiguration.loadAccumulateFunction(PackageBuilderConfiguration.java:530) で org.drools.runtime.rule.AccumulateFunction にキャストできませんorg.drools.compiler.PackageBuilderConfiguration.buildAccumulateFunctionsMap(PackageBuilderConfiguration.java:479) org.drools.compiler.PackageBuilderConfiguration.init(PackageBuilderConfiguration.java:194) org.drools.compiler.PackageBuilderConfiguration.(PackageBuilderConfiguration.java:170) org.drools.eclipse.DroolsEclipsePlugin.generateParsedResource(DroolsEclipsePlugin.java:612) で org.drools.eclipse.DroolsEclipsePlugin.parseResource(DroolsEclipsePlugin.java:515) で org.drools.eclipse.editors.outline.org.drools.eclipse.editors.outline.RuleContentOutlinePage.update(RuleContentOutlinePage.java:159) の RuleContentOutlinePage.initRules(RuleContentOutlinePage.java:279) org.drools.eclipse.editors.outline.RuleContentOutlinePage.createControl(RuleContentOutlinePage.java: 133)

ここでスタック トレース全体を参照してください: http://pastebin.com/hJK1Cs03

私のプログラム:

import org.kie.api.KieServices;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;

public class GhostFactTest {

    public static final void main(String[] args) {
        try {
            // load up the knowledge base
            KieServices ks = KieServices.Factory.get();
            KieContainer kContainer = ks.getKieClasspathContainer();
            KieSession kSession = kContainer.newKieSession("ksession-rules");

            FruitFact f1 = new FruitFact(1, "APPLE", "RED");
            FruitFact f2 = new FruitFact(2, "APPLE", "GREEN");

            kSession.insert(f1);
            kSession.insert(f2);
            kSession.fireAllRules();

            System.out.println("\n********************\nSUCCESS!\n********************");

        } catch (Throwable t) {
            t.printStackTrace();
        }
    }
}

エラーをスローするために、.drl にルールを含める必要はまったくありません。コンパイル時または実行時にエラーはありません。

Drools 6.[0-4].0.Final を個別の Drools ランタイムとしてインストールしていますが、Drools 6.0.0.Final を除くすべてのバージョンでこの問題が発生しています。私はJava7を実行しています。Drools 5.5.0.Final で非常によく似たプログラムを問題なく実行することもできます。

プログラムが予期した動作で成功し、.drl が空の場合でもエラーがスローされることを考えると、これは Eclipse と私のプロジェクト設定の問題であると考える傾向があります。これを解決する方法についてのガイダンスはありますか? 前もって感謝します。

4

1 に答える 1

1

問題は、Drools 6 プロジェクトで Drools 5.5.0.Final Eclipse プラグインを使用していたことです。Drools 6.4.0.Final Eclipse プラグインにアップグレードした後、問題はなくなりました。

于 2016-09-26T23:40:19.853 に答える