in services/src/main/java/org/apache/unomi/services/impl/events/EventServiceImpl.java [147:193]
private int send(Event event, int depth) {
if (depth > MAX_RECURSION_DEPTH) {
LOGGER.warn("Max recursion depth reached");
return NO_CHANGE;
}
boolean saveSucceeded = true;
if (event.isPersistent()) {
saveSucceeded = persistenceService.save(event, null, true);
}
int changes;
if (saveSucceeded) {
changes = NO_CHANGE;
final Session session = event.getSession();
if (event.isPersistent() && session != null) {
session.setLastEventDate(event.getTimeStamp());
}
if (event.getProfile() != null) {
for (EventListenerService eventListenerService : eventListeners) {
if (eventListenerService.canHandle(event)) {
changes |= eventListenerService.onEvent(event);
}
}
// At the end of the processing event execute the post executor actions
for (ActionPostExecutor actionPostExecutor : event.getActionPostExecutors()) {
changes |= actionPostExecutor.execute() ? changes : NO_CHANGE;
}
if ((changes & PROFILE_UPDATED) == PROFILE_UPDATED) {
Event profileUpdated = new Event("profileUpdated", session, event.getProfile(), event.getScope(), event.getSource(), event.getProfile(), event.getTimeStamp());
profileUpdated.setPersistent(false);
profileUpdated.getAttributes().putAll(event.getAttributes());
changes |= send(profileUpdated, depth + 1);
if (session != null && session.getProfileId() != null) {
changes |= SESSION_UPDATED;
session.setProfile(event.getProfile());
}
}
}
} else {
changes = ERROR;
}
return changes;
}