Skip to content

Examples

Complete Examples

Send and Receive a TextMessage via Queue

Demonstrates sending and receiving a TextMessage using a queue, with JNDI lookup and proper resource cleanup.

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;

public class SwiftMQQueueExample {
    public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        ConnectionFactory cf = (ConnectionFactory) ctx.lookup("myfactory@router1");
        Queue queue = (Queue) ctx.lookup("orders@router1");
        Connection connection = cf.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(queue);
        MessageConsumer consumer = session.createConsumer(queue);
        connection.start();
        try {
            TextMessage msg = session.createTextMessage("Hello, SwiftMQ!");
            producer.send(msg);
            Message received = consumer.receive(5000);
            if (received instanceof TextMessage) {
                System.out.println("Received: " + ((TextMessage) received).getText());
            } else {
                System.out.println("No message received");
            }
        } finally {
            producer.close();
            consumer.close();
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

Publish and Subscribe to a Topic

Shows how to publish a message to a topic and receive it via a topic subscriber. Uses the correct JNDI naming for topics.

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;

public class SwiftMQTopicExample {
    public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        ConnectionFactory cf = (ConnectionFactory) ctx.lookup("myfactory@router1");
        Topic topic = (Topic) ctx.lookup("news");
        Connection connection = cf.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer publisher = session.createProducer(topic);
        MessageConsumer subscriber = session.createConsumer(topic);
        connection.start();
        try {
            TextMessage msg = session.createTextMessage("Breaking News!");
            publisher.send(msg);
            Message received = subscriber.receive(5000);
            if (received instanceof TextMessage) {
                System.out.println("Received: " + ((TextMessage) received).getText());
            } else {
                System.out.println("No message received");
            }
        } finally {
            publisher.close();
            subscriber.close();
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

Request/Reply with Temporary Queue

Implements the request/reply pattern using a temporary queue for replies.

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;

public class SwiftMQRequestReply {
    public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        ConnectionFactory cf = (ConnectionFactory) ctx.lookup("myfactory@router1");
        Queue queue = (Queue) ctx.lookup("service@router1");
        Connection connection = cf.createConnection();
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(queue);
        MessageConsumer serviceConsumer = session.createConsumer(queue);
        connection.start();
        try {
            // Client: send request
            TemporaryQueue replyQueue = session.createTemporaryQueue();
            TextMessage request = session.createTextMessage("What is the time?");
            request.setJMSReplyTo(replyQueue);
            producer.send(request);

            // Service: receive request and reply
            Message reqMsg = serviceConsumer.receive(5000);
            if (reqMsg instanceof TextMessage) {
                Destination replyTo = reqMsg.getJMSReplyTo();
                TextMessage reply = session.createTextMessage("The time is: " + System.currentTimeMillis());
                reply.setJMSCorrelationID(reqMsg.getJMSMessageID());
                session.createProducer(replyTo).send(reply);
            }

            // Client: receive reply
            MessageConsumer replyConsumer = session.createConsumer(replyQueue);
            Message replyMsg = replyConsumer.receive(5000);
            if (replyMsg instanceof TextMessage) {
                System.out.println("Reply: " + ((TextMessage) replyMsg).getText());
            }
            replyConsumer.close();
        } finally {
            producer.close();
            serviceConsumer.close();
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

Transactional Message Send and Receive

Demonstrates sending and receiving messages within a local JMS transaction.

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;

public class SwiftMQTransactionExample {
    public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        ConnectionFactory cf = (ConnectionFactory) ctx.lookup("myfactory@router1");
        Queue queue = (Queue) ctx.lookup("txqueue@router1");
        Connection connection = cf.createConnection();
        Session session = connection.createSession(true, Session.SESSION_TRANSACTED);
        MessageProducer producer = session.createProducer(queue);
        MessageConsumer consumer = session.createConsumer(queue);
        connection.start();
        try {
            TextMessage msg = session.createTextMessage("Transactional Message");
            producer.send(msg);
            session.commit();
            Message received = consumer.receive(5000);
            if (received instanceof TextMessage) {
                System.out.println("Received: " + ((TextMessage) received).getText());
                session.commit();
            }
        } catch (Exception e) {
            session.rollback();
            throw e;
        } finally {
            producer.close();
            consumer.close();
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

XA Transaction Example

Shows how to use XA transactions with SwiftMQ, including starting and committing an XA transaction.

import javax.jms.*;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;

public class SwiftMQXAExample {
    public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        XAConnectionFactory xacf = (XAConnectionFactory) ctx.lookup("myfactory@router1");
        XAConnection xac = xacf.createXAConnection();
        XASession xaSession = xac.createXASession();
        XAResource xaRes = xaSession.getXAResource();
        Session session = xaSession.getSession();
        Queue queue = (Queue) ctx.lookup("xaq@router1");
        MessageProducer producer = session.createProducer(queue);
        xac.start();
        try {
            Xid xid = new MyXid(); // Implement Xid per your TX manager
            xaRes.start(xid, XAResource.TMNOFLAGS);
            TextMessage msg = session.createTextMessage("XA Message");
            producer.send(msg);
            xaRes.end(xid, XAResource.TMSUCCESS);
            xaRes.commit(xid, true);
        } finally {
            producer.close();
            session.close();
            xac.close();
            ctx.close();
        }
    }
    // Dummy Xid implementation for demo purposes
    static class MyXid implements Xid {
        public int getFormatId() { return 1; }
        public byte[] getGlobalTransactionId() { return new byte[] {1,2,3}; }
        public byte[] getBranchQualifier() { return new byte[] {4,5,6}; }
    }
}