siva phani kumar created AMQ-5877:
-------------------------------------

             Summary: The Queue got hanged with a scenario said in description 
with version 5.11.1 but this works with version 5.5.1
                 Key: AMQ-5877
                 URL: https://issues.apache.org/jira/browse/AMQ-5877
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.11.1
         Environment: Window 7 Enterprise Edition,  64 bit
JDK 1.8.0_25, 64 bit 
apache-activemq-5.11.1

            Reporter: siva phani kumar
            Priority: Blocker


We are unable to read the message with message selector if we follow the below 
steps in ActiveMQ 5.11.1 
* Start ActiveMQ
* Send Two messages
* Read one message with our selector,Using consumer.recieve() API
* Send One more message, And hold the messageId
* Read the message with the above message Id which we are holding as a 
selector("JMSMessageID='" + messageId + "'") immediately.
* Now message we wont able to read, consumer thread will be waiting infinitely

*Note :*  Its required activemq-all-5.11.1.jar,Junit jars need to be in 
classpath.

Issue reproducible prgoram
{code:java}
import java.util.Properties;

import javax.jms.Connection;
import javax.jms.ConnectionFactory;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import javax.naming.Context;
import javax.naming.InitialContext;

import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

/**
 * We are unable to read the message with message selector if we follow the
 * below steps in ActiveMQ 5.11.1
 * <ul>
 * <li>Start ActiveMQ</li>
 * <li>Send Two messages</li>
 * <li>Read one message with our selector,Using consumer.recieve() API</li>
 * <li>Send One more message, And hold the messageId</li>
 * <li>Read the message with the above message Id which we are holding as a
 * selector("JMSMessageID='" + messageId + "'") immediately.</li>
 * <li>Now message we wont able to read, consumer thread will be waiting
 * infinitely</li>
 * </ul>
 * <b>Note : </b> Its required activemq-all-5.11.1.jar,Junit jars need to be in 
classpath.
 *
 */
public final class MessageSelectorJunit {

        private static Connection connection = null;
        private static final String CONTEXT_FACTORY = 
"org.apache.activemq.jndi.ActiveMQInitialContextFactory";
        private static final String URL = "tcp://localhost:61616";
        private static final String QUEUE_NAME = "TestQueue";

        @BeforeClass
        public static void oneTimeSetUp() throws Exception {
                Properties properties = new Properties();
                properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, 
CONTEXT_FACTORY);
                properties.setProperty(Context.PROVIDER_URL, URL);

                // Connection Creation
                Context context = new InitialContext(properties);
                ConnectionFactory connectionFactory = (ConnectionFactory) 
context.lookup("QueueConnectionFactory");
                connection = connectionFactory.createConnection();
                connection.start();
        }

        @Test
        public void testScenario() throws Exception {
                // Message1
                sendJMSMessage();
                sendJMSMessage();
                getJMSMessage(null);

                // Message2
                String messageId2 = sendJMSMessage();
                String messageSelector = "JMSMessageID='" + messageId2 + "'";
                Assert.assertNotNull("Expected message to be read with message 
selector : " + messageSelector,
                                getJMSMessage(messageSelector));
        }

        private String sendJMSMessage() throws Exception {
                String messageId = null;
                Session session = null;
                MessageProducer producer = null;
                try {
                        session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
                        producer = 
session.createProducer(session.createQueue(QUEUE_NAME));

                        Message msg = session.createTextMessage("Test Message");
                        producer.send(msg);

                        messageId = msg.getJMSMessageID();
                        System.out.println("Send MessageId : " + messageId);
                } finally {
                        producer.close();
                        session.close();
                }
                return messageId;
        }

        private String getJMSMessage(String messageSelector) throws Exception {
                String recievedId = null;
                MessageConsumer consumer = null;
                Session session = null;
                try {
                        session = connection.createSession(false, 
Session.AUTO_ACKNOWLEDGE);
                        Queue queue = session.createQueue(QUEUE_NAME);
                        System.out.println("Started Recieving the message with 
the message selector : " + messageSelector);
                        consumer = session.createConsumer(queue, 
messageSelector);
                        connection.start();
                        Message msg = consumer.receive(1000);
                        if (msg != null) {
                                recievedId = msg.getJMSMessageID();
                                System.out.println("Message Recieved, Id : " + 
msg.getJMSMessageID());
                        } else {
                                System.out.println("Message not recieved.");
                        }
                } finally {
                        consumer.close();
                        session.close();
                }
                return recievedId;
        }

        @AfterClass
        public static void oneTimeTearDown() throws Exception {
                if (connection != null) {
                        connection.close();
                }
        }
}
{code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to