Search in sources :

Example 31 with XASession

use of javax.jms.XASession in project narayana by jbosstm.

the class ConnectionProxy method createAndRegisterSession.

/**
 * Create a proxied XA session and enlist its XA resource to the transaction.
 * <p>
 * If session's XA resource cannot be enlisted to the transaction, session is closed.
 *
 * @return XA session wrapped with {@link SessionProxy}.
 * @throws JMSException if failure occurred creating XA session or registering its XA resource.
 */
private Session createAndRegisterSession() throws JMSException {
    XASession xaSession = xaConnection.createXASession();
    Session session = new SessionProxy(xaSession, transactionHelper);
    try {
        transactionHelper.registerXAResource(xaSession.getXAResource());
    } catch (JMSException e) {
        xaSession.close();
        throw e;
    }
    if (jtaLogger.logger.isTraceEnabled()) {
        jtaLogger.logger.trace("Created new proxied session: " + session);
    }
    return session;
}
Also used : XASession(javax.jms.XASession) JMSException(javax.jms.JMSException) XASession(javax.jms.XASession) Session(javax.jms.Session)

Example 32 with XASession

use of javax.jms.XASession in project quickstart by wildfly.

the class XAService method notifyUpdate.

private void notifyUpdate(Queue queue, String msg) throws Exception {
    XAConnection connection = null;
    try {
        connection = xaConnectionFactory.createXAConnection();
        XASession session = connection.createXASession();
        MessageProducer messageProducer = session.createProducer(queue);
        connection.start();
        TextMessage message = session.createTextMessage();
        message.setText(msg);
        messageProducer.send(message);
        messageProducer.close();
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (JMSException e) {
                LOGGER.info("Error closing JMS connection: " + e.getMessage());
            }
        }
    }
}
Also used : XASession(javax.jms.XASession) JMSException(javax.jms.JMSException) MessageProducer(javax.jms.MessageProducer) TextMessage(javax.jms.TextMessage) XAConnection(javax.jms.XAConnection)

Example 33 with XASession

use of javax.jms.XASession in project activemq-artemis by apache.

the class ActiveMQXAConnectionFactoryTest method testIsSameRM.

public void testIsSameRM() throws URISyntaxException, JMSException, XAException {
    XAConnection connection1 = null;
    XAConnection connection2 = null;
    try {
        ActiveMQXAConnectionFactory cf1 = new ActiveMQXAConnectionFactory("vm://localhost?broker.persistent=false");
        connection1 = (XAConnection) cf1.createConnection();
        XASession session1 = connection1.createXASession();
        XAResource resource1 = session1.getXAResource();
        ActiveMQXAConnectionFactory cf2 = new ActiveMQXAConnectionFactory("vm://localhost?broker.persistent=false");
        connection2 = (XAConnection) cf2.createConnection();
        XASession session2 = connection2.createXASession();
        XAResource resource2 = session2.getXAResource();
        assertTrue(resource1.isSameRM(resource2));
        session1.close();
        session2.close();
    } finally {
        if (connection1 != null) {
            try {
                connection1.close();
            } catch (Exception e) {
            // ignore
            }
        }
        if (connection2 != null) {
            try {
                connection2.close();
            } catch (Exception e) {
            // ignore
            }
        }
    }
}
Also used : XAResource(javax.transaction.xa.XAResource) XASession(javax.jms.XASession) URISyntaxException(java.net.URISyntaxException) IOException(java.io.IOException) JMSException(javax.jms.JMSException) XAException(javax.transaction.xa.XAException) XAConnection(javax.jms.XAConnection)

Example 34 with XASession

use of javax.jms.XASession in project activemq-artemis by apache.

the class ActiveMQXAConnectionFactoryTest method testRollbackXaErrorCode.

