Tenho a seguinte situação. Estou utilizando JMS com JBoss.
Tenho uma aplicação que ira consumir uma fila de mensagens que está em um JBoss.
Então tenho esse código abaixo, parte da classe que faz a conexão com a maquina que contém a fila.
Porém, existem 2 máquinas, o Host A e o Host B, no caso o A seria o principal, o B só entra em ação se a conexão com o A estiver morta.
O que fiz foi testar a conexão com o A e se não estiver operacional, me conecto ao B. Beleza, funciona quando eu starto a aplicação.
Mas, se no por exemplo o eu startar a aplicação e o A estiver operacional, a aplicação se conecta a ele, porém se ele fica não-operacional depois de um tempo, eu deveria tentar me conectar ao B, porém não consigo fazer isso.
Alguém tem alguma idéia :?:
public void connect() throws NamingException, JMSException {
InitialContext initialContext;
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, "jnp://" + hostA + ":" + portA); //HOST:PORT JBOSS
initialContext = new InitialContext(properties);
QueueConnectionFactory queueConnectionFactory = null;
try
{ //testa a conexao com o Host A, se falhar, cai na excecao e conecta ao Host B
queueConnectionFactory = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory");
}
catch(NamingException e)
{
e.printStackTrace();
System.out.println("Sem Conexão com Host: "+ hostA + ":" + portA);
try
{
properties.put(Context.PROVIDER_URL, "jnp://" + hostB + ":" + portB); //HOST:PORT JBOSS
initialContext = new InitialContext(properties);
queueConnectionFactory = (QueueConnectionFactory) initialContext.lookup("ConnectionFactory");
}
catch(NamingException f)
{
f.printStackTrace();
System.out.println("Sem Conexão com Host: "+ hostB + ":" + portB );
}
}
queueConnection = queueConnectionFactory.createQueueConnection();
queue = (Queue) initialContext.lookup(destinationJndi); //Nome da fila
queueSession = queueConnection.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE);
QueueReceiver queueReceiver = queueSession.createReceiver(queue);
queueReceiver.setMessageListener(this);
queueConnection.start();
}