We were evaluating jBoss clustering for our product, we have JBoss 4.0.4 GA.
Our setup is something like this:-
1) We have one node, with 2 JBoss servers.
2) Load balancer, that posts the requests to these servers in round robin fashion.
We test different scenarious as below and the results are fine:-
this is in the middle of jBoss processing a long transactions involving lots of sub tasks
1) One of the the JBoss is shutdown properly(normal exit), other jBoss takes over the session and pending transactions seamlessly.
2) One of the the JBoss is crashed shut down (we force crash), and the other jBoss takes over the session and pending transactions seamlessly.
We have a problem under this scenario:-
1) To simulate the Network Issues, we unplug the network cable of one of the JBoss which is in cluster and processing a long transaction and this when the processing is half way through
2) The Other jBoss takes over the transaction and starts processing, but the resources that are accessed by the first server are locked and the second server cannot perform the task.. its a Dead lock situation...
Basically we have a Set of Database updates and deletes in the subtask, and we unplug the network cable for the second JBoss before the transaction is comitted. The second jBoss restarts the transaction but it encounters a timeout and cannot proceed..
My Question is: Even though JBoss shutdown and network cable unplug is done at a similar point of Transaction processing, howcome in the first scenario the second server is able to take over the transaction and why not in the second...
When you cause the the transaction to restart on a second node, that doesn't terminate the original transaction. It either has to commit or time out before any locks it is holding will be released.