diff options
author | Henri Sara <hesara@vaadin.com> | 2013-11-27 15:30:36 +0200 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2013-11-27 13:35:27 +0000 |
commit | 10ca7ed57149eb20d8be936e9e060311b72298bb (patch) | |
tree | a08770fc9bebf880723ed6109ef00c0c7dc3d0a1 /server/src/com/vaadin/event/EventRouter.java | |
parent | 5b2ddc15bd2c30d9f9033a0c4cf50e32827ef0c6 (diff) | |
download | vaadin-framework-10ca7ed57149eb20d8be936e9e060311b72298bb.tar.gz vaadin-framework-10ca7ed57149eb20d8be936e9e060311b72298bb.zip |
Catch and log exceptions in session lifecycle listeners (#12915)
Change-Id: Ie8638f010d74c569c5ff56e91c95e23a5cb92c9b
Diffstat (limited to 'server/src/com/vaadin/event/EventRouter.java')
-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()); + } + } |