diff options
-rw-r--r-- | server/src/main/java/com/vaadin/server/VaadinService.java | 56 |
1 files changed, 40 insertions, 16 deletions
diff --git a/server/src/main/java/com/vaadin/server/VaadinService.java b/server/src/main/java/com/vaadin/server/VaadinService.java index 28b7ca04a1..62d9d75edb 100644 --- a/server/src/main/java/com/vaadin/server/VaadinService.java +++ b/server/src/main/java/com/vaadin/server/VaadinService.java @@ -60,6 +60,7 @@ import com.vaadin.server.communication.SessionRequestHandler; import com.vaadin.server.communication.UidlRequestHandler; import com.vaadin.shared.ApplicationConstants; import com.vaadin.shared.JsonConstants; +import com.vaadin.shared.Registration; import com.vaadin.shared.ui.ui.UIConstants; import com.vaadin.ui.UI; import com.vaadin.util.CurrentInstance; @@ -165,8 +166,8 @@ public abstract class VaadinService implements Serializable { .loadClass(classLoaderName); final Constructor<?> c = classLoaderClass .getConstructor(ClassLoader.class); - setClassLoader((ClassLoader) c.newInstance( - getClass().getClassLoader())); + setClassLoader((ClassLoader) c + .newInstance(getClass().getClassLoader())); } catch (final Exception e) { throw new RuntimeException( "Could not find specified class loader: " @@ -411,10 +412,13 @@ public abstract class VaadinService implements Serializable { * * @param listener * the Vaadin service session initialization listener + * @return a registration object for removing the listener */ - public void addSessionInitListener(SessionInitListener listener) { + public Registration addSessionInitListener(SessionInitListener listener) { eventRouter.addListener(SessionInitEvent.class, listener, SESSION_INIT_METHOD); + return () -> eventRouter.removeListener(SessionInitEvent.class, + listener, SESSION_INIT_METHOD); } /** @@ -425,7 +429,11 @@ public abstract class VaadinService implements Serializable { * * @param listener * the Vaadin service session initialization listener to remove. + * @deprecated use the {@link Registration} object returned by + * {@link #addSessionInitListener(SessionInitListener)} to + * remove the listener */ + @Deprecated public void removeSessionInitListener(SessionInitListener listener) { eventRouter.removeListener(SessionInitEvent.class, listener, SESSION_INIT_METHOD); @@ -442,10 +450,14 @@ public abstract class VaadinService implements Serializable { * * @param listener * the vaadin service session destroy listener + * @return a registration object for removing the listener */ - public void addSessionDestroyListener(SessionDestroyListener listener) { + public Registration addSessionDestroyListener( + SessionDestroyListener listener) { eventRouter.addListener(SessionDestroyEvent.class, listener, SESSION_DESTROY_METHOD); + return () -> eventRouter.removeListener(SessionInitEvent.class, + listener, SESSION_DESTROY_METHOD); } /** @@ -468,11 +480,11 @@ public abstract class VaadinService implements Serializable { for (final UI ui : uis) { ui.accessSynchronously(() -> { /* - * close() called here for consistency so that it is - * always called before a UI is removed. - * UI.isClosing() is thus always true in UI.detach() - * and associated detach listeners. - */ + * close() called here for consistency so that it is always + * called before a UI is removed. UI.isClosing() is thus + * always true in UI.detach() and associated detach + * listeners. + */ if (!ui.isClosing()) { ui.close(); } @@ -483,8 +495,8 @@ public abstract class VaadinService implements Serializable { // have an API for using some other handler for session init and // destroy listeners eventRouter.fireEvent( - new SessionDestroyEvent(VaadinService.this, session), - session.getErrorHandler()); + new SessionDestroyEvent(VaadinService.this, session), + session.getErrorHandler()); session.setState(State.CLOSED); }); } @@ -496,7 +508,11 @@ public abstract class VaadinService implements Serializable { * * @param listener * the vaadin service session destroy listener + * @deprecated use the {@link Registration} object returned by + * {@link #addSessionDestroyListener(SessionDestroyListener)} to + * remove the listener */ + @Deprecated public void removeSessionDestroyListener(SessionDestroyListener listener) { eventRouter.removeListener(SessionDestroyEvent.class, listener, SESSION_DESTROY_METHOD); @@ -1188,7 +1204,7 @@ public abstract class VaadinService implements Serializable { if (ui.isClosing()) { ui.accessSynchronously(() -> { getLogger().log(Level.FINER, "Removing closed UI {0}", - ui.getUIId()); + ui.getUIId()); session.removeUI(ui); }); } @@ -1207,8 +1223,8 @@ public abstract class VaadinService implements Serializable { if (!isUIActive(ui) && !ui.isClosing()) { ui.accessSynchronously(() -> { getLogger().log(Level.FINE, - "Closing inactive UI #{0} in session {1}", - new Object[] { ui.getUIId(), sessionId }); + "Closing inactive UI #{0} in session {1}", + new Object[] { ui.getUIId(), sessionId }); ui.close(); }); } @@ -1487,7 +1503,7 @@ public abstract class VaadinService implements Serializable { final OutputStream out = response.getOutputStream(); try (PrintWriter outWriter = new PrintWriter( - new BufferedWriter(new OutputStreamWriter(out, "UTF-8")))) { + new BufferedWriter(new OutputStreamWriter(out, "UTF-8")))) { outWriter.print(reponseString); } } @@ -1857,10 +1873,14 @@ public abstract class VaadinService implements Serializable { * @see #destroy() * @see #removeServiceDestroyListener(ServiceDestroyListener) * @see ServiceDestroyListener + * @return a registration object for removing the listener */ - public void addServiceDestroyListener(ServiceDestroyListener listener) { + public Registration addServiceDestroyListener( + ServiceDestroyListener listener) { eventRouter.addListener(ServiceDestroyEvent.class, listener, SERVICE_DESTROY_METHOD); + return () -> eventRouter.removeListener(ServiceDestroyEvent.class, + listener, SERVICE_DESTROY_METHOD); } /** @@ -1870,7 +1890,11 @@ public abstract class VaadinService implements Serializable { * @since 7.2 * @param listener * the service destroy listener to remove + * @deprecated use the {@link Registration} object returned by + * {@link #addServiceDestroyListener(ServiceDestroyListener)} to + * remove the listener */ + @Deprecated public void removeServiceDestroyListener(ServiceDestroyListener listener) { eventRouter.removeListener(ServiceDestroyEvent.class, listener, SERVICE_DESTROY_METHOD); |