Я работаю над более старым приложением и модернизирую его систему JMS с JBoss Messaging на HornetQ. В процессе я столкнулся с несколькими ошибками, которые, похоже, связаны с тем, как это приложение использует и управляет соединениями JMS. Это мое первое крупномасштабное знакомство с JMS (помимо простого использования игрушек), поэтому мне интересно, является ли текущая идиома ... правильной, глупой или совершенно неправильной?
Вот как работает текущая система.
static QueueConnection connection;
static boolean isConnected;
static void sendSomeMessage(Object sendMe) {
if(!isConnected) connect();
}
static void connect() {
// jndi lookup for connection factory
connection = factory.createQueueConnection();
// lambdas in java pseudo code, woot!
connection.onException => disconnect();
connection.start();
isConnected = true;
}
static void disconnect() {
connection.close()
isConnected = false;
}
Суть этого заключается в том, что соединение используется снова и снова для каждого отдельного сообщения, которое отправляется до тех пор, пока не произойдет ошибка, и при возникновении ошибки соединение, наконец, закрывается и воссоздается.
Каждый пример, который я видел, всегда создает новую фабрику соединений и новое соединение для каждого сообщения, но эти примеры не являются крупными системными примерами, они являются примерами с практическими рекомендациями.
Является ли сохранение одной управляемой ссылки на JMS-соединение приемлемой идиомой, следует ли кэшировать фабрику соединений? Должны ли они быть воссозданы для каждого нового сообщения?
Имеет ли смысл повторно использовать фабрику соединений, но каждый раз использовать новое соединение?