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

Reply via email to