Search in sources :

Example 81 with Xid

use of javax.transaction.xa.Xid in project spanner-jdbc by olavloite.

the class CloudSpannerXAConnectionTest method testCommitTwoPhase.

@Test
public void testCommitTwoPhase() throws SQLException, XAException {
    CloudSpannerXAConnection subject = createSubject();
    Xid xid = createXid();
    subject.start(xid, XAResource.TMNOFLAGS);
    subject.end(xid, XAResource.TMSUCCESS);
    subject.prepare(xid);
    subject.commit(xid, false);
}
Also used : Xid(javax.transaction.xa.Xid) Test(org.junit.Test) UnitTest(nl.topicus.jdbc.test.category.UnitTest)

Example 82 with Xid

use of javax.transaction.xa.Xid in project wso2-axis2-transports by wso2.

the class JMSOutTransportInfo method createJMSSender.

/**
 * Create a one time MessageProducer for this JMS OutTransport information.
 * For simplicity and best compatibility, this method uses only JMS 1.0.2b API.
 * Please be cautious when making any changes
 *
 * @return a JMSSender based on one-time use resources
 * @throws JMSException on errors, to be handled and logged by the caller
 */
public JMSMessageSender createJMSSender(MessageContext msgCtx) throws JMSException {
    // digest the targetAddress and locate CF from the EPR
    loadConnectionFactoryFromProperties();
    // create a one time connection and session to be used
    String user = properties != null ? properties.get(JMSConstants.PARAM_JMS_USERNAME) : null;
    String pass = properties != null ? properties.get(JMSConstants.PARAM_JMS_PASSWORD) : null;
    QueueConnectionFactory qConFac = null;
    TopicConnectionFactory tConFac = null;
    int destType = -1;
    // TODO: there is something missing here for destination type generic
    if (JMSConstants.DESTINATION_TYPE_QUEUE.equals(destinationType)) {
        destType = JMSConstants.QUEUE;
        qConFac = (QueueConnectionFactory) connectionFactory;
    } else if (JMSConstants.DESTINATION_TYPE_TOPIC.equals(destinationType)) {
        destType = JMSConstants.TOPIC;
        tConFac = (TopicConnectionFactory) connectionFactory;
    } else {
        // treat jmsdestination type=queue(default is queue)
        destType = JMSConstants.QUEUE;
        qConFac = (QueueConnectionFactory) connectionFactory;
    }
    if (msgCtx.getProperty(JMSConstants.JMS_XA_TRANSACTION_MANAGER) != null) {
        XAConnection connection = null;
        if (user != null && pass != null) {
            if (qConFac != null) {
                connection = ((XAConnectionFactory) qConFac).createXAConnection(user, pass);
            } else if (tConFac != null) {
                connection = ((XAConnectionFactory) tConFac).createXAConnection(user, pass);
            }
        } else {
            if (qConFac != null) {
                connection = ((XAConnectionFactory) qConFac).createXAConnection();
            } else if (tConFac != null) {
                connection = ((XAConnectionFactory) tConFac).createXAConnection();
            }
        }
        if (connection == null) {
            connection = ((XAConnectionFactory) qConFac).createXAConnection();
        }
        XASession session = null;
        MessageProducer producer = null;
        if (connection != null) {
            if (destType == JMSConstants.QUEUE) {
                session = connection.createXASession();
                producer = session.createProducer(destination);
            } else {
                session = connection.createXASession();
                producer = session.createProducer(destination);
            }
        }
        XAResource xaResource = session.getXAResource();
        TransactionManager tx = null;
        Xid xid1 = null;
        Transaction transaction = null;
        java.util.UUID uuid = java.util.UUID.randomUUID();
        try {
            tx = (TransactionManager) msgCtx.getProperty(JMSConstants.JMS_XA_TRANSACTION_MANAGER);
            transaction = tx.getTransaction();
            msgCtx.setProperty(JMSConstants.JMS_XA_TRANSACTION_MANAGER, tx);
            msgCtx.setProperty(JMSConstants.JMS_XA_TRANSACTION, transaction);
            xid1 = new JMSXid(JMSConstants.JMS_XA_TRANSACTION_PREFIX.getBytes(StandardCharsets.UTF_8), 1, uuid.toString().getBytes());
            msgCtx.setProperty("XID", xid1);
            xaResource.start(xid1, XAResource.TMNOFLAGS);
        } catch (SystemException e) {
            handleException("Error Occurred during starting getting Transaction.", e);
        } catch (XAException e) {
            handleException("Error Occurred during starting XA resource.", e);
        }
        return new JMSMessageSender(connection, session, producer, destination, jmsConnectionFactory == null ? this.cacheLevel : jmsConnectionFactory.getCacheLevel(), jmsSpecVersion, destType == -1 ? null : destType == JMSConstants.QUEUE ? Boolean.TRUE : Boolean.FALSE, transaction, xid1, xaResource);
    } else {
        Connection connection = null;
        if (user != null && pass != null) {
            if (qConFac != null) {
                connection = qConFac.createQueueConnection(user, pass);
            } else if (tConFac != null) {
                connection = tConFac.createTopicConnection(user, pass);
            }
        } else {
            if (qConFac != null) {
                connection = qConFac.createQueueConnection();
            } else if (tConFac != null) {
                connection = tConFac.createTopicConnection();
            }
        }
        if (connection == null) {
            connection = jmsConnectionFactory != null ? jmsConnectionFactory.getConnection() : null;
        }
        Session session = null;
        MessageProducer producer = null;
        if (connection != null) {
            if (destType == JMSConstants.QUEUE) {
                session = ((QueueConnection) connection).createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
                producer = ((QueueSession) session).createSender((Queue) destination);
            } else {
                session = ((TopicConnection) connection).createTopicSession(false, Session.AUTO_ACKNOWLEDGE);
                producer = ((TopicSession) session).createPublisher((Topic) destination);
            }
        }
        return new JMSMessageSender(connection, session, producer, destination, jmsConnectionFactory == null ? this.cacheLevel : jmsConnectionFactory.getCacheLevel(), jmsSpecVersion, destType == -1 ? null : destType == JMSConstants.QUEUE ? Boolean.TRUE : Boolean.FALSE);
    }
}
Also used : XAException(javax.transaction.xa.XAException) XAResource(javax.transaction.xa.XAResource) Xid(javax.transaction.xa.Xid) Transaction(javax.transaction.Transaction) java.util(java.util) SystemException(javax.transaction.SystemException) TransactionManager(javax.transaction.TransactionManager) Queue(javax.jms.Queue)

Aggregations

Xid (javax.transaction.xa.Xid)82 Test (org.junit.Test)35 XAException (javax.transaction.xa.XAException)20 IOException (java.io.IOException)16 XAResource (javax.transaction.xa.XAResource)14 UnitTest (nl.topicus.jdbc.test.category.UnitTest)11 XidImpl (org.neo4j.kernel.impl.transaction.XidImpl)11 LinkedList (java.util.LinkedList)10 InOrder (org.mockito.InOrder)6 HashMap (java.util.HashMap)5 RecoveredXid (nl.topicus.jdbc.xa.RecoveredXid)5 RelationshipType (org.neo4j.graphdb.RelationshipType)5 HazelcastXAResource (com.hazelcast.transaction.HazelcastXAResource)4 ArrayList (java.util.ArrayList)4 RollbackException (javax.transaction.RollbackException)4 SystemException (javax.transaction.SystemException)4 TransactionFailureException (org.neo4j.graphdb.TransactionFailureException)4 XaResource (org.neo4j.kernel.impl.transaction.xaframework.XaResource)4 TransactionContext (com.hazelcast.transaction.TransactionContext)3 SerializableXID (com.hazelcast.transaction.impl.xa.SerializableXID)3