What do you think about making methods like IApplicationListener#onAfterInitialized() a 'default' method with empty body ? Same for #onBeforeDestroyed() and all other similar methods in other classes
This way there won't be a need to create adapters like AjaxRequestTarger.AbstractListener and there won't be a need to implement methods in which the application is not interested in like I do below with #onAfterInitialized(). Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Tue, Nov 15, 2016 at 9:43 PM, <[email protected]> wrote: > Repository: wicket > Updated Branches: > refs/heads/master 498f185ed -> 21837bccc > > > WICKET-6277 Broadcasting ClosedMessage about the JSR 356 WebSocket > connection after the container was turned off > > Do not notify the websocket behaviors/resources when the application is > already destroyed. > Add non-null checks for IPageStore in PageStoreManager. > > > Project: http://git-wip-us.apache.org/repos/asf/wicket/repo > Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/21837bcc > Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/21837bcc > Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/21837bcc > > Branch: refs/heads/master > Commit: 21837bcccd78bb529c2f33fbcd947ff5b9732739 > Parents: 498f185 > Author: Martin Tzvetanov Grigorov <[email protected]> > Authored: Tue Nov 15 21:41:26 2016 +0100 > Committer: Martin Tzvetanov Grigorov <[email protected]> > Committed: Tue Nov 15 21:41:26 2016 +0100 > > ---------------------------------------------------------------------- > .../apache/wicket/page/PageStoreManager.java | 20 +++++++--- > .../protocol/ws/javax/WicketEndpoint.java | 40 +++++++++++++++++++- > 2 files changed, 53 insertions(+), 7 deletions(-) > ---------------------------------------------------------------------- > > > http://git-wip-us.apache.org/repos/asf/wicket/blob/ > 21837bcc/wicket-core/src/main/java/org/apache/wicket/page/ > PageStoreManager.java > ---------------------------------------------------------------------- > diff --git > a/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java > b/wicket-core/src/main/java/org/apache/wicket/page/PageStoreManager.java > index 9585669..88bffa4 100644 > --- a/wicket-core/src/main/java/org/apache/wicket/page/ > PageStoreManager.java > +++ b/wicket-core/src/main/java/org/apache/wicket/page/ > PageStoreManager.java > @@ -167,10 +167,14 @@ public class PageStoreManager extends > AbstractPageManager > sessionCache = new ArrayList<>(); > } > > - for (Object o : afterReadObject) > + final IPageStore pageStore = getPageStore(); > + if (pageStore != null) > { > - IManageablePage page = > getPageStore().convertToPage(o); > - addPage(page); > + for (Object o : afterReadObject) > + { > + IManageablePage page = > pageStore.convertToPage(o); > + addPage(page); > + } > } > > afterReadObject = null; > @@ -189,10 +193,11 @@ public class PageStoreManager extends > AbstractPageManager > convertAfterReadObjects(); > } > > + IManageablePage page = null; > // try to find page with same id > if (sessionCache != null) > { > - IManageablePage page = findPage(id); > + page = findPage(id); > if (page != null) > { > return page; > @@ -200,7 +205,12 @@ public class PageStoreManager extends > AbstractPageManager > } > > // not found, ask pagestore for the page > - return getPageStore().getPage(sessionId, id); > + final IPageStore pageStore = getPageStore(); > + if (pageStore != null) > + { > + page = pageStore.getPage(sessionId, id); > + } > + return page; > } > > /** > > http://git-wip-us.apache.org/repos/asf/wicket/blob/21837bcc/wicket-native- > websocket/wicket-native-websocket-javax/src/main/java/ > org/apache/wicket/protocol/ws/javax/WicketEndpoint.java > ---------------------------------------------------------------------- > diff --git a/wicket-native-websocket/wicket-native-websocket-javax/ > src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java > b/wicket-native-websocket/wicket-native-websocket-javax/ > src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java > index 9de80f1..dec2c3e 100644 > --- a/wicket-native-websocket/wicket-native-websocket-javax/ > src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java > +++ b/wicket-native-websocket/wicket-native-websocket-javax/ > src/main/java/org/apache/wicket/protocol/ws/javax/WicketEndpoint.java > @@ -18,12 +18,15 @@ package org.apache.wicket.protocol.ws.javax; > > import java.util.List; > import java.util.Map; > +import java.util.concurrent.atomic.AtomicBoolean; > > import javax.websocket.CloseReason; > import javax.websocket.Endpoint; > import javax.websocket.EndpointConfig; > import javax.websocket.Session; > > +import org.apache.wicket.Application; > +import org.apache.wicket.IApplicationListener; > import org.apache.wicket.ThreadContext; > import org.apache.wicket.protocol.http.WebApplication; > import org.apache.wicket.util.lang.Checks; > @@ -43,6 +46,8 @@ public class WicketEndpoint extends Endpoint > */ > private static final String WICKET_APP_PARAM_NAME = > "wicket-app-name"; > > + private final AtomicBoolean applicationDestroyed = new > AtomicBoolean(false); > + > private JavaxWebSocketProcessor javaxWebSocketProcessor; > > @Override > @@ -51,6 +56,7 @@ public class WicketEndpoint extends Endpoint > String appName = getApplicationName(session); > > WebApplication app = (WebApplication) > WebApplication.get(appName); > + app.getApplicationListeners().add(new ApplicationListener( > applicationDestroyed)); > > try > { > @@ -68,7 +74,10 @@ public class WicketEndpoint extends Endpoint > { > super.onClose(session, closeReason); > > - > javaxWebSocketProcessor.onClose(closeReason.getCloseCode().getCode(), > closeReason.getReasonPhrase()); > + if (isApplicationAlive()) > + { > + > javaxWebSocketProcessor.onClose(closeReason.getCloseCode().getCode(), > closeReason.getReasonPhrase()); > + } > } > > @Override > @@ -77,7 +86,14 @@ public class WicketEndpoint extends Endpoint > LOG.error("An error occurred in web socket connection with > id : " + session.getId(), t); > super.onError(session, t); > > - javaxWebSocketProcessor.onError(t); > + if (isApplicationAlive()) > + { > + javaxWebSocketProcessor.onError(t); > + } > + } > + > + private boolean isApplicationAlive() { > + return applicationDestroyed.get() == false; > } > > private String getApplicationName(Session session) > @@ -113,4 +129,24 @@ public class WicketEndpoint extends Endpoint > return appName; > } > > + private static class ApplicationListener implements > IApplicationListener > + { > + private final AtomicBoolean applicationDestroyed; > + > + private ApplicationListener(AtomicBoolean > applicationDestroyed) > + { > + this.applicationDestroyed = applicationDestroyed; > + } > + > + @Override > + public void onAfterInitialized(Application application) > + { > + } > + > + @Override > + public void onBeforeDestroyed(Application application) > + { > + applicationDestroyed.set(true); > + } > + } > } > >
