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