1

Drool Fusion (バージョン 5.4.1) で次のルールを実行しようとしていますが、機能していません。

理想的には、「HELLO WORLD」を 7 秒ごとに出力する必要があります。1 回もトリガーしません。

Drools のタイマーを理解するのを手伝ってくれる人はいますか?

     import com.drools.message.Message

rule "Test" 
    timer(int: 7s 7s)
when
    message:Message (type=="Hello")
then
    System.out.println("Hello World, Drools! " + message.getMsgtext());
end
   My code to run the above Rule is:
public class TestDrools {

  private static String DRL_FILE = "test_drools.drl";
  private static KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
          .newKnowledgeBuilder();
  private static Collection pkgs;
  private static KnowledgeBase kbase = KnowledgeBaseFactory
          .newKnowledgeBase();
  private static StatefulKnowledgeSession ksession;

  private static WorkingMemoryEntryPoint entryPoint;

  public static void main(String[] args) {
      init();
      while (true) {
          Message msg = new Message();
          msg.setType("Hello");
          msg.setMsgtext("1");
          ksession.insert(msg);
      }
  }

  private static void init() {
      initialiseDrools();
  }

  private static void initialiseDrools() {
      kbuilder.add(ResourceFactory.newClassPathResource(DRL_FILE),
              ResourceType.DRL);
      if (kbuilder.hasErrors()) {
          System.out.println(kbuilder.getErrors().toString());
          throw new RuntimeException("Unable to compile drl\".");
      }
      pkgs = kbuilder.getKnowledgePackages();
      KnowledgeBaseConfiguration config = KnowledgeBaseFactory
              .newKnowledgeBaseConfiguration();
      config.setOption(EventProcessingOption.STREAM);
      kbase = KnowledgeBaseFactory.newKnowledgeBase(config);
      kbase.addKnowledgePackages(pkgs);
      KnowledgeSessionConfiguration conf = KnowledgeBaseFactory
              .newKnowledgeSessionConfiguration();
      conf.setOption(ClockTypeOption.get("pseudo"));
      ksession = kbase.newStatefulKnowledgeSession(conf, null);
      entryPoint = ksession.getWorkingMemoryEntryPoint("entryone");
      new Thread() {
          @Override
          public void run() {
              ksession.fireUntilHalt();
          }
      }.start();
  }
}

ありがとう - サンジェイ

4

2 に答える 2

0

then条件が満たされたときに条件が発生するため、ルールエンジンが条件が満たされたときに何をすべきかを理解できるようにwhen、少なくとも挿入を挿入してトリガーする必要がありeval(true)ますwhen conditionknowledgeSession

于 2014-01-06T06:36:08.317 に答える