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