You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by mg...@apache.org on 2016/11/15 20:43:36 UTC
wicket git commit: WICKET-6277 Broadcasting ClosedMessage about the
JSR 356 WebSocket connection after the container was turned off
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 <mg...@apache.org>
Authored: Tue Nov 15 21:41:26 2016 +0100
Committer: Martin Tzvetanov Grigorov <mg...@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);
+ }
+ }
}