WebSocket clinet with Grizzly

classic Classic list List threaded Threaded
7 messages Options
Reply | Threaded
Open this post in threaded view
|

WebSocket clinet with Grizzly

Weiqi Gao
Hi,

I'm not sure if this is the right mailing list for the question. I
subscribed for a few weeks ago but didn't see too much traffic. But I
saw Ryan Lubke's post yesterday. So I thought I'll ask the question here
and if there is a better place where Grizzly related discussions are
happening, please point me to that location.

I'm trying to write a WebSocket client that establishes permanent secure
(wss://) connections to a WebSocket server using the Grizzly framework.

I have several meta-questions and a real question:

Meta-Q1: The WebSockets chapter of the Grizzly documentation points me
to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the
Grizzly Side of Things…"
(http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/).
It was written in January 2012. Is it still current?

Meta-Q2: The blog entry points to the Maven dependency:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-client</artifactId>
<version>1.0</version>
</dependency>

I saw that version 1.3 of the same package is available at Maven
Central. I assume it is OK to use 1.3. Am I right?

Meta-Q3: Why is grizzly-http-client not versioned like the rest of the
Grizzly components? Is it somehow less of an integral part of the
Grizzly framework?

Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven
Central contains only one Java source file, that of
org/glassfish/grizzly/http/clientVersion.java. Where can I get the rest
of the sources from Maven Central?

Q1: I create the WebSocket using the following code:

AsyncHttpClientConfig asyncHttpClientConfig =
new AsyncHttpClientConfig.Builder()
.setSSLContext(MySSLUtil.createSSLContext())
.build();
AsyncHttpClient asyncHttpClient =
new AsyncHttpClient(new GrizzlyAsyncHttpProvider(asyncHttpClientConfig),
asyncHttpClientConfig);
WebSocketListener webSocketListener = new DefaultWebSocketListener() {
// my processing
};
WebSocketUpgradeHandler handler =
new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(webSocketListener)
.build();
String wsUrl = "wss://localhost/context";
WebSocket webSocket =
asyncHttpClient.prepareGet(wsUrl).execute(handler).get();

It successfully connects to the server and establishes the connection,
over which the client was able to exchange data with the server.
However, after a minute or so, the IdleTimeoutFilter that was
instantiated here

<init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
initializeTransport():346, GrizzlyAsyncHttpProvider
{com.ning.http.client.providers.grizzly}
<init>():176, GrizzlyAsyncHttpProvider
{com.ning.http.client.providers.grizzly}

would fire and eventually close the WebSocket connection:

java.util.concurrent.TimeoutException: Timeout exceeded
at
com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
at
com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
at
org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
at
org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
at
org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

What is the best way to get around my problem?

TIA,
--
Weiqi Gao
[hidden email]
http://weiqigao.blogspot.com/
Reply | Threaded
Open this post in threaded view
|

Re: WebSocket clinet with Grizzly

Ryan Lubke-2


May 2, 2013 2:30 PM
Hi,

I'm not sure if this is the right mailing list for the question. I subscribed for a few weeks ago but didn't see too much traffic. But I saw Ryan Lubke's post yesterday. So I thought I'll ask the question here and if there is a better place where Grizzly related discussions are happening, please point me to that location.

I'm trying to write a WebSocket client that establishes permanent secure (wss://) connections to a WebSocket server using the Grizzly framework.

I have several meta-questions and a real question:

Meta-Q1: The WebSockets chapter of the Grizzly documentation points me to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the Grizzly Side of Things…" (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/). It was written in January 2012. Is it still current?
Yes.

Meta-Q2: The blog entry points to the Maven dependency:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-client</artifactId>
<version>1.0</version>
</dependency>

I saw that version 1.3 of the same package is available at Maven Central. I assume it is OK to use 1.3. Am I right?
Yes.

Meta-Q3: Why is grizzly-http-client not versioned like the rest of the Grizzly components? Is it somehow less of an integral part of the Grizzly framework?
I wanted to keep it separate as the Async HTTP Client release schedule differs from ours.  It wouldn't make sense to release a new version when nothing changed.

Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven Central contains only one Java source file, that of org/glassfish/grizzly/http/clientVersion.java. Where can I get the rest of the sources from Maven Central?
I would recommend getting the source bundle for Async HTTP Client 1.7.6.

Q1: I create the WebSocket using the following code:

AsyncHttpClientConfig asyncHttpClientConfig =
new AsyncHttpClientConfig.Builder()
.setSSLContext(MySSLUtil.createSSLContext())
.build();
AsyncHttpClient asyncHttpClient =
new AsyncHttpClient(new GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
WebSocketListener webSocketListener = new DefaultWebSocketListener() {
// my processing
};
WebSocketUpgradeHandler handler =
new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(webSocketListener)
.build();
String wsUrl = "wss://localhost/context";
WebSocket webSocket = asyncHttpClient.prepareGet(wsUrl).execute(handler).get();

It successfully connects to the server and establishes the connection, over which the client was able to exchange data with the server. However, after a minute or so, the IdleTimeoutFilter that was instantiated here

<init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
initializeTransport():346, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}
<init>():176, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}

