You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2013/10/17 13:25:24 UTC
svn commit: r1533048 - in
/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard:
DrawboardContextListener.java DrawboardEndpoint.java
Author: markt
Date: Thu Oct 17 11:25:23 2013
New Revision: 1533048
URL: http://svn.apache.org/r1533048
Log:
Use lazy init for the room in the WebSocket drawing board example.
This is primarily to avoid an issue with a hang on Java 6 in Tomcat 7 (the JSR-356 examples require Java 6) but may also help with adding multiple room support.
Modified:
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java
tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
Modified: tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java?rev=1533048&r1=1533047&r2=1533048&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java (original)
+++ tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardContextListener.java Thu Oct 17 11:25:23 2013
@@ -29,6 +29,9 @@ public final class DrawboardContextListe
@Override
public void contextDestroyed(ServletContextEvent sce) {
// Shutdown our room.
- DrawboardEndpoint.getRoom().shutdown();
+ Room room = DrawboardEndpoint.getRoom(false);
+ if (room != null) {
+ room.shutdown();
+ }
}
}
Modified: tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java?rev=1533048&r1=1533047&r2=1533048&view=diff
==============================================================================
--- tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java (original)
+++ tomcat/trunk/webapps/examples/WEB-INF/classes/websocket/drawboard/DrawboardEndpoint.java Thu Oct 17 11:25:23 2013
@@ -40,10 +40,22 @@ public final class DrawboardEndpoint ext
/**
* Our room where players can join.
*/
- private static final Room room = new Room();
+ private static volatile Room room = null;
+ private static final Object roomLock = new Object();
- public static Room getRoom() {
- return room;
+ public static Room getRoom(boolean create) {
+ if (create) {
+ if (room == null) {
+ synchronized (roomLock) {
+ if (room == null) {
+ room = new Room();
+ }
+ }
+ }
+ return room;
+ } else {
+ return room;
+ }
}
/**
@@ -72,6 +84,7 @@ public final class DrawboardEndpoint ext
session.addMessageHandler(stringHandler);
final Client client = new Client(session);
+ final Room room = getRoom(true);
room.invokeAndWait(new Runnable() {
@Override
public void run() {
@@ -100,23 +113,25 @@ public final class DrawboardEndpoint ext
@Override
public void onClose(Session session, CloseReason closeReason) {
- room.invokeAndWait(new Runnable() {
- @Override
- public void run() {
- try {
-
- // Player can be null if it couldn't enter the room
- if (player != null) {
- // Remove this player from the room.
- player.removeFromRoom();
+ Room room = getRoom(false);
+ if (room != null) {
+ room.invokeAndWait(new Runnable() {
+ @Override
+ public void run() {
+ try {
+
+ // Player can be null if it couldn't enter the room
+ if (player != null) {
+ // Remove this player from the room.
+ player.removeFromRoom();
+ }
+
+ } catch (RuntimeException ex) {
+ log.error("Unexpected exception: " + ex.toString(), ex);
}
-
- } catch (RuntimeException ex) {
- log.error("Unexpected exception: " + ex.toString(), ex);
}
- }
- });
-
+ });
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org