public void testRollbackXaErrorCode() throws Exception {
    String brokerName = "rollbackErrorCode";
    BrokerService broker = BrokerFactory.createBroker(new URI("broker:(tcp://localhost:0)/" + brokerName));
    broker.start();
    broker.waitUntilStarted();
    ActiveMQXAConnectionFactory cf = new ActiveMQXAConnectionFactory(broker.getTransportConnectors().get(0).getConnectUri());
    XAConnection connection = (XAConnection) cf.createConnection();
    connection.start();
    XASession session = connection.createXASession();
    XAResource resource = session.getXAResource();
    Xid tid = createXid();
    try {
        resource.rollback(tid);
        fail("Expected xa exception on no tx");
    } catch (XAException expected) {
        LOG.info("got expected xa", expected);
        assertEquals("no tx", XAException.XAER_NOTA, expected.errorCode);
    }
    connection.close();
    broker.stop();
}
Also used : XAResource(javax.transaction.xa.XAResource) Xid(javax.transaction.xa.Xid) XAException(javax.transaction.xa.XAException) XASession(javax.jms.XASession) BrokerService(org.apache.activemq.broker.BrokerService) URI(java.net.URI) XAConnection(javax.jms.XAConnection)

Example 35 with XASession

use of javax.jms.XASession in project activemq-artemis by apache.

the class ActiveMQXAConnectionFactoryTest method testConsumerCloseTransactionalSendReceive.

public void testConsumerCloseTransactionalSendReceive() throws Exception {
    ActiveMQXAConnectionFactory cf1 = new ActiveMQXAConnectionFactory("vm://localhost?broker.persistent=false");
    XAConnection connection1 = (XAConnection) cf1.createConnection();
    connection1.start();
    XASession session = connection1.createXASession();
    XAResource resource = session.getXAResource();
    Destination dest = new ActiveMQQueue(getName());
    // publish a message
    Xid tid = createXid();
    resource.start(tid, XAResource.TMNOFLAGS);
    MessageProducer producer = session.createProducer(dest);
    ActiveMQTextMessage message = new ActiveMQTextMessage();
    message.setText(getName());
    producer.send(message);
    producer.close();
    resource.end(tid, XAResource.TMSUCCESS);
    resource.commit(tid, true);
    session.close();
    session = connection1.createXASession();
    MessageConsumer consumer = session.createConsumer(dest);
    tid = createXid();
    resource = session.getXAResource();
    resource.start(tid, XAResource.TMNOFLAGS);
    TextMessage receivedMessage = (TextMessage) consumer.receive(1000);
    consumer.close();
    assertNotNull(receivedMessage);
    assertEquals(getName(), receivedMessage.getText());
    resource.end(tid, XAResource.TMSUCCESS);
    resource.commit(tid, true);
    session = connection1.createXASession();
    consumer = session.createConsumer(dest);
    tid = createXid();
    resource = session.getXAResource();
    resource.start(tid, XAResource.TMNOFLAGS);
    assertNull(consumer.receive(1000));
    resource.end(tid, XAResource.TMSUCCESS);
    resource.commit(tid, true);
}
Also used : Destination(javax.jms.Destination) XAResource(javax.transaction.xa.XAResource) Xid(javax.transaction.xa.Xid) MessageConsumer(javax.jms.MessageConsumer) XASession(javax.jms.XASession) ActiveMQQueue(org.apache.activemq.command.ActiveMQQueue) MessageProducer(javax.jms.MessageProducer) ActiveMQTextMessage(org.apache.activemq.command.ActiveMQTextMessage) TextMessage(javax.jms.TextMessage) XAConnection(javax.jms.XAConnection) ActiveMQTextMessage(org.apache.activemq.command.ActiveMQTextMessage)

Aggregations

XASession (javax.jms.XASession)58 XAConnection (javax.jms.XAConnection)51 MessageProducer (javax.jms.MessageProducer)41 Test (org.junit.Test)41 MessageConsumer (javax.jms.MessageConsumer)36 Session (javax.jms.Session)35 TextMessage (javax.jms.TextMessage)35 XAResource (javax.transaction.xa.XAResource)34 Connection (javax.jms.Connection)26 Transaction (javax.transaction.Transaction)24 Message (javax.jms.Message)19 Xid (javax.transaction.xa.Xid)19 Queue (javax.jms.Queue)14 ActiveMQQueue (org.apache.activemq.command.ActiveMQQueue)12 XAException (javax.transaction.xa.XAException)11 TemporaryQueue (javax.jms.TemporaryQueue)8 JMSException (javax.jms.JMSException)7 XidImpl (org.apache.activemq.artemis.core.transaction.impl.XidImpl)6 QueueSession (javax.jms.QueueSession)5 TopicSession (javax.jms.TopicSession)5