No código temos o seguinte trecho:
MessageConsumer consumer = session.createDurableSubscriber(topico, "assinatura");
consumer.setMessageListener(new MessageListener() {
@Override
public void onMessage(Message message) {
TextMessage textMessage = (TextMessage)message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
new Scanner(System.in).nextLine();
session.close();
connection.close();
context.close();
}
O new Scanner(System.in).nextLine(); serve para travar a execução do programa e manter a conexão e a seção abertos para que o consumidor fique ouvindo as mensagens que vão chegando correto? em tese os métodos session.close(),connection.close() e context.close(); não serão chamados enquanto o programa estiver executando, então a dúvida é se é necessário este código estar ai? não poderia simplesmente tirar eles daí?
Outra coisa, não sei como é o funcionamento dos MDB, mas estou usando activemq dentro de uma aplicação em um wildfly, e pra não ter que ficar configurando o servidor que eu não tenho acesso, estou utilizando a abordagem do curso, então, é uma boa prática manter a conexão e a sessão abeertos por toda a vida da aplicação? pelo menos no caso dos consumidores?
Uma outra coisa é a linha new Scanner(System.in).nextLine(); isso dá erro quando rodo no wildfly(estou rodando o consumer em uma thread separada), existe alguma outra forma de segurar a execução da aplicação? eu utilizei um Thread.sleep para testar e funcionou, mas isso é inviável na prática