Skip to content
Snippets Groups Projects
Commit 966a02b4 authored by srosse's avatar srosse
Browse files

OO-1946: fire event per type, use the official method to check if we are on...

OO-1946: fire event per type, use the official method to check if we are on the "cluster" node which send the event
parent 0fc01d1f
No related branches found
No related tags found
No related merge requests found
......@@ -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);
}
}
}
......
......@@ -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());
}
......
......@@ -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
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment