セッションが作成されたConnectionオブジェクトがスレッドセーフ(スレッドごとに共有)されている場合、セッションオブジェクトを同時スレッドで使用できないようにJMS仕様が設計されているのはなぜですか?JMSセッションオブジェクトがスレッドセーフではないのはなぜですか?
5
A
答えて
5
JMSセッションオブジェクトは、通常、トランザクションに使用されます。また、トランザクションはスレッド固有であり、スレッド間にまたがることはできません。したがって、トランザクションされたJMSセッションはスレッド間で使用できません。この理由から、JMS仕様では、セッションはスレッドセーフではないと言います。
5
JMS 2.0仕様
25ページ
セッションへの同時アクセスを制限するための2つの理由があります。
最初に、セッションはトランザクションをサポートするJMSエンティティです。 マルチスレッドのトランザクションを実装することは非常に困難です。
第2に、セッションは非同期メッセージ消費をサポートします。 JMSは、非同期のメッセージの消費に使用されるクライアントコードが複数のメッセージを同時に処理できることをJMSが要求していないことが重要です。 メッセージ。また
セッションが複数、 非同期コンシューマで設定されている場合、クライアントがこれらの別々の消費者が同時に 実行している場合を扱うために を余儀なくされていないことが重要です。これらの制限により、標準の クライアントではJMSを使いやすくしています。より洗練されたクライアントは、複数のセッションを使用してそれらの同時性を得ることができます。 従来のAPIと ドメイン固有のAPIでは、これは複数のセッションオブジェクトを使用することを意味します。 簡略化したAPIでは、複数のJMSContextオブジェクトを使用することを意味します。
興味深い説明+1 –