私は古いアプリケーションに取り組んでおり、その 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;
}
これの要点は、エラーが発生するまで、送信されるすべてのメッセージに対して接続が何度も使用され、エラーが発生すると、接続が最終的に閉じられて再作成されることです。
私が見たすべての例は、すべてのメッセージに対して常に新しい接続ファクトリと新しい接続を作成しますが、これらの例は大きなシステムの例ではなく、「ハウツー」の例の 1 つです。
接続ファクトリをキャッシュする必要がある場合、JMS 接続への単一の管理された参照を維持することは受け入れられるイディオムですか? 新しいメッセージごとに両方を再作成する必要がありますか?
接続ファクトリを再利用するのは理にかなっていますが、毎回新しい接続を使用しますか?