2016-06-21 9 views
0

私はDROOLSを使ってプログラムを書いています。私はDSLを使っています。質問があります。 DSLRファイルを変更した後(削除、追加)、作業メモリー内のルールを更新しますか?ルールを追加すると、新しいルールは作業メモリに表示されません。DSLRファイルを変更した後のルールの更新方法は?

public class Drools { 
private KnowledgeBase knowledgeBase; 

public Drools() { 
    knowledgeBase = createKnowledgeBaseFromDSL(); 
} 

private KnowledgeBase createKnowledgeBaseFromDSL() { 
    KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(); 
    builder.add(ResourceFactory.newClassPathResource("rules/simple.dsl"), ResourceType.DSL); 
    builder.add(ResourceFactory.newClassPathResource("rules/simple.dslr"), ResourceType.DSLR); 

    if (builder.hasErrors()) { 
     throw new RuntimeException(builder.getErrors().toString()); 
    } 

    KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(); 
    knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages()); 

    return knowledgeBase; 
} 

public void fireAllRules() throws IOException { 
    Properties properties = new Properties(); 
    try (BufferedReader fileReader = Files.newBufferedReader(Paths.get("src/main/resources/setting.properties"))) { 
     properties.load(fileReader); 
     StatefulKnowledgeSession session = knowledgeBase.newStatefulKnowledgeSession(); 
     try { 
      HttpReader reader = new HttpReader(properties.getProperty("url")); 
      session.insert(reader); 
      session.fireAllRules(); 
     } finally { 
      session.dispose(); 
     } 
    } 
} 

}

答えて

0

更新DSLまたはDRLまたはDSLRファイルは、自動的に進行中のセッションは変更されません。

Drools 5には、ディレクトリを監視し、ナレッジベースを自動的に再構築してセッションを更新するサービスがありました。しかし、これはDrools 6では継続されていません。

あなたのユースケースによって異なります。 Javaの機能を使用してディレクトリを非常に簡単に監視できます。次に、コードを再構築します。そして、私は、新しいセッションを開始するのが最善の方法だと思います。しかし、これはあなたのデータがどのように到着し、作業メモリに保持されているかどうかに依存します。

関連する問題