私は、P2P メカニズムを使用して同期的にメッセージを送受信するためにプレーンな JMS API を使用しているスタンドアロンのマルチスレッド アプリケーションに取り組んでいます。複数のスレッドが実行されている場合、コンシューマー オブジェクト (スレッドごとに 1 つのコンシューマー オブジェクト) を使用してデータを受信しているときに、IllegalStateException: セッションが閉じられているという例外がスローされます。以下の2つの方法で試しました。
1) シングルトン クラスで接続オブジェクトとセッション オブジェクトを作成し、メッセージの送受信中にそれらのオブジェクトを使用する。メッセージを送受信するコードを同期しました。
2)5つのセッションを作成するSessionPoolクラス(シングルトン)を作成しました。私のアプリケーションはスレッドプール数が20に制限されており、各スレッドはセッションプールからセッションを取得し、メッセージが受信されるとセッションを返します。これは 5 つのスレッドで正常に機能し、後でセッションが閉じられたことを示す例外がスローされました。
1 つのスレッドごとに 1 つのセッションを作成せずにセッション オブジェクトを効果的に使用する方法について教えてください。