diff options
author | Jonatan Kronqvist <jonatan@vaadin.com> | 2014-02-06 17:30:40 +0200 |
---|---|---|
committer | Jonatan Kronqvist <jonatan@vaadin.com> | 2014-02-06 17:30:41 +0200 |
commit | dc7c1763bb111da6b6964379fbc0ccbe1ab5c8d0 (patch) | |
tree | b4545bfe09c81edf5f3dc77a7fbdbdb96bebb719 /server/src/com/vaadin/event | |
parent | 927c497e78e8907c3d62ed4bacbd4b4bcfe1a580 (diff) | |
parent | 1ac492e46b70de9314083492bd8e136e1c8398e3 (diff) | |
download | vaadin-framework-dc7c1763bb111da6b6964379fbc0ccbe1ab5c8d0.tar.gz vaadin-framework-dc7c1763bb111da6b6964379fbc0ccbe1ab5c8d0.zip |
Merge changes from origin/7.1
5b2ddc1 Make test work reliably by activating @Push
10ca7ed Catch and log exceptions in session lifecycle listeners (#12915)
8abf434 Move working sass tests from sasslangbroken to sasslang.
1ac492e Move a sass test that no longer fails.
Change-Id: I960e80fd2120c20bc7b042eccbadb1e748ec0f00
Diffstat (limited to 'server/src/com/vaadin/event')
-rw-r--r-- | server/src/com/vaadin/event/EventRouter.java | 39 |
1 files changed, 38 insertions, 1 deletions
diff --git a/server/src/com/vaadin/event/EventRouter.java b/server/src/com/vaadin/event/EventRouter.java index 73bfa33881..fdc543143b 100644 --- a/server/src/com/vaadin/event/EventRouter.java +++ b/server/src/com/vaadin/event/EventRouter.java @@ -23,6 +23,10 @@ import java.util.EventObject; import java.util.Iterator; import java.util.LinkedHashSet; import java.util.List; +import java.util.logging.Logger; + +import com.vaadin.server.ErrorEvent; +import com.vaadin.server.ErrorHandler; /** * <code>EventRouter</code> class implementing the inheritable event listening @@ -154,6 +158,25 @@ public class EventRouter implements MethodEventSource { * the Event to be sent to all listeners. */ public void fireEvent(EventObject event) { + fireEvent(event, null); + } + + /** + * Sends an event to all registered listeners. The listeners will decide if + * the activation method should be called or not. + * <p> + * If an error handler is set, the processing of other listeners will + * continue after the error handler method call unless the error handler + * itself throws an exception. + * + * @param event + * the Event to be sent to all listeners. + * @param errorHandler + * error handler to use to handle any exceptions thrown by + * listeners or null to let the exception propagate to the + * caller, preventing further listener calls + */ + public void fireEvent(EventObject event, ErrorHandler errorHandler) { // It is not necessary to send any events if there are no listeners if (listenerList != null) { @@ -164,7 +187,16 @@ public class EventRouter implements MethodEventSource { // will filter out unwanted events. final Object[] listeners = listenerList.toArray(); for (int i = 0; i < listeners.length; i++) { - ((ListenerMethod) listeners[i]).receiveEvent(event); + ListenerMethod listenerMethod = (ListenerMethod) listeners[i]; + if (null != errorHandler) { + try { + listenerMethod.receiveEvent(event); + } catch (Exception e) { + errorHandler.error(new ErrorEvent(e)); + } + } else { + listenerMethod.receiveEvent(event); + } } } @@ -208,4 +240,9 @@ public class EventRouter implements MethodEventSource { } return listeners; } + + private Logger getLogger() { + return Logger.getLogger(EventRouter.class.getName()); + } + } |