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

Reply via email to