2016-08-18 5 views
-1

私は44個のフィールドを含むpojoクラスオブジェクトのリストを持っています。今私は、javaの各オブジェクトを繰り返し、検証のために落とし穴に渡しています。 droolsでリスト全体を検証する方法はありますか?サンプルコードはオブジェクトリストの落ち込み検証

rule "RuleSerialNoContent" 
when 
    droolRecord : DroolRecordBO(flowStatus==droolRecord.FLOW_PASS, 
           serialNo.trim() not matches "^\\d{1,10}$") 
then 
    droolRecord.setRuleStatus(droolRecord.SERIAL_CONTENT_ERR+ 
           " "+droolRecord.getSerialNo()); 
    droolRecord.setFlowStatus(droolRecord.FLOW_ERROR); 
    update(droolRecord); 
end 


rule "RuleInstitutionIdLength" 
when 
    droolRecord : DroolRecordBO(flowStatus==droolRecord.FLOW_PASS, 
           institutionId.length() != 6) 
then 
    droolRecord.setRuleStatus(droolRecord.INSTITUTIONID_LENGTH_ERR); 
    droolRecord.setFlowStatus(droolRecord.FLOW_ERROR); 
    update(droolRecord); 
end 

答えて

0

可能です。 List<DroolRecordBO>を挿入し、すべてのルールに「から」句を追加:リスト要素はもはや事実ではありませんので、

rule "RuleSerialNoContent" 
when 
$list: List() 
droolRecord : DroolRecordBO(flowStatus==droolRecord.FLOW_PASS, 
          serialNo.trim() not matches "^\\d{1,10}$") 
       from $list 
then... 

あなたは更新を省略することができます。

ただし、この微妙に変更されたシナリオでは、いくつかのルールの組み合わせを調整することはできません。

0

オブジェクトのリストに対して操作を実行することは可能です。利点は、各オブジェクトに対してコンパイル時間の苦労を負う必要はなく、一度だけコンパイルすることです。

public static KnowledgeBase getKBase(String filePath) { 

    KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
    kbuilder.add(ResourceFactory.newFileResource(filePath), ResourceType.DRL); 
    KnowledgeBase kbase = kbuilder.newKnowledgeBase(); 
    kbase.addKnowledgePackages(kbuilder.getKnowledgePackages()); 
} 

public static void main(String args[]) { 

    Collection<DroolRecordBO> droolRecordBOs = // Collection of DroolRecordBO 
    KnowledgeBase kbase = getKBase(".drl File Path"); 
    StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession(); 

    for(DroolRecordBO droolRecordBO : droolRecordBOs) { 
     ksession.insert(droolRecordBO); 
    } 
    ksession.fireAllRules(); 
    ksession.dispose(); 
} 

あなたはルールが特定の順序で実行したい場合は、salience

の使用を検討する必要がある場合があります
関連する問題