2011-02-09 11 views
4

JMS APIは、TransactedとXA Transactedをどのようにモデル化しているかに関して一貫性がありませんか? XAのようにするConnectionFactory、QueueConnectionFactoryと、セッションとのフォームとそんなに重複がありますなぜ私は完全にはいけないトランザクション非xa JMSセッションのポイントとは何ですか?

は感謝:たとえば

XAQueueConnection 

    XAQueueSession 
    createXAQueueSession() throws JMSException; 

    QueueSession 
    createQueueSession(boolean transacted, 
         int acknowledgeMode) throws JMSException; 

は非トランザクション処理とトランザクションセッションのためのメソッドが含まれていますか?

  • なぜ両方ですか?
  • XAQCを持っている場合、なぜ非トランザクションQSが必要なのですか?
  • なぜ私はXAQueueConnectionを作成したいのですか?

答えて

4

これらは、サービスクラスのグラディエントを提供します。 JMSは、単相の内部作業

  • メッセージのユニットの外部...

    • メッセージを可能にする(1個)の二相コミットの内部
    • メッセージは、(2PC/XA)をコミット

    これらのそれぞれのコストは、信頼性の程度とともに増加します。一般に、アプリケーションが必要とする最小コストの方法を使用したいとします。非永続的で期限切れのファイアアンドフォールトのメッセージ(例えば、株式ティッカーイベント)があれば、それを作業単位の中に置くことは無駄です。同様に、トランザクションセッションが必要だがJMSが唯一のリソースマネージャである場合、XAは無駄になります。

    一方、一部の操作でXAが必要な場合は、すべての操作でXAを使用する必要はありません。たとえば、XAトランザクション用に1つのセッションを、XA以外のメッセージング用に1つのセッションを維持する1つの接続を持つことができます。最初のものは、長時間実行されるプロセスの要求を受け取り、プロセスの詳細を使用してデータベースを更新することです。他のセッションは、定期的なステータス更新を送信するために使用されます。接続はXAConnectionでなければなりませんが、パフォーマンスのためにはXAセッションとXA以外のセッションの両方が必要です。別の接続を維持することもできますが、この方法では、単一の接続内でXAメッセージと非XAメッセージの両方を実行できます。多くの接続を持つブローカーにとっては、この最適化は重要なことです。

    確かにこれはあまり一般的ではありませんが、依然として有効なケースであり、仕様に含まれるのに十分です。

  • 関連する問題