would fire and eventually close the WebSocket connection:

java.util.concurrent.TimeoutException: Timeout exceeded
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

What is the best way to get around my problem?
Set AsyncHttpClientConfig's requestTimeoutInMs property to -1.

Would also request logging an issue.  The logic should be disabling the timeout for ws connections.
Reply | Threaded
Open this post in threaded view
|

Re: WebSocket clinet with Grizzly

Weiqi Gao
Ryan,

Thank you Ryan for the speedy response.  I files a bug GRIZZLY-1503 for this.

--
Weiqi

On 5/2/2013 4:55 PM, Ryan Lubke wrote:


May 2, 2013 2:30 PM
Hi,

I'm not sure if this is the right mailing list for the question. I subscribed for a few weeks ago but didn't see too much traffic. But I saw Ryan Lubke's post yesterday. So I thought I'll ask the question here and if there is a better place where Grizzly related discussions are happening, please point me to that location.

I'm trying to write a WebSocket client that establishes permanent secure (<a class="moz-txt-link-freetext" href="wss://">wss://) connections to a WebSocket server using the Grizzly framework.

I have several meta-questions and a real question:

Meta-Q1: The WebSockets chapter of the Grizzly documentation points me to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the Grizzly Side of Things…" (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/). It was written in January 2012. Is it still current?
Yes.

Meta-Q2: The blog entry points to the Maven dependency:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-client</artifactId>
<version>1.0</version>
</dependency>

I saw that version 1.3 of the same package is available at Maven Central. I assume it is OK to use 1.3. Am I right?
Yes.

Meta-Q3: Why is grizzly-http-client not versioned like the rest of the Grizzly components? Is it somehow less of an integral part of the Grizzly framework?
I wanted to keep it separate as the Async HTTP Client release schedule differs from ours.  It wouldn't make sense to release a new version when nothing changed.

Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven Central contains only one Java source file, that of org/glassfish/grizzly/http/clientVersion.java. Where can I get the rest of the sources from Maven Central?
I would recommend getting the source bundle for Async HTTP Client 1.7.6.

Q1: I create the WebSocket using the following code:

AsyncHttpClientConfig asyncHttpClientConfig =
new AsyncHttpClientConfig.Builder()
.setSSLContext(MySSLUtil.createSSLContext())
.build();
AsyncHttpClient asyncHttpClient =
new AsyncHttpClient(new GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
WebSocketListener webSocketListener = new DefaultWebSocketListener() {
// my processing
};
WebSocketUpgradeHandler handler =
new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(webSocketListener)
.build();
String wsUrl = <a class="moz-txt-link-rfc2396E" href="wss://localhost/context">"wss://localhost/context";
WebSocket webSocket = asyncHttpClient.prepareGet(wsUrl).execute(handler).get();

It successfully connects to the server and establishes the connection, over which the client was able to exchange data with the server. However, after a minute or so, the IdleTimeoutFilter that was instantiated here

<init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
initializeTransport():346, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}
<init>():176, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}

would fire and eventually close the WebSocket connection:

java.util.concurrent.TimeoutException: Timeout exceeded
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

