From 1c97bea29b753280c75f316acd8adcfa46c838ca Mon Sep 17 00:00:00 2001 From: jfarcand Date: Wed, 15 Sep 2010 12:33:23 -0400 Subject: [PATCH] Fix for https://atmosphere.dev.java.net/issues/show_bug.cgi?id=52 ("Websocket connection disposal with Jetty") Solution provided by Jim Marino at gmail [dot] com --- .../websocket/JettyWebSocketSupport.java | 4 +++- .../websocket/WebSocketHttpServletResponse.java | 15 ++++----------- 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/modules/cpr/src/main/java/org/atmosphere/websocket/JettyWebSocketSupport.java b/modules/cpr/src/main/java/org/atmosphere/websocket/JettyWebSocketSupport.java index e608f8a53b..b05d861515 100644 --- a/modules/cpr/src/main/java/org/atmosphere/websocket/JettyWebSocketSupport.java +++ b/modules/cpr/src/main/java/org/atmosphere/websocket/JettyWebSocketSupport.java @@ -60,14 +60,17 @@ public void redirect(String location) throws IOException { } public void write(byte frame, String data) throws IOException { + if (!outbound.isOpen()) throw new IOException("Connection closed"); outbound.sendMessage(frame, data); } public void write(byte frame, byte[] data) throws IOException { + if (!outbound.isOpen()) throw new IOException("Connection closed"); outbound.sendMessage(frame, data, 0, data.length); } public void write(byte frame, byte[] data, int offset, int length) throws IOException { + if (!outbound.isOpen()) throw new IOException("Connection closed"); outbound.sendMessage(frame, data, offset, length); } @@ -75,5 +78,4 @@ public void close() throws IOException { outbound.disconnect(); } - } diff --git a/modules/cpr/src/main/java/org/atmosphere/websocket/WebSocketHttpServletResponse.java b/modules/cpr/src/main/java/org/atmosphere/websocket/WebSocketHttpServletResponse.java index 79eefc1099..2884e323f3 100644 --- a/modules/cpr/src/main/java/org/atmosphere/websocket/WebSocketHttpServletResponse.java +++ b/modules/cpr/src/main/java/org/atmosphere/websocket/WebSocketHttpServletResponse.java @@ -36,8 +36,6 @@ */ package org.atmosphere.websocket; -import org.atmosphere.util.LoggerUtils; - import javax.servlet.ServletOutputStream; import javax.servlet.ServletResponse; import javax.servlet.http.Cookie; @@ -50,7 +48,6 @@ import java.util.Collections; import java.util.HashMap; import java.util.Locale; -import java.util.logging.Level; /** * Wrapper around an {@link HttpServletResponse} which use an instance of {@link WebSocketSupport} @@ -418,8 +415,7 @@ public void write(char[] chars, int offset, int lenght) { try { webSocketSupport.write(frame, new String(chars, offset, lenght)); } catch (IOException e) { - LoggerUtils.getLogger().log(Level.INFO, "", e); - + throw new RuntimeException(e); } } @@ -427,8 +423,7 @@ public void write(char[] chars) { try { webSocketSupport.write(frame, new String(chars)); } catch (IOException e) { - LoggerUtils.getLogger().log(Level.INFO, "", e); - + throw new RuntimeException(e); } } @@ -436,8 +431,7 @@ public void write(String s, int offset, int lenght) { try { webSocketSupport.write(frame, new String(s.substring(offset, lenght))); } catch (IOException e) { - LoggerUtils.getLogger().log(Level.INFO, "", e); - + throw new RuntimeException(e); } } @@ -445,8 +439,7 @@ public void write(java.lang.String s) { try { webSocketSupport.write(frame, new String(s)); } catch (IOException e) { - LoggerUtils.getLogger().log(Level.INFO, "", e); - + throw new RuntimeException(e); } } };