2015-12-19 3 views
0

Моего DRL файл:Drools в потоковом режиме: OutOfMemory в karaf

package com.sample.eventmanagement; 

import com.sample.eventmanagement.CheckInEvent  
import com.sample.eventmanagement.LateCheckInEvent  

global java.util.concurrent.BlockingQueue lateCheckInEntitiesQueue;  
global java.util.concurrent.BlockingQueue clearingLateCheckInEntitiesQueue;  

declare CheckInEvent  
@role(event)  
serialNum : String  
currentCheckInTime : long  
end  

declare LateCheckInEvent  
@role(event)  
@expires(120m)  
serialNum : String  
currentCheckInTime : long  
end  

rule "Raising an Late Check-In Alert"  
when  
    $s1: CheckInEvent($serialNum : serialNum, $currentCheckInTime: currentCheckInTime) from entry-point apCheckInStream  
    not(CheckInEvent(serialNum == $serialNum, currentCheckInTime > $currentCheckInTime, this after[ 1s, 360s ] $s1) from entry-point apCheckInStream)  
then  
    lateCheckInEntitiesQueue.add($s1);  
end  

rule "Clearing Late Check-In Alert"  
when  
    $s1: LateCheckInEvent($serialNum : serialNum, $currentCheckInTime: currentCheckInTime) from entry-point lateApCheckInStream  
    CheckInEvent(serialNum == $serialNum, currentCheckInTime > $currentCheckInTime) from entry-point clearingApCheckInStream  
then  
    System.out.println("Clearing late checkin " + $s1);  
    clearingLateCheckInEntitiesQueue.add($s1.getSerialNum());  
end 

Я бег Drools в потоковом режиме в karaf 2.4.3 в Linux VM, сообщает из памяти 10k объекта checkinevent перекачиваемого каждые 5 минут ,

Мой случай использования обнаруживает latecheckinevent для объекта, идентифицированного серийным номером. В последнем событии проверки произошла перекачка этого события в другое правило и ожидание правильной проверки с этого объекта в течение 2 часов. Если это произойдет, будет запущено правило 2.

Есть ли проблемы в том, как у меня есть письменный запрос. ?

ответ

0

Факты собираются оставаться в сеансе (в памяти) до:

  • вручную убрать их: с помощью delete() или retract()
  • двигатель втягивания в рамках своей системы правды обслуживания: то есть логически -интересные факты.
  • Двигатель CEP (слияние) обнаруживает, что из-за ограничений, в которых он участвует, в сеансе больше не требуется факт, отмеченный @expires.

Ваш сценарий, похоже, не попадает ни в один из этих трех случаев.

** Кстати, я не видел запроса в вашем файле DRL.

Надежда это помогает,

+0

Я добавил @expires для CheckInEvent, теперь нет OutOfMemory. Вместо того, чтобы упоминать это как правило, я ошибался как запрос. – Abirami

Смежные вопросы