HAJNDI not handling failover
warmachine Jul 31, 2009 2:23 PMI have two JBoss 4.2.3GA nodes in a cluster with a Tomcat 5 application calling SLSBs on them. Standard stuff. If either node is down, the client can find the other when it first needs a service. If both are up, the client finds the first one to use a service, then the first node is shut down, the client fails with a CannotConnectException despite the second node still being available.
I can reproduce the problem on my local PC and logs like the following show the nodes recognise the other cluster member as it's started and shutdown.
18:45:30,405 INFO [UefaPartition] New cluster view for partition UefaPartition (id: 3, delta: 1) : [127.0.0.1:1299, 127.0.0.1:1099] 18:45:30,405 INFO [UefaPartition] I am (127.0.0.1:1299) received membershipChanged event: 18:45:30,405 INFO [UefaPartition] Dead members: 0 ([]) 18:45:30,405 INFO [UefaPartition] New Members : 1 ([127.0.0.1:1099]) 18:45:30,405 INFO [UefaPartition] All Members : 2 ([127.0.0.1:1299, 127.0.0.1:1099]) 18:48:40,850 INFO [UefaPartition] New cluster view for partition UefaPartition (id: 4, delta: -1) : [127.0.0.1:1299] 18:48:40,850 INFO [UefaPartition] I am (127.0.0.1:1299) received membershipChanged event: 18:48:40,850 INFO [UefaPartition] Dead members: 1 ([127.0.0.1:1099]) 18:48:40,850 INFO [UefaPartition] New Members : 0 ([]) 18:48:40,850 INFO [UefaPartition] All Members : 1 ([127.0.0.1:1299])
The client fails with the following.
Caused by: org.jboss.remoting.CannotConnectException: Can not get connection to server. Problem establishing socket connection for InvokerLocator [socket://127.0.0.1:4446/?dataType=invocation&enableTcpNoDelay=true&marshaller=org.jboss.invocation.unified.marshall.InvocationMarshaller&socketTimeout=600000&unmarshaller=org.jboss.invocation.unified.marshall.InvocationUnMarshaller] at org.jboss.remoting.transport.socket.MicroSocketClientInvoker.transport(MicroSocketClientInvoker.java:579) at org.jboss.remoting.MicroRemoteClientInvoker.invoke(MicroRemoteClientInvoker.java:122) at org.jboss.remoting.Client.invoke(Client.java:1634) at org.jboss.remoting.Client.invoke(Client.java:548) at org.jboss.invocation.unified.interfaces.UnifiedInvokerProxy.invoke(UnifiedInvokerProxy.java:184) at org.jboss.invocation.InvokerInterceptor.invokeInvoker(InvokerInterceptor.java:365) at org.jboss.invocation.InvokerInterceptor.invoke(InvokerInterceptor.java:197) at org.jboss.proxy.TransactionInterceptor.invoke(TransactionInterceptor.java:61) at org.jboss.proxy.SecurityInterceptor.invoke(SecurityInterceptor.java:70) at org.jboss.proxy.ejb.StatelessSessionInterceptor.invoke(StatelessSessionInterceptor.java:112) at org.jboss.proxy.ClientContainer.invoke(ClientContainer.java:100) at $Proxy14.getStatusSuccessFail(Unknown Source)
This doesn't make sense as the client proxy should know there is another member of the cluster and try that. What am I missing?