下面是这种情况:
- WebSocket的服务器正在运行
- 泰鲁斯客户端共享容器被启用
- 泰鲁斯 - 客户端连接到服务器(一切都很好)
- WebSocket伺服器重新启动
- 泰鲁斯 - 客户端无法连接到服务器,并抛出即使在服务器启动以下异常:
javax.websocket.DeploymentException: Connection failed
- 如果客户端应用程序重新启动它可以重新连接到服务器
注意:如果不会发生此问题泰鲁斯客户共享容器被禁用。
堆栈跟踪:
javax.websocket.DeploymentException: Connection failed.
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket._connect(GrizzlyClientSocket.java:428) ~[tyrus-container-grizzly-client-1.11.jar:?]
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.access$000(GrizzlyClientSocket.java:103) ~[tyrus-container-grizzly-client-1.11.jar:?]
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket$1.call(GrizzlyClientSocket.java:235) ~[tyrus-container-grizzly-client-1.11.jar:?]
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket$1.call(GrizzlyClientSocket.java:231) ~[tyrus-container-grizzly-client-1.11.jar:?]
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket.connect(GrizzlyClientSocket.java:249) ~[tyrus-container-grizzly-client-1.11.jar:?]
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientContainer.openClientSocket(GrizzlyClientContainer.java:95) ~[tyrus-container-grizzly-client-1.11.jar:?]
at org.glassfish.tyrus.client.ClientManager$3$1.run(ClientManager.java:663) ~[tyrus-client-1.11.jar:?]
at org.glassfish.tyrus.client.ClientManager$3.run(ClientManager.java:712) ~[tyrus-client-1.11.jar:?]
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_31]
at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_31]
at org.glassfish.tyrus.client.ClientManager$SameThreadExecutorService.execute(ClientManager.java:866) ~[tyrus-client-1.11.jar:?]
at java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:112) ~[?:1.8.0_31]
at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:511) ~[tyrus-client-1.11.jar:?]
at org.glassfish.tyrus.client.ClientManager.connectToServer(ClientManager.java:373) ~[tyrus-client-1.11.jar:?]
...
Caused by: java.lang.NullPointerException
at org.glassfish.grizzly.nio.RoundRobinConnectionDistributor$SharedIterator.next(RoundRobinConnectionDistributor.java:146) ~[grizzly-framework-2.3.15-gfa.jar:2.3.15-gfa]
at org.glassfish.grizzly.nio.RoundRobinConnectionDistributor.registerChannelAsync(RoundRobinConnectionDistributor.java:101) ~[grizzly-framework-2.3.15-gfa.jar:2.3.15-gfa]
at org.glassfish.grizzly.nio.transport.TCPNIOConnectorHandler.connectAsync(TCPNIOConnectorHandler.java:177) ~[grizzly-framework-2.3.15-gfa.jar:2.3.15-gfa]
at org.glassfish.grizzly.AbstractSocketConnectorHandler.connect(AbstractSocketConnectorHandler.java:91) ~[grizzly-framework-2.3.15-gfa.jar:2.3.15-gfa]
at org.glassfish.grizzly.AbstractSocketConnectorHandler.connect(AbstractSocketConnectorHandler.java:79) ~[grizzly-framework-2.3.15-gfa.jar:2.3.15-gfa]
at org.glassfish.tyrus.container.grizzly.client.GrizzlyClientSocket._connect(GrizzlyClientSocket.java:386) ~[tyrus-container-grizzly-client-1.11.jar:?]
... 41 more
该NPE从行来if (runners.length == 1) {
在灰熊的项目文件RoundRobinConnectionDistributor.java:146
private final class SharedIterator implements Iterator {
private final AtomicInteger counter = new AtomicInteger();
@Override
public SelectorRunner next() {
final SelectorRunner[] runners = getTransportSelectorRunners();
if (runners.length == 1) {
return runners[0];
}
return runners[(counter.getAndIncrement() & 0x7fffffff) % runners.length];
}
@Override
public SelectorRunner nextService() {
return next();
}
}
看起来像runners
是null
。