/** Perform event filter registration. */ public void run() { if (log.isDebugEnabled()) { log.debug("Registering event filter " + this.eventFilter.toString()); log.debug("Looking up matching past events in registry"); } hibernateEventRegistry = (EventRegistry) getEventRegistry(); unitOfWork = hibernateEventRegistry.getUnitOfWork(); List<Event> matchesInRegistry = hibernateEventRegistry.findByTemplate(this.eventFilter.getTemplate()); if (log.isDebugEnabled()) log.debug("Matching past events found in registry, publishing them"); List<Event> pastEventNotificationBatch = new ArrayList<Event>(); for (Event match : matchesInRegistry) { if (!this.registrationHasBeenCanceled()) { pastEventNotificationBatch.add(match); if (pastEventNotificationBatch.size() % getPastEventNotificationBatchSize() == 0) { this.eventLoggerService .getEventFilterMatchHandler() .handleMatches(this.eventFilter, pastEventNotificationBatch); pastEventNotificationBatch.clear(); } } else { if (log.isDebugEnabled()) log.debug("Event filter has been deregistered. Stopping processing"); unitOfWork.rollback(); return; } } if (!pastEventNotificationBatch.isEmpty()) this.eventLoggerService .getEventFilterMatchHandler() .handleMatches(this.eventFilter, pastEventNotificationBatch); this.eventLoggerService.getEventRegistry().getUnitOfWork().rollback(); if (log.isDebugEnabled()) log.debug("Matching past events published, now registering filter for live events"); boolean performedLiveEventFilterRegistration = false; if (!this.registrationHasBeenCanceled()) { this.eventLoggerService.registerFilterForLiveEvents(this.eventFilter); performedLiveEventFilterRegistration = true; } else { if (log.isDebugEnabled()) log.debug("Event filter has been deregistered. Not registering for live events anymore."); unitOfWork.rollback(); return; } if (this.registrationHasBeenCanceled() && performedLiveEventFilterRegistration) { if (log.isDebugEnabled()) log.debug( "Event filter has been deregistered while registering for live events. Deregistering again for safety reasons."); this.eventLoggerService.deregisterEventFilter(this.eventFilter.getUuid()); } this.eventLoggerService.handlerFinishedEventRegistration(this.eventFilter.getUuid()); if (log.isDebugEnabled()) log.debug("Event filter registered for live events."); unitOfWork.rollback(); }