We have one JbossAS(a cluster with 3 nodes which jms server is deployed on one of them) running on Solaris 10(named Server-A). There is a client program on a pc(named Client-B) which receives JMS messages from the Jboss on Server-A(through topic).
We have 2 NIC(network interface Card) on Client-B whose ips are 192.166.32.* and 172.30.2.*.
When the Client-B starts, we establish one Jms connection with the jboss on Server-A. In most of time, all the client and the server side works fine(the client can receive messages from the server and no messages were blocked on topic). but in recent days we found that the Client-B could not receive messages from Server-A(the jboss on Server-A works fine all the time) occasionally. In some time, a large numbers of messages on the topic which the client received messages from were blocked. We also found that the ConnectionEndPoint could not be released by the jboss on Server-A because we found the ConnectionEndPoint was still there after we terminate the client program. We observed this by the following(using jboss web-console, using ServerPeer.showActiveClientsAsHTML()):
ID Host User #Sessions ConnectionEndpoint[wk-adbbg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 16 ConnectionEndpoint[6n-3b6dg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 0 ConnectionEndpoint[do-n48dg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 16 ConnectionEndpoint[9n-hd6dg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 2 ConnectionEndpoint[tk-xfabg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 0 ConnectionEndpoint[tn-6o6dg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 2 ConnectionEndpoint[w-6hune0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 0 ConnectionEndpoint[1m-rpzcg0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 16 ConnectionEndpoint[k-oprne0lf-1-6wome0lf-2nqd0q-g2us4] 172.30.2.16 null 2
Just one day ago, we found the connection called onException() (we registered a listener by using connection.setExceptionListener() ) almost every 20 seconds. giving the following stack trace:
javax.jms.JMSException: Failure on underlying remoting connection at org.jboss.jms.client.remoting.ConsolidatedRemotingConnectionListener.handleConnectionException(ConsolidatedRemotingConnectionListener.java:102) at org.jboss.remoting.ConnectionValidator$1.run(ConnectionValidator.java:561)
How this happened? Could anyone knows what had happened with jms connection?
Normally when we close a jms client program the corresponding ConnectioinEndPoint will be closed by the jboss too after a certain seconds. But we didn't see this happened. the ConnectionEndPoint is still there. As we closed the client more times, there are more and more ConnectionEndPoints unclosed by the jboss.
We don't know how this happened and we doubted that the 2 NIC caused aforementioned problem. But how to solve the problem without pulling out one of the NIC?
Some other information may be useful to solve this problem.
1. from the server's point of view, the client ip 172.30.2.* is unreachable through ping command. and the client ip 192.166.32.* is reachable through ping command.
2. we get the ip 172.30.2.*(which is unreachable from server side) when using InetAddress.getLocalHost().getHostAddress() on the client side.
3. In most time the connection between the client and the server works fine.