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, <mgrigo...@apache.org> 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 <mgrigo...@apache.org>
Authored: Tue Nov 15 21:41:26 2016 +0100
Committer: Martin Tzvetanov Grigorov <mgrigo...@apache.org>
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