Мой файл ДХО:
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 объектов checkinvent перекачивают каждые 5 минут.
Мой вариант использования — обнаружение поздней проверки события для объекта, идентифицируемого серийным номером. Обнаружено событие поздней регистрации, перекачивающее это событие в другое правило и ожидающее повторной регистрации от этого объекта в течение 2 часов. Если это происходит, правило 2 срабатывает.
Есть ли проблема в том, как я написал запрос. ?