Skip to main content

websocket : RuntimeException when after page is refreshed

4 replies [Last post]
neilghosh
Offline
Joined: 2010-04-05
Points: 0

I am broadcasting to each peer in a loop. Looks like when I refresh the
page the socket is not gracefully closed and peer reference still remains
in server
When messages are broadcasted it throws invocation target exception. Any
suggestion to gracefully close the socket upon refresh ?

@WebSocketOpen
public void onOpen(Session peer) {
System.out.println("New user got connected");
peers.add(peer);
}

@WebSocketClose
public void onClose(Session peer) {
peers.remove(peer);
}

@WebSocketMessage
public void boradcastFigure(String msg, Session session) throws
IOException {
System.out.println("Broadcasting the message " + msg);
for (Session peer : peers) {
if (!peer.equals(session)) {
peer.getRemote().sendString(msg);
}
}
}

--

java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at
org.glassfish.tyrus.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:336)
at
org.glassfish.tyrus.AnnotatedEndpoint.access$000(AnnotatedEndpoint.java:74)
at
org.glassfish.tyrus.AnnotatedEndpoint$BasicHandler$1.onMessage(AnnotatedEndpoint.java:406)
at
org.glassfish.tyrus.SessionImpl.notifyMessageHandlers(SessionImpl.java:265)
at org.glassfish.tyrus.EndpointWrapper.onMessage(EndpointWrapper.java:306)
at
org.glassfish.tyrus.grizzly.GrizzlyEndpoint.onMessage(GrizzlyEndpoint.java:138)
at
org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:164)
at
org.glassfish.grizzly.websockets.frametypes.TextFrameType.respond(TextFrameType.java:70)
at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
at
org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
at
org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
at
org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:273)
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:77)
at
org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:818)
at
org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
at
org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
at
org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
at
org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
at
org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:562)
at
org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:542)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:474)
at
org.glassfish.tyrus.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:334)
... 23 more
Caused by: java.lang.RuntimeException: Socket is not connected.
at
org.glassfish.grizzly.websockets.DefaultWebSocket.send(DefaultWebSocket.java:208)
at
org.glassfish.tyrus.grizzly.GrizzlyRemoteEndpoint.sendString(GrizzlyRemoteEndpoint.java:82)
at
org.glassfish.tyrus.RemoteEndpointWrapper.sendString(RemoteEndpointWrapper.java:78)
at com.mycompany.slate.Slate.boradcastFigure(Slate.java:52)
... 27 more

Reply viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.
pavel_bucek
Offline
Joined: 2008-10-24
Points: 0

Hi Neil,

can you please file this to Tyrus JIRA as a bug?
http://java.net/jira/browse/TYRUS

and about your issue: Servlet API currently cannot detect connection
close invoked from client side, but we should be able to handle this
state. Does this affect your application in any other way (than printing
this message into server.log)?

btw, Tyrus has its own mailing list - users@tyrus.java.net.

Regards,
Pavel

On 1/25/13 2:27 PM, Neil Ghosh wrote:
> I am broadcasting to each peer in a loop. Looks like when I refresh
> the page the socket is not gracefully closed and peer reference still
> remains in server
> When messages are broadcasted it throws invocation target exception.
> Any suggestion to gracefully close the socket upon refresh ?
>
>
> @WebSocketOpen
> public void onOpen(Session peer) {
> System.out.println("New user got connected");
> peers.add(peer);
> }
>
> @WebSocketClose
> public void onClose(Session peer) {
> peers.remove(peer);
> }
> @WebSocketMessage
> public void boradcastFigure(String msg, Session session) throws
> IOException {
> System.out.println("Broadcasting the message " + msg);
> for (Session peer : peers) {
> if (!peer.equals(session)) {
> peer.getRemote().sendString(msg);
> }
> }
> }
>
> --
>
> java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
> at
> org.glassfish.tyrus.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:336)
> at
> org.glassfish.tyrus.AnnotatedEndpoint.access$000(AnnotatedEndpoint.java:74)
> at
> org.glassfish.tyrus.AnnotatedEndpoint$BasicHandler$1.onMessage(AnnotatedEndpoint.java:406)
> at
> org.glassfish.tyrus.SessionImpl.notifyMessageHandlers(SessionImpl.java:265)
> at org.glassfish.tyrus.EndpointWrapper.onMessage(EndpointWrapper.java:306)
> at
> org.glassfish.tyrus.grizzly.GrizzlyEndpoint.onMessage(GrizzlyEndpoint.java:138)
> at
> org.glassfish.grizzly.websockets.DefaultWebSocket.onMessage(DefaultWebSocket.java:164)
> at
> org.glassfish.grizzly.websockets.frametypes.TextFrameType.respond(TextFrameType.java:70)
> at org.glassfish.grizzly.websockets.DataFrame.respond(DataFrame.java:104)
> at
> org.glassfish.grizzly.websockets.WebSocketFilter.handleRead(WebSocketFilter.java:221)
> at
> org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:119)
> at
> org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:273)
> 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:77)
> at
> org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:818)
> at
> org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:112)
> at
> org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:115)
> at
> org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:55)
> at
> org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:135)
> at
> org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:562)
> at
> org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:542)
> at java.lang.Thread.run(Thread.java:722)
> Caused by: java.lang.reflect.InvocationTargetException
> at sun.reflect.GeneratedMethodAccessor39.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:474)
> at
> org.glassfish.tyrus.AnnotatedEndpoint.callMethod(AnnotatedEndpoint.java:334)
> ... 23 more
> Caused by: java.lang.RuntimeException: Socket is not connected.
> at
> org.glassfish.grizzly.websockets.DefaultWebSocket.send(DefaultWebSocket.java:208)
> at
> org.glassfish.tyrus.grizzly.GrizzlyRemoteEndpoint.sendString(GrizzlyRemoteEndpoint.java:82)
> at
> org.glassfish.tyrus.RemoteEndpointWrapper.sendString(RemoteEndpointWrapper.java:78)
> at com.mycompany.slate.Slate.boradcastFigure(Slate.java:52)
> ... 27 more
>

neilghosh
Offline
Joined: 2010-04-05
Points: 0
pavel_bucek
Offline
Joined: 2008-10-24
Points: 0

great, thanks!

On 1/27/13 3:52 PM, forums@java.net wrote:
> Logged issue http://java.net/jira/browse/TYRUS-73
>
> --
>
> [Message sent by forum member 'neilghosh']
>
> View Post: http://forums.java.net/node/894175
>
>
>
>

neilghosh
Offline
Joined: 2010-04-05
Points: 0

Thanks for the response Pavel,

I realised that the session object in the following method is coming
out to be null

@WebSocketClose
public void onClose(Session peer) {}

Hence the session could not be removed from the list of connected
users. Shall I file a jira with tyrus ? The email you posted has been
truncated in the forum.