https://issues.apache.org/jira/browse/WICKET-6281
Martin Grigorov Wicket Training and Consulting https://twitter.com/mtgrigorov On Thu, Nov 17, 2016 at 11:59 AM, Tobias Soloschenko < [email protected]> wrote: > +1 > > kind regards > > Tobias > > > Am 17.11.2016 um 11:07 schrieb Emond Papegaaij < > [email protected]>: > > > > +1 > > > >> On Thu, Nov 17, 2016 at 12:37 AM, Martin Grigorov <[email protected]> > wrote: > >> Yes. This discussion is about exactly what I propose. > >> I like the idea. > >> > >> Other opinions ? > >> > >> Martin Grigorov > >> Wicket Training and Consulting > >> https://twitter.com/mtgrigorov > >> > >>> On Wed, Nov 16, 2016 at 11:00 AM, Sven Meier <[email protected]> wrote: > >>> > >>> Here's a discussion about on this topic: > >>> > >>> http://stackoverflow.com/questions/32440873/is-it-ok-to-add- > >>> default-implementations-to-methods-of-an-interface-which-represe > >>> > >>> It's something new to get used to, but +1 for getting rid of all > adapter > >>> classes. > >>> > >>> Have fun > >>> Sven > >>> > >>> > >>> > >>>> Am 15.11.2016 um 21:53 schrieb Martin Grigorov: > >>>> > >>>> 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/ > PageStore > >>>>> Manager.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.onClo > >>>>> se(closeReason.getCloseCode().getCode(), > >>>>> closeReason.getReasonPhrase()); > >>>>> + if (isApplicationAlive()) > >>>>> + { > >>>>> + javaxWebSocketProcessor.onClo > >>>>> se(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); > >>>>> + } > >>>>> + } > >>>>> } > >>>>> > >>>>> > >>>>> > >>> >
