You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@wicket.apache.org by fanfy <el...@gmail.com> on 2020/05/20 07:59:26 UTC
WebSocket concurrent modification
Hello,
Maybe you can help me with a problem related to wicket 8.8.0 with websocket.
Sometimes (usually when there are many ajax request in a short time
interval) I encounter ConcurrentModificationException. The page store saving
is synchronous. I created a sample project (attached websocket-test.tar
<http://apache-wicket.1842946.n4.nabble.com/file/t375849/websocket-test.tar>
)
mvn package
java -jar target/websocket-test-0.0.1-SNAPSHOT.jar
http://localhost:8080/)
If clicking multiple times on 'New message' AjaxLink soon the exception is
thrown. Internally I have a timer that creates messages on 50 milliseconds
frequency (may be changed in src/main/resources/application.properties -
fanfy.messsage-generator-frequency=50)
Below is a sample stacktrace.
Thank you.
2020-05-20 10:43:55.241 ERROR 246999 --- [nio-8080-exec-1]
o.apache.wicket.DefaultExceptionMapper : Unexpected error occurred
java.util.ConcurrentModificationException: null
at
org.apache.commons.collections4.map.AbstractLinkedMap$LinkIterator.nextEntry(AbstractLinkedMap.java:574)
~[commons-collections4-4.4.jar!/:4.4]
at
org.apache.commons.collections4.map.AbstractLinkedMap$ValuesIterator.next(AbstractLinkedMap.java:506)
~[commons-collections4-4.4.jar!/:4.4]
at
org.apache.wicket.MarkupContainer$1MarkupChildIterator.refreshInternalIteratorIfNeeded(MarkupContainer.java:624)
~[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.MarkupContainer$1MarkupChildIterator.hasNext(MarkupContainer.java:573)
~[wicket-core-8.8.0.jar!/:8.8.0]
at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:134)
~[wicket-util-8.8.0.jar!/:8.8.0]
at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
~[wicket-util-8.8.0.jar!/:8.8.0]
at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
~[wicket-util-8.8.0.jar!/:8.8.0]
at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
~[wicket-util-8.8.0.jar!/:8.8.0]
at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:123)
~[wicket-util-8.8.0.jar!/:8.8.0]
at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:192)
~[wicket-util-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:976)
~[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.ComponentEventSender.breadth(ComponentEventSender.java:160)
~[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.ComponentEventSender.send(ComponentEventSender.java:68)
~[wicket-core-8.8.0.jar!/:8.8.0]
at org.apache.wicket.Component.send(Component.java:4413)
~[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.ajax.AjaxRequestHandler.respond(AjaxRequestHandler.java:349)
~[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:914)
~[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)
~[wicket-request-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:282)
[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253)
[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221)
[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.protocol.ws.AbstractUpgradeFilter.processRequestCycle(AbstractUpgradeFilter.java:70)
[wicket-native-websocket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:206)
[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:299)
[wicket-core-8.8.0.jar!/:8.8.0]
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
[na:1.8.0_252]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
[na:1.8.0_252]
at
org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
[tomcat-embed-core-9.0.35.jar!/:9.0.35]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252]
Exception in thread "Timer-0" java.lang.IllegalStateException: Message will
not be sent because the WebSocket session has been closed
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:430)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
at
org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:191)
at
org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
at
org.apache.wicket.protocol.ws.javax.JavaxWebSocketConnection.sendMessage(JavaxWebSocketConnection.java:81)
at
org.apache.wicket.protocol.ws.api.WebSocketResponse.close(WebSocketResponse.java:92)
at
org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor.broadcastMessage(AbstractWebSocketProcessor.java:287)
at
org.apache.wicket.protocol.ws.api.AbstractWebSocketConnection.sendMessage(AbstractWebSocketConnection.java:43)
at
fanfy.websocket.service.impl.MessageServiceImpl.broadcastWebSocketMessage(MessageServiceImpl.java:81)
at
fanfy.websocket.service.impl.MessageServiceImpl.addMessage(MessageServiceImpl.java:48)
at
fanfy.websocket.service.impl.MessageServiceImpl$1.run(MessageServiceImpl.java:59)
at java.util.TimerThread.mainLoop(Timer.java:555)
at java.util.TimerThread.run(Timer.java:505)
--
Sent from: http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: WebSocket concurrent modification
Posted by fanfy <el...@gmail.com>.
Updated the sample application websocket-test.tar
<http://apache-wicket.1842946.n4.nabble.com/file/t375849/websocket-test.tar>
--
Sent from: http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: WebSocket concurrent modification
Posted by Martin Grigorov <mg...@apache.org>.
On Thu, May 28, 2020 at 9:43 AM fanfy <el...@gmail.com> wrote:
> Hello,I finally found the problem ... It seems that I didn't understood
> very
> well how to use WebSocketMessageBroadcaster from wicket-spring-boot. The
> proper way to broadcast websocket messages from an ajax call is to use
> org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster with an
> additional configuration of the Executor that must broadcast the messages
> using a separate threadFor example, if using springframework (with wicket
> application as a bean) you must configure the executor:
> java.util.concurrent.Executor executor =
> Executors.newSingleThreadExecutor();
>
> WebSocketSettings.Holder.get(webApplication).setWebSocketPushMessageExecutor(new
> Executor() { @Override
> public void run(Runnable command) {
> executor.execute(command); } });
> To broadcast messages from business code you can use spring events
> (published from your business code) To broadcast from ajax handlers inject
> this bean and call broadcastToAll(event) directly.
> /** * * @author Elvis Ciocoiu * */@Componentpublic class
> TaskEventWebSocketBroadcaster { private WebSocketPushBroadcaster
> broadcaster; @Autowired private Application application;
> @PostConstruct
> public void init() { WebSocketSettings webSocketSettings =
> WebSocketSettings.Holder.get(application);
> IWebSocketConnectionRegistry
> webSocketConnectionRegistry = webSocketSettings.getConnectionRegistry();
>
> broadcaster = new WebSocketPushBroadcaster(webSocketConnectionRegistry);
> }
> @EventListener public void onTaskEvent(TaskEvent taskEvent) {
> broadcastToAll(taskEvent); } public void
> broadcastToAll(TaskEvent
> taskEvent) { broadcaster.broadcastAll(application, new
> TaskEventWebSocketPushMessage(taskEvent)); } /**
> * * @author Elvis
> Ciocoiu * */ public static class TaskEventWebSocketPushMessage
> implements
> IWebSocketPushMessage { private static final long serialVersionUID
> = 1L;
> private TaskEvent taskEvent; public
> TaskEventWebSocketPushMessage(TaskEvent taskEvent) {
> this.taskEvent =
> taskEvent; } public TaskEvent
> getTaskEvent() { return taskEvent; }
> }}
> I think these distinct scenarios (broadcast from ajaxhandler and from
> business thread) should be documented a little more in user guide. Sorry to
> waste your time.Thank you
>
https://issues.apache.org/jira/browse/WICKET-6791
https://github.com/apache/wicket/pull/435
Thank you!
>
> --
> Sent from:
> http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
>
Re: WebSocket concurrent modification
Posted by fanfy <el...@gmail.com>.
Hello,I finally found the problem ... It seems that I didn't understood very
well how to use WebSocketMessageBroadcaster from wicket-spring-boot. The
proper way to broadcast websocket messages from an ajax call is to use
org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster with an
additional configuration of the Executor that must broadcast the messages
using a separate threadFor example, if using springframework (with wicket
application as a bean) you must configure the executor:
java.util.concurrent.Executor executor =
Executors.newSingleThreadExecutor();
WebSocketSettings.Holder.get(webApplication).setWebSocketPushMessageExecutor(new
Executor() { @Override public void run(Runnable command) {
executor.execute(command); } });
To broadcast messages from business code you can use spring events
(published from your business code) To broadcast from ajax handlers inject
this bean and call broadcastToAll(event) directly.
/** * * @author Elvis Ciocoiu * */@Componentpublic class
TaskEventWebSocketBroadcaster { private WebSocketPushBroadcaster
broadcaster; @Autowired private Application application; @PostConstruct
public void init() { WebSocketSettings webSocketSettings =
WebSocketSettings.Holder.get(application); IWebSocketConnectionRegistry
webSocketConnectionRegistry = webSocketSettings.getConnectionRegistry();
broadcaster = new WebSocketPushBroadcaster(webSocketConnectionRegistry); }
@EventListener public void onTaskEvent(TaskEvent taskEvent) {
broadcastToAll(taskEvent); } public void broadcastToAll(TaskEvent
taskEvent) { broadcaster.broadcastAll(application, new
TaskEventWebSocketPushMessage(taskEvent)); } /** * * @author Elvis
Ciocoiu * */ public static class TaskEventWebSocketPushMessage implements
IWebSocketPushMessage { private static final long serialVersionUID = 1L;
private TaskEvent taskEvent; public
TaskEventWebSocketPushMessage(TaskEvent taskEvent) { this.taskEvent =
taskEvent; } public TaskEvent getTaskEvent() { return taskEvent; } }}
I think these distinct scenarios (broadcast from ajaxhandler and from
business thread) should be documented a little more in user guide. Sorry to
waste your time.Thank you
--
Sent from: http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org
Re: WebSocket concurrent modification
Posted by Sven Meier <sv...@meiers.net>.
Hi,
I can reproduce the problem, but don't know yet what is causing this.
What I can see is that the page is properly locked when being accessed
via Ajax or via a web socket push.
Thus a concurrent modification should not occur.
I'll have to investigate further.
Have fun
Sven
On 20.05.20 09:59, fanfy wrote:
> Hello,
>
> Maybe you can help me with a problem related to wicket 8.8.0 with websocket.
> Sometimes (usually when there are many ajax request in a short time
> interval) I encounter ConcurrentModificationException. The page store saving
> is synchronous. I created a sample project (attached websocket-test.tar
> <http://apache-wicket.1842946.n4.nabble.com/file/t375849/websocket-test.tar>
> )
>
> mvn package
> java -jar target/websocket-test-0.0.1-SNAPSHOT.jar
> http://localhost:8080/)
>
> If clicking multiple times on 'New message' AjaxLink soon the exception is
> thrown. Internally I have a timer that creates messages on 50 milliseconds
> frequency (may be changed in src/main/resources/application.properties -
> fanfy.messsage-generator-frequency=50)
>
> Below is a sample stacktrace.
>
> Thank you.
>
> 2020-05-20 10:43:55.241 ERROR 246999 --- [nio-8080-exec-1]
> o.apache.wicket.DefaultExceptionMapper : Unexpected error occurred
>
> java.util.ConcurrentModificationException: null
> at
> org.apache.commons.collections4.map.AbstractLinkedMap$LinkIterator.nextEntry(AbstractLinkedMap.java:574)
> ~[commons-collections4-4.4.jar!/:4.4]
> at
> org.apache.commons.collections4.map.AbstractLinkedMap$ValuesIterator.next(AbstractLinkedMap.java:506)
> ~[commons-collections4-4.4.jar!/:4.4]
> at
> org.apache.wicket.MarkupContainer$1MarkupChildIterator.refreshInternalIteratorIfNeeded(MarkupContainer.java:624)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.MarkupContainer$1MarkupChildIterator.hasNext(MarkupContainer.java:573)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:134)
> ~[wicket-util-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
> ~[wicket-util-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
> ~[wicket-util-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:162)
> ~[wicket-util-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:123)
> ~[wicket-util-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.util.visit.Visits.visitChildren(Visits.java:192)
> ~[wicket-util-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.MarkupContainer.visitChildren(MarkupContainer.java:976)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.ComponentEventSender.breadth(ComponentEventSender.java:160)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.ComponentEventSender.send(ComponentEventSender.java:68)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at org.apache.wicket.Component.send(Component.java:4413)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.ajax.AjaxRequestHandler.respond(AjaxRequestHandler.java:349)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:914)
> ~[wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)
> ~[wicket-request-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:282)
> [wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:253)
> [wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.request.cycle.RequestCycle.processRequestAndDetach(RequestCycle.java:221)
> [wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.protocol.ws.AbstractUpgradeFilter.processRequestCycle(AbstractUpgradeFilter.java:70)
> [wicket-native-websocket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:206)
> [wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:299)
> [wicket-core-8.8.0.jar!/:8.8.0]
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
> [na:1.8.0_252]
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
> [na:1.8.0_252]
> at
> org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
> [tomcat-embed-core-9.0.35.jar!/:9.0.35]
> at java.lang.Thread.run(Thread.java:748) [na:1.8.0_252]
>
> Exception in thread "Timer-0" java.lang.IllegalStateException: Message will
> not be sent because the WebSocket session has been closed
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.writeMessagePart(WsRemoteEndpointImplBase.java:430)
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:309)
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendMessageBlock(WsRemoteEndpointImplBase.java:250)
> at
> org.apache.tomcat.websocket.WsRemoteEndpointImplBase.sendString(WsRemoteEndpointImplBase.java:191)
> at
> org.apache.tomcat.websocket.WsRemoteEndpointBasic.sendText(WsRemoteEndpointBasic.java:37)
> at
> org.apache.wicket.protocol.ws.javax.JavaxWebSocketConnection.sendMessage(JavaxWebSocketConnection.java:81)
> at
> org.apache.wicket.protocol.ws.api.WebSocketResponse.close(WebSocketResponse.java:92)
> at
> org.apache.wicket.protocol.ws.api.AbstractWebSocketProcessor.broadcastMessage(AbstractWebSocketProcessor.java:287)
> at
> org.apache.wicket.protocol.ws.api.AbstractWebSocketConnection.sendMessage(AbstractWebSocketConnection.java:43)
> at
> fanfy.websocket.service.impl.MessageServiceImpl.broadcastWebSocketMessage(MessageServiceImpl.java:81)
> at
> fanfy.websocket.service.impl.MessageServiceImpl.addMessage(MessageServiceImpl.java:48)
> at
> fanfy.websocket.service.impl.MessageServiceImpl$1.run(MessageServiceImpl.java:59)
> at java.util.TimerThread.mainLoop(Timer.java:555)
> at java.util.TimerThread.run(Timer.java:505)
>
>
> --
> Sent from: http://apache-wicket.1842946.n4.nabble.com/Users-forum-f1842947.html
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
> For additional commands, e-mail: users-help@wicket.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@wicket.apache.org
For additional commands, e-mail: users-help@wicket.apache.org