What is the best way to get around my problem?
Set AsyncHttpClientConfig's requestTimeoutInMs property to -1.

Would also request logging an issue.  The logic should be disabling the timeout for ws connections.

Reply | Threaded
Open this post in threaded view
|

WebSocket server with Grizzly (was Re: WebSocket clinet with Grizzly)

Weiqi Gao
In reply to this post by Ryan Lubke-2
Hi,

Just to follow up.  It seems that the there is a 15 minutes timeout for WebSockets on the server side as well.  I'm running my own WebSocketApplication (I'm using grizzly-http-server-2.2.21.jar and friends, and I'm using code very similar to the example in the WebSocket chapter of the documentation), accepted a connection from the client.  After 15 minutes, the onClose() call back is called from a thread named "HttpServer-0" with the following stack trace.

I'd appreciate it if someone can let me know how to turn off this timeout off as well.

  at  foo.MyWebSocketApplication.onClose(MyWebSocketApplication.java:68)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.onClose(DefaultWebSocket.java:128)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$1.failed(ProtocolHandler.java:163)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$2.failed(ProtocolHandler.java:199)
  at  org.glassfish.grizzly.asyncqueue.AsyncQueueRecord.notifyFailure(AsyncQueueRecord.java:108)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.onWriteFailure(AbstractNIOAsyncQueueWriter.java:573)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.writeQueueRecord(AbstractNIOAsyncQueueWriter.java:233)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:219)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:127)
  at  org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:390)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:397)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:380)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.write(ProtocolHandler.java:186)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.send(ProtocolHandler.java:91)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.close(ProtocolHandler.java:158)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:192)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:183)
  at  org.glassfish.grizzly.websockets.WebSocketFilter.handleClose(WebSocketFilter.java:156)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$4.execute(ExecutorResolver.java:76)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:770)
  at  org.glassfish.grizzly.nio.NIOConnection.preClose(NIOConnection.java:702)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.preClose(TCPNIOConnection.java:96)
  at  org.glassfish.grizzly.nio.NIOConnection.close0(NIOConnection.java:435)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.close0(TCPNIOConnection.java:244)
  at  org.glassfish.grizzly.nio.NIOConnection.close(NIOConnection.java:419)
  at  org.glassfish.grizzly.nio.NIOConnection.closeSilently(NIOConnection.java:425)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:387)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
  at  org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
  at  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at  java.lang.Thread.run(Thread.java:722)]


On 5/2/2013 4:55 PM, Ryan Lubke wrote:


May 2, 2013 2:30 PM
Hi,

I'm not sure if this is the right mailing list for the question. I subscribed for a few weeks ago but didn't see too much traffic. But I saw Ryan Lubke's post yesterday. So I thought I'll ask the question here and if there is a better place where Grizzly related discussions are happening, please point me to that location.

I'm trying to write a WebSocket client that establishes permanent secure (<a class="moz-txt-link-freetext" href="wss://">wss://) connections to a WebSocket server using the Grizzly framework.

I have several meta-questions and a real question:

Meta-Q1: The WebSockets chapter of the Grizzly documentation points me to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the Grizzly Side of Things…" (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/). It was written in January 2012. Is it still current?
Yes.

Meta-Q2: The blog entry points to the Maven dependency:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-client</artifactId>
<version>1.0</version>
</dependency>

I saw that version 1.3 of the same package is available at Maven Central. I assume it is OK to use 1.3. Am I right?
Yes.

Meta-Q3: Why is grizzly-http-client not versioned like the rest of the Grizzly components? Is it somehow less of an integral part of the Grizzly framework?
I wanted to keep it separate as the Async HTTP Client release schedule differs from ours.  It wouldn't make sense to release a new version when nothing changed.

Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven Central contains only one Java source file, that of org/glassfish/grizzly/http/clientVersion.java. Where can I get the rest of the sources from Maven Central?
I would recommend getting the source bundle for Async HTTP Client 1.7.6.

Q1: I create the WebSocket using the following code:

