From 966a02b45a734d025f0d19564d51b032e93483ba Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 21 Mar 2016 13:42:09 +0100 Subject: [PATCH] OO-1946: fire event per type, use the official method to check if we are on the "cluster" node which send the event --- .../core/util/event/AbstractEventBus.java | 69 ++++++++++--------- .../course/assessment/AssessmentModule.java | 5 +- .../scorm/_i18n/LocalStrings_fr.properties | 2 +- 3 files changed, 41 insertions(+), 35 deletions(-) diff --git a/src/main/java/org/olat/core/util/event/AbstractEventBus.java b/src/main/java/org/olat/core/util/event/AbstractEventBus.java index 9d92297a63e..7bcf58d191e 100644 --- a/src/main/java/org/olat/core/util/event/AbstractEventBus.java +++ b/src/main/java/org/olat/core/util/event/AbstractEventBus.java @@ -122,51 +122,58 @@ public abstract class AbstractEventBus implements EventBus { final Long oresId = ores.getResourceableId(); final String typeName = ores.getResourceableTypeName(); - GenericEventListener[] liArr = null; + GenericEventListener[] listenersArr = null; + GenericEventListener[] listenersTypeArr = null; synchronized (infocenter) { - if (oresId == null) { - EventAgency ea = typeInfocenter.get(typeName); - if (ea != null) { // we are the first listener -> create an agency - liArr = ea.getListeners(); - } - } else { + if (oresId != null) { String oresStr = typeName + "::" + oresId; EventAgency ea = infocenter.get(oresStr); if (ea != null) { - liArr = ea.getListeners(); + listenersArr = ea.getListeners(); } } + EventAgency ea = typeInfocenter.get(typeName); + if (ea != null) { + listenersTypeArr = ea.getListeners(); + } } + + doFire(event, listenersArr); + doFire(event, listenersTypeArr); + } + + private final void doFire(final MultiUserEvent event, final GenericEventListener[] liArr) { + if(liArr == null) return; - if(liArr != null) { - for (int i = 0; i < liArr.length; i++) { - try { - final GenericEventListener listener = liArr[i]; - - //make sure GenericEvents are only sent when controller is not yet disposed - if (listener instanceof Controller) { - Controller dCtrl = (Controller)listener; - if (!dCtrl.isDisposed()) { - ThreadLocalUserActivityLoggerInstaller.runWithUserActivityLogger(new Runnable() { - public void run() { - listener.event(event); - } - }, UserActivityLoggerImpl.newLoggerForEventBus(dCtrl)); - } - } else if(listener != null) { - if(log.isDebug()){ - log.debug("fireEvent: Non-Controller: "+listener); - } - //is there a need to differ the events sent on one VM and in cluster mode? + for (int i = 0; i < liArr.length; i++) { + try { + final GenericEventListener listener = liArr[i]; + + //make sure GenericEvents are only sent when controller is not yet disposed + if (listener instanceof Controller) { + Controller dCtrl = (Controller)listener; + if (!dCtrl.isDisposed()) { ThreadLocalUserActivityLoggerInstaller.runWithUserActivityLogger(new Runnable() { + @Override public void run() { listener.event(event); } - }, ThreadLocalUserActivityLoggerInstaller.createEmptyUserActivityLogger()); + }, UserActivityLoggerImpl.newLoggerForEventBus(dCtrl)); + } + } else if(listener != null) { + if(log.isDebug()){ + log.debug("fireEvent: Non-Controller: "+listener); } - } catch (RuntimeException e) { - log.error("Error while sending generic event: "+liArr[i], e); + //is there a need to differ the events sent on one VM and in cluster mode? + ThreadLocalUserActivityLoggerInstaller.runWithUserActivityLogger(new Runnable() { + @Override + public void run() { + listener.event(event); + } + }, ThreadLocalUserActivityLoggerInstaller.createEmptyUserActivityLogger()); } + } catch (RuntimeException e) { + log.error("Error while sending generic event: "+liArr[i], e); } } } diff --git a/src/main/java/org/olat/course/assessment/AssessmentModule.java b/src/main/java/org/olat/course/assessment/AssessmentModule.java index c6a0cb84ced..2554cc640b5 100644 --- a/src/main/java/org/olat/course/assessment/AssessmentModule.java +++ b/src/main/java/org/olat/course/assessment/AssessmentModule.java @@ -130,12 +130,11 @@ public class AssessmentModule extends AbstractSpringModule implements GenericEve public void event(Event event) { if (event instanceof PublishEvent) { PublishEvent pe = (PublishEvent) event; - //FIXME: LD: temporary introduced the (pe.getCommand() == PublishEvent.EVENT_IDENTIFIER) to filter the events from the same VM - if (pe.getState() == PublishEvent.PRE_PUBLISH && pe.getEventIdentifier() == PublishEvent.EVENT_IDENTIFIER) { + if (pe.getState() == PublishEvent.PRE_PUBLISH && pe.isEventOnThisNode()) { // PRE PUBLISH -> check node for changes addToUpcomingWork(pe); return; - } else if (pe.getState() == PublishEvent.PUBLISH && pe.getEventIdentifier() == PublishEvent.EVENT_IDENTIFIER) { + } else if (pe.getState() == PublishEvent.PUBLISH && pe.isEventOnThisNode()) { // a publish event, check if it matches a previous checked prepareUpdate(pe.getPublishedCourseResId()); } diff --git a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties index ed612baa992..d4d6f38d67a 100644 --- a/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties +++ b/src/main/java/org/olat/course/nodes/scorm/_i18n/LocalStrings_fr.properties @@ -38,7 +38,7 @@ pane.tab.delivery=$org.olat.core.gui.control.generic.iframe\:option.delivery passed.no=Pas r\u00E9ussi passed.yes=R\u00E9ussi passed.yourpassed=Statut -score.noscoreinfoyet=Il n'y a pas d'indications de poinst pour cet objet SCORM, car vous ne l'avez encore jamais effectu\u00E9. +score.noscoreinfoyet=Il n'y a pas d'indications de points pour cet objet SCORM, car vous ne l'avez encore jamais effectu\u00E9. score.title=Points score.yourscore=Nombre de points obtenus showmenu.label=Afficher le menu -- GitLab