WARNING: THIS EXAMPLE IS OUT OF DATE AND FAIRLY CRAPPY see: http://docs.jboss.org/jbossas/jboss4guide/r5/html/ch6.chapt.htmld0e12917 for a much better one.
Queue Send/Receive
The following code shows how to send and receive messages from a Queue.
Code
import java.util.Properties;
import javax.jms.Message;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.QueueReceiver;
import javax.jms.QueueSender;
import javax.jms.QueueSession;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.naming.Context;
import javax.naming.InitialContext;
public class Client
{
public static void main(String[] args) throws Exception
{
log.info("Creating jndi context - alternatively use a jndi.properties");
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jnp.interfaces");
properties.put(Context.PROVIDER_URL, "localhost");
InitialContext ctx = new InitialContext(properties);
log.info("Looking up queue");
Queue queue = (Queue) ctx.lookup("queue/testQueue");
log.info("Looking up connection factory");
QueueConnectionFactory qcf = (QueueConnectionFactory) ctx.lookup("UIL2ConnectionFactory");
log.info("Creating connection");
QueueConnection qc = qcf.createQueueConnection();
try
{
log.info("Creating session");
QueueSession qs = qc.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
log.info("Creating sender");
QueueSender sender = qs.createSender(queue);
log.info("Creating message");
TextMessage message = qs.createTextMessage("hello");
log.info("Sending message");
sender.send(message);
log.info("Creating receiver");
QueueReceiver receiver = qs.createReceiver(queue);
log.info("Try to receive message, it will not work");
Message received = receiver.receiveNoWait();
if (received != null)
throw new RuntimeException("Should not get a message if the connection is not started!");
log.info("You have to start the connection before receiving messages");
qc.start();
log.info("This receive will work");
received = receiver.receiveNoWait();
log.info("Got message: " + received);
}
finally
{
qc.close();
}
}
public static class log
{
public static void info(String message)
{
System.out.println(message);
}
public static void error(String message, Throwable t)
{
System.err.println(message);
t.printStackTrace();
}
}
}
Instructions
To compile it: javac -classpath JBOSS_HOME/client/jbossall-client.jar Client.java or windows javac -classpath JBOSS_HOME\client\jbossall-client.jar Client.java To run it: java -classpath .:JBOSS_HOME/client/jbossall-client.jar Client or windows java -classpath .;JBOSS_HOME\client\jbossall-client.jar Client
Output
Creating jndi context - alternatively use a jndi.properties
Looking up queue
Looking up connection factory
Creating connection
Creating session
Creating sender
Creating message
Sending message
Creating receiver
Try to receive message, it will not work
You have to start the connection before receiving messages
This receive will work
Got message: SpyTextMessage {
Header {
jmsDestination : QUEUE.testQueue
jmsDeliveryMode : 2
jmsExpiration : 0
jmsPriority : 4
jmsMessageID : ID:3-10797528788341
jmsTimeStamp : 1079752878834
jmsCorrelationID: null
jmsReplyTo : null
jmsType : null
jmsRedelivered : false
jmsProperties : {}
jmsPropReadWrite: false
msgReadOnly : true
producerClientId: ID:3
}
Body {
text :hello
}
}
Comments