AsyncHttpClientConfig asyncHttpClientConfig =
new AsyncHttpClientConfig.Builder()
.setSSLContext(MySSLUtil.createSSLContext())
.build();
AsyncHttpClient asyncHttpClient =
new AsyncHttpClient(new GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
WebSocketListener webSocketListener = new DefaultWebSocketListener() {
// my processing
};
WebSocketUpgradeHandler handler =
new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(webSocketListener)
.build();
String wsUrl = <a class="moz-txt-link-rfc2396E" href="wss://localhost/context">"wss://localhost/context";
WebSocket webSocket = asyncHttpClient.prepareGet(wsUrl).execute(handler).get();

It successfully connects to the server and establishes the connection, over which the client was able to exchange data with the server. However, after a minute or so, the IdleTimeoutFilter that was instantiated here

<init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
initializeTransport():346, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}
<init>():176, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}

would fire and eventually close the WebSocket connection:

java.util.concurrent.TimeoutException: Timeout exceeded
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

What is the best way to get around my problem?
Set AsyncHttpClientConfig's requestTimeoutInMs property to -1.

Would also request logging an issue.  The logic should be disabling the timeout for ws connections.

Reply | Threaded
Open this post in threaded view
|

Re: WebSocket server with Grizzly (was Re: WebSocket clinet with Grizzly)

Ryan Lubke-2
Correct.  You can configure the WebSocketFilter timeout via the WebSocketAddon:

final WebSocketAddon addon = new WebSocketAddon();
addon.setTimeoutInSeconds(...);

Then register the addon with the network listener.

May 23, 2013 5:29 AM
Hi,

Just to follow up.  It seems that the there is a 15 minutes timeout for WebSockets on the server side as well.  I'm running my own WebSocketApplication (I'm using grizzly-http-server-2.2.21.jar and friends, and I'm using code very similar to the example in the WebSocket chapter of the documentation), accepted a connection from the client.  After 15 minutes, the onClose() call back is called from a thread named "HttpServer-0" with the following stack trace.

I'd appreciate it if someone can let me know how to turn off this timeout off as well.

  at  foo.MyWebSocketApplication.onClose(MyWebSocketApplication.java:68)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.onClose(DefaultWebSocket.java:128)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$1.failed(ProtocolHandler.java:163)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$2.failed(ProtocolHandler.java:199)
  at  org.glassfish.grizzly.asyncqueue.AsyncQueueRecord.notifyFailure(AsyncQueueRecord.java:108)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.onWriteFailure(AbstractNIOAsyncQueueWriter.java:573)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.writeQueueRecord(AbstractNIOAsyncQueueWriter.java:233)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:219)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:127)
  at  org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:390)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:397)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:380)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.write(ProtocolHandler.java:186)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.send(ProtocolHandler.java:91)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.close(ProtocolHandler.java:158)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:192)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:183)
  at  org.glassfish.grizzly.websockets.WebSocketFilter.handleClose(WebSocketFilter.java:156)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$4.execute(ExecutorResolver.java:76)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:770)
  at  org.glassfish.grizzly.nio.NIOConnection.preClose(NIOConnection.java:702)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.preClose(TCPNIOConnection.java:96)
  at  org.glassfish.grizzly.nio.NIOConnection.close0(NIOConnection.java:435)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.close0(TCPNIOConnection.java:244)
  at  org.glassfish.grizzly.nio.NIOConnection.close(NIOConnection.java:419)
  at  org.glassfish.grizzly.nio.NIOConnection.closeSilently(NIOConnection.java:425)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:387)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
  at  org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
  at  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at  java.lang.Thread.run(Thread.java:722)]


On 5/2/2013 4:55 PM, Ryan Lubke wrote:

May 2, 2013 2:55 PM


May 2, 2013 2:30 PM
Hi,

I'm not sure if this is the right mailing list for the question. I subscribed for a few weeks ago but didn't see too much traffic. But I saw Ryan Lubke's post yesterday. So I thought I'll ask the question here and if there is a better place where Grizzly related discussions are happening, please point me to that location.

I'm trying to write a WebSocket client that establishes permanent secure (wss://) connections to a WebSocket server using the Grizzly framework.

I have several meta-questions and a real question:

