activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From zbc <zhebinc...@163.com>
Subject Re: standard jms code can not receive message from queue
Date Fri, 27 Sep 2013 14:38:55 GMT
please run following test:

*package com.conceptwave.servicedesigner;

import java.util.Hashtable;

import javax.jms.JMSException;
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.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import junit.framework.Assert;

import org.junit.Before;
import org.junit.Test;

public class test {
	/**
	 * put a test message to queue before test case run.
	 */
	@Before
	public void setup() {
		InitialContext ctx = null;
		QueueConnection con = null;
		QueueSession queueSession = null;
		QueueSender sender = null;
		try {
			Hashtable env = new Hashtable();
			env = new Hashtable();
			env.put(Context.INITIAL_CONTEXT_FACTORY,
					"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
			env.put(Context.PROVIDER_URL, "tcp://localhost:61616");
			ctx = new InitialContext(env);
			QueueConnectionFactory fac = (QueueConnectionFactory) ctx
					.lookup("ConnectionFactory");
			con = fac.createQueueConnection();
			queueSession = con.createQueueSession(false,
					Session.AUTO_ACKNOWLEDGE);
			con.start();
			sender = queueSession.createSender((Queue) ctx
					.lookup("dynamicQueues/queue1"));
			sender.send(queueSession.createTextMessage("test message"));
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				sender.close();
				queueSession.close();
				con.close();
				ctx.close();
			} catch (JMSException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NamingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * the receiver must sleep enough time after it is created in order to
	 * receive the message in the queue.
	 */
	@Test
	public void test1() {
		InitialContext ctx = null;
		QueueConnection con = null;
		QueueSession queueSession = null;
		QueueReceiver receiver = null;
		try {
			Hashtable env = new Hashtable();
			env = new Hashtable();
			env.put(Context.INITIAL_CONTEXT_FACTORY,
					"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
			env.put(Context.PROVIDER_URL, "tcp://localhost:61616");
			ctx = new InitialContext(env);
			QueueConnectionFactory fac = (QueueConnectionFactory) ctx
					.lookup("ConnectionFactory");
			con = fac.createQueueConnection();
			queueSession = con.createQueueSession(false,
					Session.AUTO_ACKNOWLEDGE);
			con.start();
			receiver = queueSession.createReceiver((Queue) ctx
					.lookup("dynamicQueues/queue1"));

			// in order to receive the message from queue, must sleep enough
			// time
			Thread.sleep(500);
			// the message can be received successfully after sleep.
			Message result = receiver.receiveNoWait();
			Assert.assertNotNull(result);
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				receiver.close();
				queueSession.close();
				con.close();
				ctx.close();
			} catch (JMSException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NamingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	/**
	 * the receiver never get the message IMMEDIATELY after it is created.
	 * 
	 * @throws Exception
	 *             to junit.
	 */
	@Test
	public void test2() throws Exception {
		// sleep enough time to make sure the test message is really put into
		// the queue.
		Thread.sleep(5000);

		InitialContext ctx = null;
		QueueConnection con = null;
		QueueSession queueSession = null;
		QueueReceiver receiver = null;
		try {
			Hashtable env = new Hashtable();
			env = new Hashtable();
			env.put(Context.INITIAL_CONTEXT_FACTORY,
					"org.apache.activemq.jndi.ActiveMQInitialContextFactory");
			env.put(Context.PROVIDER_URL, "tcp://localhost:61616");

			// repeatedly try to receive message, but you NEVER get it!!
			for (int i = 0; i < 100; i++) {
				ctx = new InitialContext(env);
				QueueConnectionFactory fac = (QueueConnectionFactory) ctx
						.lookup("ConnectionFactory");
				con = fac.createQueueConnection();
				queueSession = con.createQueueSession(false,
						Session.AUTO_ACKNOWLEDGE);
				con.start();
				receiver = queueSession.createReceiver((Queue) ctx
						.lookup("dynamicQueues/queue1"));
				// no sleep after the receiver is created
				// Thread.sleep(500);
				Message result = receiver.receiveNoWait();
				// you CAN NOT get the message in the queue.
				Assert.assertNull(result);
			}
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				receiver.close();
				queueSession.close();
				con.close();
				ctx.close();
			} catch (JMSException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (NamingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

}*




--
View this message in context: http://activemq.2283324.n4.nabble.com/standard-jms-code-can-not-receive-message-from-queue-tp4671868p4671901.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Mime
View raw message