私は分散トランザクションの必要性から JTA の世界に足を踏み入れていますが、両者の違いjavax.jms.ConnectionFactory
やjavax.jms.XAConnectionFactory
、より正確に言えば、私javax.jms.ConnectionFactory
にしかできないと期待していたことがどのように実行されるのかがわかりjavax.jms.XAConnectionFactory
ません。
詳細: Atomikos Essentials をトランザクション マネージャーとして使用しており、アプリは Apache Tomcat 6 で実行されています。
OpenMQ
JMS プロバイダー ( ) をリソースとして登録したダミー アプリを使用して小さな 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 で問題なく動作します。Commit
Rollback
私が理解していないのはjavax.jms.XAConnectionFactory.createConnection()
、メソッドを使用していて、Session
どのジョブが機能するかということです。javax.jms.XAConnectionFactory
役割は?
javax.jms.BasicConnectionFactory
また、両方のクラス (および) のソース コードを調べ、XA クラスが をオーバーライドしないことを確認したことも付け加えておきますcreateConnection
。