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); >>> + } >>> + } >>> } >>> >>> >>> >
