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.

Reply via email to