Вы должны реализовать в своем клиентском коде javax.jms.ExceptionListener. Вам понадобится метод с именем onException. Когда клиентское соединение потеряно, вы должны получить JMSException, и этот метод будет вызван автоматически. Единственное, на что вам следует обратить внимание - это если вы намеренно отключаетесь от JBossMQ - это также вызывает исключение.
Некоторый код может выглядеть следующим образом:
public void onException (JMSException jsme)
{
if (!closeRequested)
{
this.disconnect();
this.establishConnection(connectionProps, queueName, uname, pword, clientID, messageSelector);
}
else
{
//Client requested close so do not try to reconnect
}
}
В вашем коде "createConnection" вы реализуете конструкцию while(!initialized)
, которая содержит внутри себя попытку / улов. Пока вы не уверены, что подключились и подписались правильно, оставайтесь в цикле while, перехватывая все JMS / Naming / etc. исключения.
Мы годами использовали этот метод с JBossMQ, и он прекрасно работает. У нас никогда не было проблем с тем, чтобы наши клиенты JMS не переподключались после восстановления JBossMQ или потери нашего сетевого подключения.