We have a problem with one of our clients failing to call the cluster after the cluster has been bounced (all nodes have been stopped and restarted).
Here's our setup:
4 JBoss 3.2.6 nodes in a cluster with a number of client applications accessing the cluster via RMI.
When we upgrade our application, we shut down one node at a time, replace the .ear, and restart the node. When the node is started we go on with the next one and so on.
This works fine in most cases - clients calling the cluster will not notice the upgrade at all. But for one of our client apps it can fail. Let's call it the Frotz client. The problem is that sometimes the Frotz client doesn't call the cluster for a long time (in extreme cases it might take days between calls). And cluster view updates only get piggy-backed out to clients when they call the cluster. So, if the whole cluster has been bounced since the last time Frotz called it will not have seen the cluster view updates and the call will fail (with service unavailable).
Is there a way to 'push out' cluster view updates to inactive clients? Or possibly make the rmi client lib fall back to a jndi lookup when all else fails?
One solution for this would be to manually always do a jndi lookup for every call from the Frotz client - but this is something we would really want to avoid, since Frotz does quite a few calls when it's calling.
Another solution might be to rely on hot deploy, but we
don't feel 100% certain hot deploy always works.
What other options do we have? We need seamless upgrades with zero downtime to work even if the clients don't call the cluster during the upgrade.
Thanks in advance,