私は分散トランザクションの必要性から JTA の世界に足を踏み入れていますが、両者の違いjavax.jms.ConnectionFactoryやjavax.jms.XAConnectionFactory、より正確に言えば、私javax.jms.ConnectionFactoryにしかできないと期待していたことがどのように実行されるのかがわかりjavax.jms.XAConnectionFactoryません。
詳細: Atomikos Essentials をトランザクション マネージャーとして使用しており、アプリは Apache Tomcat 6 で実行されています。
OpenMQJMS プロバイダー ( ) をリソースとして登録したダミー アプリを使用して小さな POC を実行していますJNDI。
<Resource name="jms/myConnectionFactory" auth="Container"
type="com.atomikos.jms.AtomikosConnectionFactoryBean"
factory="com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory"
uniqueResourceName="jms/myConnectionFactory"
xaConnectionFactoryClassName="com.sun.messaging.XAConnectionFactory"
maxPoolSize="3"/>
そして奇妙な問題は、私のコードでこれを行うことです:
Context ctx = new InitialContext();
ConnectionFactory queueConnectionFactory =
(ConnectionFactory)ctx.lookup("java:comp/env/jms/myQueueFactory");
javax.jms.Connection connection = queueConnectionFactory.createConnection();
Session session = connection.createSession(true, Session.AUTO_ACKNOWLEDGE);
コードの後半で、このセッションを a で使用すると、 または のいずれかを使用UserTransactionして 2 つMessageProducerの s で問題なく動作します。CommitRollback
私が理解していないのはjavax.jms.XAConnectionFactory.createConnection()、メソッドを使用していて、Sessionどのジョブが機能するかということです。javax.jms.XAConnectionFactory役割は?
javax.jms.BasicConnectionFactoryまた、両方のクラス (および) のソース コードを調べ、XA クラスが をオーバーライドしないことを確認したことも付け加えておきますcreateConnection。