Meta-Q1: The WebSockets chapter of the Grizzly documentation points me to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the Grizzly Side of Things…" (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/). It was written in January 2012. Is it still current?
Yes.

Meta-Q2: The blog entry points to the Maven dependency:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-client</artifactId>
<version>1.0</version>
</dependency>

I saw that version 1.3 of the same package is available at Maven Central. I assume it is OK to use 1.3. Am I right?
Yes.

Meta-Q3: Why is grizzly-http-client not versioned like the rest of the Grizzly components? Is it somehow less of an integral part of the Grizzly framework?
I wanted to keep it separate as the Async HTTP Client release schedule differs from ours.  It wouldn't make sense to release a new version when nothing changed.

Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven Central contains only one Java source file, that of org/glassfish/grizzly/http/clientVersion.java. Where can I get the rest of the sources from Maven Central?
I would recommend getting the source bundle for Async HTTP Client 1.7.6.

Q1: I create the WebSocket using the following code:

AsyncHttpClientConfig asyncHttpClientConfig =
new AsyncHttpClientConfig.Builder()
.setSSLContext(MySSLUtil.createSSLContext())
.build();
AsyncHttpClient asyncHttpClient =
new AsyncHttpClient(new GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
WebSocketListener webSocketListener = new DefaultWebSocketListener() {
// my processing
};
WebSocketUpgradeHandler handler =
new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(webSocketListener)
.build();
String wsUrl = "wss://localhost/context";
WebSocket webSocket = asyncHttpClient.prepareGet(wsUrl).execute(handler).get();

It successfully connects to the server and establishes the connection, over which the client was able to exchange data with the server. However, after a minute or so, the IdleTimeoutFilter that was instantiated here

<init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
initializeTransport():346, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}
<init>():176, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}

would fire and eventually close the WebSocket connection:

java.util.concurrent.TimeoutException: Timeout exceeded
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

What is the best way to get around my problem?
Set AsyncHttpClientConfig's requestTimeoutInMs property to -1.

Would also request logging an issue.  The logic should be disabling the timeout for ws connections.
May 2, 2013 2:30 PM
Hi,

I'm not sure if this is the right mailing list for the question. I subscribed for a few weeks ago but didn't see too much traffic. But I saw Ryan Lubke's post yesterday. So I thought I'll ask the question here and if there is a better place where Grizzly related discussions are happening, please point me to that location.

I'm trying to write a WebSocket client that establishes permanent secure (wss://) connections to a WebSocket server using the Grizzly framework.

I have several meta-questions and a real question:

Meta-Q1: The WebSockets chapter of the Grizzly documentation points me to Ryan's blog entry "Async HTTP Client 1.7.0 Released. Details on the Grizzly Side of Things…" (http://www.notshabby.net/2012/01/async-http-client-1-7-0-released-details-on-the-grizzly-side-of-things/). It was written in January 2012. Is it still current?

Meta-Q2: The blog entry points to the Maven dependency:

<dependency>
<groupId>org.glassfish.grizzly</groupId>
<artifactId>grizzly-http-client</artifactId>
<version>1.0</version>
</dependency>

I saw that version 1.3 of the same package is available at Maven Central. I assume it is OK to use 1.3. Am I right?

Meta-Q3: Why is grizzly-http-client not versioned like the rest of the Grizzly components? Is it somehow less of an integral part of the Grizzly framework?

Meta-Q4: The grizzly-http-client-1.3-sources.jar that I got from Maven Central contains only one Java source file, that of org/glassfish/grizzly/http/clientVersion.java. Where can I get the rest of the sources from Maven Central?

Q1: I create the WebSocket using the following code:

AsyncHttpClientConfig asyncHttpClientConfig =
new AsyncHttpClientConfig.Builder()
.setSSLContext(MySSLUtil.createSSLContext())
.build();
AsyncHttpClient asyncHttpClient =
new AsyncHttpClient(new GrizzlyAsyncHttpProvider(asyncHttpClientConfig), asyncHttpClientConfig);
WebSocketListener webSocketListener = new DefaultWebSocketListener() {
// my processing
};
WebSocketUpgradeHandler handler =
new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(webSocketListener)
.build();
String wsUrl = "wss://localhost/context";
WebSocket webSocket = asyncHttpClient.prepareGet(wsUrl).execute(handler).get();

