InvokerLocator socket problem with 4.2.1.GA ?
ahaumer Oct 24, 2007 2:43 PMWhen testing an EJB3 SLSB from a remote client I found that jboss started with option "-b 0.0.0.0" (on Linux) binds all sockets to all network interfaces, except for the socket at port 3873!
JBOSS seems to bind this port to the IP address listed for the hostname of the server, only. On my development notebook this was 127.0.0.1 at that time, which gave me the following interesting exception on the client:
org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.0.1:3873/]
at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:530)
at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
at org.jboss.remoting.Client.invoke(Client.java:1550)
at org.jboss.remoting.Client.invoke(Client.java:530)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:103)
at $Proxy0.divide(Unknown Source)
at at.co.xss.test.client.TestClient.runTest(TestClient.java:25)
at at.co.xss.test.client.TestClient.main(TestClient.java:32)
Caused by: java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
at java.net.Socket.connect(Socket.java:519)
at org.jboss.remoting.transport.socket.SocketClientInvoker.createSocket(SocketClientInvoker.java:187)
at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.getConnection(MicroSocketClientInvoker.java:801)
at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:526)
at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122)
at org.jboss.remoting.Client.invoke(Client.java:1550)
at org.jboss.remoting.Client.invoke(Client.java:530)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:62)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.tx.ClientTxPropagationInterceptor.invoke(ClientTxPropagationInterceptor.java:61)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.aspects.security.SecurityClientInterceptor.invoke(SecurityClientInterceptor.java:53)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.remoting.IsLocalInterceptor.invoke(IsLocalInterceptor.java:72)
at org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.java:101)
at org.jboss.ejb3.stateless.StatelessRemoteProxy.invoke(StatelessRemoteProxy.java:103)
at $Proxy0.divide(Unknown Source)
at at.co.xss.test.client.TestClient.runTest(TestClient.java:25)
at at.co.xss.test.client.TestClient.main(TestClient.java:32)
at org.jboss.aspects.remoting.InvokeRemoteInterceptor.invoke(InvokeRemoteInterceptor.java:74)
... 11 more
When I changed the entry in /etc/hosts on my notebook to map the IP address of the ethernet port to the machines hostname and restarted JBOSS, I could connect from the remote client side without problem.
On the server, netstat now shows the following bound ports:
tcp 0 0 192.168.162.96:3873 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:8009 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:1098 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:1099 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:32816 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:32817 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:32819 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:8083 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:4444 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:8093 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:4445 0.0.0.0:* LISTEN 1766/java tcp 0 0 0.0.0.0:4446 0.0.0.0:* LISTEN 1766/java
192.168.162.96 is the IP address listed in /etc/hosts for the hostname of
the notebook and it happens to be the current IP address of the ethernet interface (which is not always the case!)
But why does JBOSS bind port 3873 to this IP address only and not to 0.0.0.0 like it does for all other ports?
I explicitely used option "-b 0.0.0.0" to have JBOSS listen on all network interfaces on this machine.
Is this a bug or do I miss something here?