2013-09-30 2 views
1

나는 다른 일이 일어난 후에 뭔가 시간이 지나면 어떤 일이 일어나는지 확인해야하는 이벤트에 대한 규칙을 작성하려고합니다. 순간 코드 (제대로 작동)이 보이는 다음 순간 30s에서졸다 - 융합에서 동적 임시 규칙을 작성하는 방법

rule "Detect BPM reseed not starting when requested from Mart" 
     when 
      $martDailyRefreshRequestedEvent: MessageSentEvent(
       $correlationId: correlationId, 
       $when: timestamp, 
       messageTypeName == "MartDailyRefreshCompletedEvent") 
        from entry-point "mart" 
      not (MessageHandleStartedEvent(
        this after[0ms, 30s] $martDailyRefreshRequestedEvent, 
        correlationId == $correlationId, 
        messageTypeName == "MartDailyRefreshCompletedEvent") 
          from entry-point "bpm") 
     then 
      notifier.notify("BPM not responding to MartDailyRefreshCompletedEvent quick enough", 
       String.format(
        "At **%s** Mart sent out a **MartDailyRefreshCompletedEvent**.\n\n**BPM** was supposed to react to it within **30 seconds**.", 
        $when)); 
    end 

효율적으로 하드 코딩입니다. 규칙을 매개 변수화하려는 경우 KB에 주장 된 다른 사실을 사용해야하지만 시간상 규칙을 수행하는 방법을 파악할 수는 없습니다.

So : 응용 프로그램 외부에서 값을 변경할 수 있도록이 규칙에서 30s을 어떻게 구성 할 수 있습니까? 다음과 같은 것 : MessageHandleStartedEvent(this after [ $duration ] ...

답변

0

Drools 외부에서 하드 코딩 된 30을 제공하기 위해 템플릿을 사용할 수 있습니다.

ObjectDataCompiler converter = new ObjectDataCompiler(); 
InputStream templateStream = getClass().getResourceAsStream(resource.getFilePath()); 
Collection<Map<String, String>> paramMaps = new ArrayList<>(); 
Map<String,String> param = new HashMap<>(); 
param.put("timeout", "30"); 
paramMaps.add(param); 
String drl = converter.compile(paramMaps, templateStream); 
Reader rdr = new StringReader(drl); 
kbuilder.add(ResourceFactory.newReaderResource(rdr), ResourceType.DRL); 
:

template dynamicTimer 
rule "Detect BPM reseed not starting when requested from Mart" 
    when 
     $martDailyRefreshRequestedEvent: MessageSentEvent(
      $correlationId: correlationId, 
      $when: timestamp, 
      messageTypeName == "MartDailyRefreshCompletedEvent") 
       from entry-point "mart" 
     not (MessageHandleStartedEvent(
       this after[0ms, @{timeout}s] $martDailyRefreshRequestedEvent, 
       correlationId == $correlationId, 
       messageTypeName == "MartDailyRefreshCompletedEvent") 
         from entry-point "bpm") 
    then 
     notifier.notify("BPM not responding to MartDailyRefreshCompletedEvent quick enough", 
      String.format(
       "At **%s** Mart sent out a **MartDailyRefreshCompletedEvent**.\n\n**BPM** was supposed to react to it within **@{timeout} seconds**.", 
       $when)); 
end 
end template 

그런 다음, 당신은 단지 템플릿 매개 변수로 (30)를 제공해야

관련 문제