2012-03-20 10 views
1

私はいくつかのビジネスルールを書くのにJBoss Droolsを使用しています。私は "存在しない"ルールに問題があります。これは私のコードです。Droolsのルールが「存在しません」

rule "ATL 27R-A12 Subfleet A319-100 Departure configuration list has flap 1" 
    salience 20 
    no-loop true 
    when 
     AircraftConfig(aircraftType=="A319-100") 
     RunwayInfo(airport3lCode== "ATL", runwayId == "27R-A12") 
     not (exists (DepartureConfiguration(flap == 1))) 
    then 
     throw new RuleNotMatchException("The configurations do not match the rule of this runway."); 
end 

私の事実が含まれていますAircraftConfigRunwayInfoといくつかのDepartureConfigurationsを。 DepartureConfigurationがない場合はルールを発動したいです。flap=1です。つまり、DepartureConfigurationsが3つあり、そのうちの1つがflap=1、その他がflap=2またはflap=3の場合、このルールは起動しません。 どうすればこの作品を作れるのですか?

+0

あなたのコードは、そこに冗長な「存在」があるにもかかわらず、ルールを実行する必要があります。しかし、ルールの結果として例外を発生させるべきではありません。あなたの説明だけでは、問題は何かを知ることはできません。詳細を追加できますか?また、どのバージョンのDroolsを使用していますか? –

+0

@EdsonTirelli私はDrools 5.3.0-finalを使用しています。あなたが望むディテールがわからないので、私はJavaコードをコピーしました: 'List result = new ArrayList (); \t \tナレッジベースkbase = readKnowledgeBase( "runway.A319.landing.drl"); \t \t StatelessKnowledgeSession ksession = kbase \t \t \t \t .newStatelessKnowledgeSession()。 \t \tリストファクト= new ArrayList (); \t \t facts.add(subFleet); \t \t facts.add(滑走路); \t \t facts.addAll(設定); \t \t ksession.execute(事実); ' –

+0

これはkbaseの唯一のルールですか?どのルールがルールを起動できないかを知るための条件をコメントアウトしてみてください。監査ログまたはEclipseデバッガーを使用して把握することはできますが、単純なルールのために条件をコメントアウトしてどちらが失敗しているかを見つけ出し、問題を診断することができます。 –

答えて

5

ファクトが存在しないかどうかを確認するキーワードは、not existsではなく、notです。あなたの状態の最後の行を次のように変更してください:

not DepartureConfiguration(flap == 1) 
+0

))」もうまくいくはずですが、冗長で高価になります。 –

0

実際には、私は自分のルールに矛盾を作りました。私は、ルールがdrlファイルの先頭から最後まで実行されるべきだと思っていました。ルールフローを追加して私の問題を解決しました。また、私に提案をしてくれた皆さん、ありがとう。

関連する問題