It successfully connects to the server and establishes the connection, over which the client was able to exchange data with the server. However, after a minute or so, the IdleTimeoutFilter that was instantiated here

<init>():129, IdleTimeoutFilter {org.glassfish.grizzly.utils}
initializeTransport():346, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}
<init>():176, GrizzlyAsyncHttpProvider {com.ning.http.client.providers.grizzly}

would fire and eventually close the WebSocket connection:

java.util.concurrent.TimeoutException: Timeout exceeded
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider.timeout(GrizzlyAsyncHttpProvider.java:518)
at com.ning.http.client.providers.grizzly.GrizzlyAsyncHttpProvider$3.onTimeout(GrizzlyAsyncHttpProvider.java:350)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:385)
at org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
at org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:722)

What is the best way to get around my problem?

TIA,
--
Weiqi Gao
[hidden email]
http://weiqigao.blogspot.com/
Reply | Threaded
Open this post in threaded view
|

Re: WebSocket server with Grizzly (was Re: WebSocket clinet with Grizzly)

Weiqi Gao
I cannot find the method WebSocketAddOn#setTimeoutInSeconds.

On 5/23/2013 1:15 PM, Ryan Lubke wrote:
Correct.  You can configure the WebSocketFilter timeout via the WebSocketAddon:

final WebSocketAddon addon = new WebSocketAddon();
addon.setTimeoutInSeconds(...);

Then register the addon with the network listener.

May 23, 2013 5:29 AM
Hi,

Just to follow up.  It seems that the there is a 15 minutes timeout for WebSockets on the server side as well.  I'm running my own WebSocketApplication (I'm using grizzly-http-server-2.2.21.jar and friends, and I'm using code very similar to the example in the WebSocket chapter of the documentation), accepted a connection from the client.  After 15 minutes, the onClose() call back is called from a thread named "HttpServer-0" with the following stack trace.

I'd appreciate it if someone can let me know how to turn off this timeout off as well.

  at  foo.MyWebSocketApplication.onClose(MyWebSocketApplication.java:68)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.onClose(DefaultWebSocket.java:128)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$1.failed(ProtocolHandler.java:163)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$2.failed(ProtocolHandler.java:199)
  at  org.glassfish.grizzly.asyncqueue.AsyncQueueRecord.notifyFailure(AsyncQueueRecord.java:108)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.onWriteFailure(AbstractNIOAsyncQueueWriter.java:573)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.writeQueueRecord(AbstractNIOAsyncQueueWriter.java:233)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:219)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:127)
  at  org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:390)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:397)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:380)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.write(ProtocolHandler.java:186)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.send(ProtocolHandler.java:91)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.close(ProtocolHandler.java:158)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:192)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:183)
  at  org.glassfish.grizzly.websockets.WebSocketFilter.handleClose(WebSocketFilter.java:156)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$4.execute(ExecutorResolver.java:76)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:770)
  at  org.glassfish.grizzly.nio.NIOConnection.preClose(NIOConnection.java:702)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.preClose(TCPNIOConnection.java:96)
  at  org.glassfish.grizzly.nio.NIOConnection.close0(NIOConnection.java:435)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.close0(TCPNIOConnection.java:244)
  at  org.glassfish.grizzly.nio.NIOConnection.close(NIOConnection.java:419)
  at  org.glassfish.grizzly.nio.NIOConnection.closeSilently(NIOConnection.java:425)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:387)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
  at  org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
  at  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at  java.lang.Thread.run(Thread.java:722)]
Reply | Threaded
Open this post in threaded view
|

Re: WebSocket server with Grizzly (was Re: WebSocket clinet with Grizzly)

Ryan Lubke-2
Sorry - that's in 2.3.

For 2.2.21, you'll have to avoid using the WebSocketAddon.

Instead you'd do something like this:

WebSocketFilter wsFilter = new WebSocketFilter(<timeout in seconds>);

