@Override public void run() { List changes = LogContext.execWithResult(LogLevel.INFO, () -> changesQuery.param("maxValue", maxValue).list()); if (!changes.isEmpty()) { log.debug("Found {} changes", changes.size()); Object lastNotified = null; try { for (int i = 0; i < changes.size(); i++) { Object entity = changes.get(i); listener.onEntityChanged(dao, entity); lastNotified = entity; } } catch (Throwable e) { log.error("Error notify listener '{}': {}", listener.getClass(), e.getMessage(), e); } if (null != lastNotified) { Object newMaxValue = EntityWrapper.wrap(dao.getOrmContext(), em, lastNotified).get(fm.getFieldName()); if (null != newMaxValue) { log.debug("Set maxValue from {} to {}", maxValue, newMaxValue); this.maxValue = newMaxValue; } } } }