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