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 for the connection factory and queue.

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("mycf@router1");
        Queue queue = (Queue) ctx.lookup("orders@router1");
        Connection connection = cf.createConnection("user", "password");
        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());
            }
        } finally {
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

Publish and Subscribe to a Topic

Shows how to publish a message to a topic and receive it using a subscriber, using JNDI lookup for the topic and connection factory.

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("mycf@router1");
        Topic topic = (Topic) ctx.lookup("news");
        Connection connection = cf.createConnection("user", "password");
        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());
            }
        } finally {
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

Request/Reply with Temporary Queue

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

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

public class SwiftMQRequestReplyExample {
    public static void main(String[] args) throws Exception {
        Context ctx = new InitialContext();
        ConnectionFactory cf = (ConnectionFactory) ctx.lookup("mycf@router1");
        Queue queue = (Queue) ctx.lookup("service@router1");
        Connection connection = cf.createConnection("user", "password");
        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
        MessageProducer producer = session.createProducer(queue);
        TemporaryQueue replyQueue = session.createTemporaryQueue();
        MessageConsumer replyConsumer = session.createConsumer(replyQueue);
        connection.start();
        try {
            TextMessage request = session.createTextMessage("Ping?");
            request.setJMSReplyTo(replyQueue);
            producer.send(request);
            // Simulate service replying
            MessageConsumer serviceConsumer = session.createConsumer(queue);
            Message received = serviceConsumer.receive(5000);
            if (received != null && received.getJMSReplyTo() != null) {
                MessageProducer serviceProducer = session.createProducer(received.getJMSReplyTo());
                serviceProducer.send(session.createTextMessage("Pong!"));
                serviceProducer.close();
            }
            Message reply = replyConsumer.receive(5000);
            if (reply instanceof TextMessage) {
                System.out.println("Reply: " + ((TextMessage) reply).getText());
            }
            serviceConsumer.close();
        } finally {
            replyConsumer.close();
            session.close();
            connection.close();
            ctx.close();
        }
    }
}

XA Transaction Example

Shows how to use XA transactions with SwiftMQ JMS, enlisting an XAResource and performing a two-phase commit.

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("mycf@router1");
        XAConnection xaconn = xacf.createXAConnection("user", "password");
        XASession xasession = xaconn.createXASession();
        XAResource xares = xasession.getXAResource();
        Session session = xasession.getSession();
        Queue queue = (Queue) ctx.lookup("xaqueue@router1");
        MessageProducer producer = session.createProducer(queue);
        xaconn.start();
        try {
            Xid xid = new MyXid(); // Implement Xid as needed
            xares.start(xid, XAResource.TMNOFLAGS);
            TextMessage msg = session.createTextMessage("XA Transaction Message");
            producer.send(msg);
            xares.end(xid, XAResource.TMSUCCESS);
            int ret = xares.prepare(xid);
            if (ret == XAResource.XA_OK) {
                xares.commit(xid, false);
            }
        } finally {
            session.close();
            xaconn.close();
            ctx.close();
        }
    }
    // Simple Xid implementation for demonstration
    static class MyXid implements Xid {
        public int getFormatId() { return 1234; }
        public byte[] getGlobalTransactionId() { return new byte[]{1,2,3}; }
        public byte[] getBranchQualifier() { return new byte[]{4,5,6}; }
    }
}