2013-12-13 14 views

答えて

5

JMSセッションオブジェクトは、通常、トランザクションに使用されます。また、トランザクションはスレッド固有であり、スレッド間にまたがることはできません。したがって、トランザクションされたJMSセッションはスレッド間で使用できません。この理由から、JMS仕様では、セッションはスレッドセーフではないと言います。

+1

興味深い説明+1 –

5

JMS 2.0仕様

25ページ

セッションへの同時アクセスを制限するための2つの理由があります。

最初に、セッションはトランザクションをサポートするJMSエンティティです。 マルチスレッドのトランザクションを実装することは非常に困難です。

第2に、セッションは非同期メッセージ消費をサポートします。 JMSは、非同期のメッセージの消費に使用されるクライアントコードが複数のメッセージを同時に処理できることをJMSが要求していないことが重要です。 メッセージ。また

セッションが複数、 非同期コンシューマで設定されている場合、クライアントがこれらの別々の消費者が同時に 実行している場合を扱うために を余儀なくされていないことが重要です。これらの制限により、標準の クライアントではJMSを使いやすくしています。より洗練されたクライアントは、複数のセッションを使用してそれらの同時性を得ることができます。 従来のAPIと ドメイン固有のAPIでは、これは複数のセッションオブジェクトを使用することを意味します。 簡略化したAPIでは、複数のJMSContextオブジェクトを使用することを意味します。