Unterschiede zwischen javax.jms.ConnectionFactory und javax.jms.XAConnectionFactory

Ich bin in der Welt der JTA, aufgrund der Notwendigkeit, verteilte Transaktionen, und ich bin unsicher über die Unterschiede zwischen javax.jms.ConnectionFactory und javax.jms.XAConnectionFactory oder, genauer gesagt, wie kann es sein, dass javax.jms.ConnectionFactory durchgeführt, was ich erwartet habe nur javax.jms.XAConnectionFactory für mich tun kann.

Den details: ich bin mit Atomikos essentials als mein transaction manager und meine app läuft auf Apache Tomcat 6.

Bin ich mit einem kleinen POC mit einer dummy-app, wo ich meine JMS-provider (OpenMQ) registriert als ein JNDI Ressource.

<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"/>

Und das seltsame Problem, dass in meinem code mache ich das:

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);

Später in den code, den ich verwenden Sie diese Sitzung in eine UserTransaction und es funktioniert einwandfrei mit zwei MessageProducers mit entweder Commit oder Rollback.

Was ich nicht verstehe ist, wie kann es sein, dass ich mit javax.jms.XAConnectionFactory.createConnection() - Methode und ich bekomme ein Session die nicht den job? Was javax.jms.XAConnectionFactory Rolle?

Werde ich auch hinzufügen, dass ich geschaut habe, auf den Quellcode der beiden Klassen (und javax.jms.BasicConnectionFactory) und ich habe überprüft, dass die XA-Klasse nicht überschrieben createConnection.

InformationsquelleAutor Ittai | 2010-11-07

Schreibe einen Kommentar