/*
* Created on Mar 11, 2007
*/
package cyrille.jms.activemq;
import java.io.UnsupportedEncodingException;
import java.util.Enumeration;
import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.ConnectionMetaData;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueBrowser;
import javax.jms.Session;
import javax.jms.TextMessage;
import junit.framework.TestCase;
import org.apache.activemq.ActiveMQConnectionFactory;
/**
*
* @author <a href="mailto:cleclerc@xebia.fr">Cyrille Le Clerc</a>
*/
public class ActiveMqTest extends TestCase {
Connection connection;
ConnectionFactory connectionFactory;
private void dumpMessageHeaders(Message message) throws JMSException {
System.out.println("> dumpMessageHeaders");
Enumeration<?> propertyNames = message.getPropertyNames();
while (propertyNames.hasMoreElements()) {
String name = (String) propertyNames.nextElement();
Object value = message.getObjectProperty(name);
System.out.println(name + "=" + value);
}
System.out.println("< dumpMessageHeaders");
}
private void sendBinaryMessage(String charset) throws JMSException, UnsupportedEncodingException {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
MessageProducer messageProducer = session.createProducer(queue);
BytesMessage bytesMessage = session.createBytesMessage();
String messageAsString = "Hello world " + charset + " ��� as bytes";
bytesMessage.writeBytes(messageAsString.getBytes(charset));
dumpMessageHeaders(bytesMessage);
messageProducer.send(bytesMessage);
session.close();
}
public void testSendInTemporaryQueue() throws Exception {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createTemporaryQueue();
MessageProducer messageProducer = session.createProducer(queue);
try {
TextMessage textMessage = session.createTextMessage("Hello temporary queue");
messageProducer.send(textMessage);
dumpMessageHeaders(textMessage);
} catch (JMSException e) {
e.printStackTrace();
if (e.getLinkedException() != null) {
e.getLinkedException().printStackTrace();
}
throw e;
}
session.close();
}
public void testSendManyInTemporaryQueue() throws Exception {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createTemporaryQueue();
MessageProducer messageProducer = session.createProducer(queue);
for (int i = 0; i < 10000; i++) {
try {
TextMessage textMessage = session.createTextMessage("Hello temporary queue");
messageProducer.send(textMessage);
dumpMessageHeaders(textMessage);
// Thread.sleep(1000);
} catch (JMSException e) {
e.printStackTrace();
if (e.getLinkedException() != null) {
e.getLinkedException().printStackTrace();
}
throw e;
}
}
session.close();
}
@Override
protected void setUp() throws Exception {
super.setUp();
ConnectionFactory connectionFactory = new ActiveMQConnectionFactory();
((ActiveMQConnectionFactory) connectionFactory).setBrokerURL("vm://localhost?broker.persistent=false&broker.useJmx=false");
this.connection = connectionFactory.createConnection();
this.connection.start();
ConnectionMetaData connectionMetaData = this.connection.getMetaData();
System.out.println("> connectionMetaData");
System.out.println("properties");
Enumeration<String> jmsxPropertyNames = connectionMetaData.getJMSXPropertyNames();
while (jmsxPropertyNames.hasMoreElements()) {
String propertyName = jmsxPropertyNames.nextElement();
System.out.println(propertyName);
}
System.out.println("< connectionMetaData");
}
@Override
protected void tearDown() throws Exception {
super.tearDown();
this.connection.close();
}
public void testBrowse() throws Exception {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
QueueBrowser queueBrowser = session.createBrowser(queue);
Enumeration enumeration = queueBrowser.getEnumeration();
while (enumeration.hasMoreElements()) {
Message message = (Message) enumeration.nextElement();
String msg;
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage) message;
msg = textMessage.toString();
} else {
msg = message.toString();
}
System.out.println("browse " + msg);
}
}
public void testReceive() throws Exception {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
MessageConsumer messageConsumer = session.createConsumer(queue, null);
Message message;
while ((message = messageConsumer.receive(1000)) != null) {
System.out.println("receive " + message);
}
}
public void testSendAndReceive() throws Exception {
MessageConsumer messageConsumer;
{
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
messageConsumer = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE).createConsumer(queue, null);
MessageListener sysoutListener = new MessageListener() {
public void onMessage(Message message) {
System.out.println("testSendAndReceive.receive");
System.out.println(message);
}
};
messageConsumer.setMessageListener(sysoutListener);
}
{
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
MessageProducer messageProducer = session.createProducer(queue);
TextMessage textMessage = session.createTextMessage("Hello world with headers");
textMessage.setJMSMessageID("my-message-id-1");
textMessage.setJMSCorrelationID("my-correlation-id-1");
textMessage.setJMSType("my-type");
textMessage.setStringProperty("mystringproperty", "my-value");
messageProducer.send(textMessage);
}
Thread.sleep(2 * 1000);
messageConsumer.close();
}
public void testSendTextMessage() throws Exception {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
MessageProducer messageProducer = session.createProducer(queue);
TextMessage textMessage = session.createTextMessage("Hello world JMS Message");
messageProducer.send(textMessage);
dumpMessageHeaders(textMessage);
session.close();
}
public void testSendTextMessageWithProperties() throws Exception {
Session session = this.connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
Queue queue = session.createQueue("default");
MessageProducer messageProducer = session.createProducer(queue);
TextMessage textMessage = session.createTextMessage("Hello world with headers");
textMessage.setJMSMessageID("my-message-id-1");
textMessage.setJMSCorrelationID("my-correlation-id-1");
textMessage.setJMSType("my-type");
textMessage.setStringProperty("mystringproperty", "my-value");
messageProducer.send(textMessage);
dumpMessageHeaders(textMessage);
session.close();
}
}