Then to insert it into the FilterChain properly, you'd do something like:

final int httpServerFilterIdx = filterChainbuilder.indexOfType(HttpServerFilter.class);
if (httpServerFilterIdx >= 0) {
    // Insert the WebSocketFilter right after HttpCodecFilter
    builder.add(httpServerFilterIdx, wsFilter);
}


That said, if you're able to upgrade to 2.3.2, I'd recommend doing so. 

Weiqi Gao wrote:
I cannot find the method WebSocketAddOn#setTimeoutInSeconds.

On 5/23/2013 1:15 PM, Ryan Lubke wrote:
Correct.  You can configure the WebSocketFilter timeout via the WebSocketAddon:

final WebSocketAddon addon = new WebSocketAddon();
addon.setTimeoutInSeconds(...);

Then register the addon with the network listener.

May 23, 2013 5:29 AM
Hi,

Just to follow up.  It seems that the there is a 15 minutes timeout for WebSockets on the server side as well.  I'm running my own WebSocketApplication (I'm using grizzly-http-server-2.2.21.jar and friends, and I'm using code very similar to the example in the WebSocket chapter of the documentation), accepted a connection from the client.  After 15 minutes, the onClose() call back is called from a thread named "HttpServer-0" with the following stack trace.

I'd appreciate it if someone can let me know how to turn off this timeout off as well.

  at  foo.MyWebSocketApplication.onClose(MyWebSocketApplication.java:68)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.onClose(DefaultWebSocket.java:128)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$1.failed(ProtocolHandler.java:163)
  at  org.glassfish.grizzly.websockets.ProtocolHandler$2.failed(ProtocolHandler.java:199)
  at  org.glassfish.grizzly.asyncqueue.AsyncQueueRecord.notifyFailure(AsyncQueueRecord.java:108)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.onWriteFailure(AbstractNIOAsyncQueueWriter.java:573)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.writeQueueRecord(AbstractNIOAsyncQueueWriter.java:233)
  at  org.glassfish.grizzly.nio.AbstractNIOAsyncQueueWriter.write(AbstractNIOAsyncQueueWriter.java:219)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransportFilter.handleWrite(TCPNIOTransportFilter.java:127)
  at  org.glassfish.grizzly.filterchain.TransportFilter.handleWrite(TransportFilter.java:191)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$8.execute(ExecutorResolver.java:111)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.write(DefaultFilterChain.java:390)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:397)
  at  org.glassfish.grizzly.nio.NIOConnection.write(NIOConnection.java:380)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.write(ProtocolHandler.java:186)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.send(ProtocolHandler.java:91)
  at  org.glassfish.grizzly.websockets.ProtocolHandler.close(ProtocolHandler.java:158)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:192)
  at  org.glassfish.grizzly.websockets.DefaultWebSocket.close(DefaultWebSocket.java:183)
  at  org.glassfish.grizzly.websockets.WebSocketFilter.handleClose(WebSocketFilter.java:156)
  at  org.glassfish.grizzly.filterchain.ExecutorResolver$4.execute(ExecutorResolver.java:76)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:265)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:200)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:134)
  at  org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:112)
  at  org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:78)
  at  org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:770)
  at  org.glassfish.grizzly.nio.NIOConnection.preClose(NIOConnection.java:702)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.preClose(TCPNIOConnection.java:96)
  at  org.glassfish.grizzly.nio.NIOConnection.close0(NIOConnection.java:435)
  at  org.glassfish.grizzly.nio.transport.TCPNIOConnection.close0(TCPNIOConnection.java:244)
  at  org.glassfish.grizzly.nio.NIOConnection.close(NIOConnection.java:419)
  at  org.glassfish.grizzly.nio.NIOConnection.closeSilently(NIOConnection.java:425)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:387)
  at  org.glassfish.grizzly.utils.IdleTimeoutFilter$DefaultWorker.doWork(IdleTimeoutFilter.java:365)
  at  org.glassfish.grizzly.utils.DelayedExecutor$DelayedRunnable.run(DelayedExecutor.java:153)
  at  java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
  at  java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
  at  java.lang.Thread.run(Thread.java:722)]