2017-12-02 11 views
0

私は異なるファイルを処理するプロジェクトに取り組んでいます。異なるファイルごとに、データベースからフェッチするいくつかのルールを実行する必要があります。さて、ファイルの各行のルールをコンパイルすると、時間がかかり、パフォーマンス上の問題が発生します。だから、私たちはアプリケーションの起動時にすべてのルールをコンパイルし、kieContainerを作成しています。しかし、ファイルIDに基づいてファイル固有のルールを実行する方法がわかりません。あなたは助けてもらえますか?Drools - パラメータに基づいてKie Containerから特定のルールを実行する

は、例えば、私は5は、ファイル1のためのものであり、図5は、以下のコードでファイル2

ためのもので休ませた合計10個のルールを持ってID 1と2との2つのファイルを持って、それはすべての10を発射します両方のファイルのルール。ここで

は私のサンプルコードです:

@Bean 
public KieContainer kieContainer() throws IOException { 

    KieServices kieServices = KieServices.Factory.get(); 
    KieFileSystem kieFileSystem = kieServices.newKieFileSystem(); 

    // To get rules from DB 
    List<String> rules = loadRules(); 

    int i=0; 
    for (String file : rules) { 
     kieFileSystem.write("src/main/resources/rules/" + "a"+i+".drl", kieServices.getResources().newReaderResource(new StringReader(file))); 
     i++; 
    } 

    KieBuilder kieBuilder = kieServices.newKieBuilder(kieFileSystem); 
    kieBuilder.buildAll(); 

    KieModule kieModule = kieBuilder.getKieModule(); 

    return kieServices.newKieContainer(kieModule.getReleaseId()); 
} 

//私は議題のグループにあなたのルールを再分割ルール

KieSession kieSession = kieContainer.newKieSession(); 
kieSession.insert(myObject); 
kieSession.fireAllRules(); 
kieSession.dispose(); 

答えて

0

を実行します。

agenda-group "a" // or add this to each rule a1, a2,... 
rule a1 ... 
rule a2 ... 
agenda-group "b" 
rule b1 ... 
rule b2 ... 

をあなたがfireAllRulesにあなたに電話をかける前にどのグループを使用するかを決定し、フォーカスを設定する必要があります。

String group = ...; 
kieSession.getAgenda().getAgendaGroup(group).setFocus(); 
kieSession.insert(myObject); 
kieSession.fireAllRules(); 
関連する問題