[ https://issues.apache.org/jira/browse/QPIDJMS-264?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15872428#comment-15872428 ]
Timothy Bish commented on QPIDJMS-264: -------------------------------------- Pretty sure this is the underlying issue. If you could retest with a snapshot build to confirm that'd be great or wait until 0.21.0 which will have this fix. > Incoming messages are dispatched out of order > ---------------------------------------------- > > Key: QPIDJMS-264 > URL: https://issues.apache.org/jira/browse/QPIDJMS-264 > Project: Qpid JMS > Issue Type: Bug > Components: qpid-jms-client > Affects Versions: 0.20.0 > Reporter: Alex Rudyy > Priority: Critical > Attachments: out-of-order-issue.tar.gz, out-of-order.log.tgz > > > Both current trunk version and version 0.20.0 of JMS Client can dispatch > incoming messages out of order into client application. I did not test > earlier versions. The messages are received in the right order but Client > dispatches them occasionally out of order. > I used the following code to reproduce the issue with trunk version of Java > Broker. > {code} > public static void main(String[] args) throws Exception > { > for (int i=0;i<100;i++) > { > execute(i); > } > } > public static void execute(int iteration) throws Exception > { > System.out.println("Iteration " + iteration); > Connection managingConnection = createConnection(); > Session session = > managingConnection.createSession(Session.SESSION_TRANSACTED); > Connection consumingConnection = createConnection(); > Session consumerSession = consumingConnection.createSession(true, > Session.SESSION_TRANSACTED); > Queue queue = createTestQueue(session, "Q3-test"); > session.commit(); > MessageConsumer consumer = consumerSession.createConsumer(queue); > Connection producingConnection = createConnection(); > Session producerSession = producingConnection.createSession(true, > Session.SESSION_TRANSACTED); > MessageProducer producer = producerSession.createProducer(queue); > producer.send(producerSession.createTextMessage("msg1")); > producer.send(producerSession.createTextMessage("msg2")); > producer.send(producerSession.createTextMessage("msg3")); > producer.send(producerSession.createTextMessage("msg4")); > producerSession.commit(); > consumingConnection.start(); > TextMessage tm = (TextMessage) consumer.receive(); > System.out.println(">" + tm.getText()); > if (!"msg1".equals(tm.getText())) > { > throw new RuntimeException("Unexpected"); > } > deleteQueue(session, "Q3-test"); > consumingConnection.close(); > producingConnection.close(); > managingConnection.close(); > } > private static Queue createTestQueue(Session session, String queueName) > throws JMSException > { > MessageProducer producer = > session.createProducer(session.createQueue("$management")); > MapMessage createMessage = session.createMapMessage(); > createMessage.setStringProperty("type", "org.apache.qpid.Queue"); > createMessage.setStringProperty("operation", "CREATE"); > createMessage.setString("name", queueName); > createMessage.setString("object-path", "org.apache.qpid.Queue"); > producer.send(createMessage); > if (session.getTransacted()) > { > session.commit(); > } > return session.createQueue(queueName); > } > private static void deleteQueue(Session session, String queueName)throws > JMSException > { > MessageProducer producer = > session.createProducer(session.createQueue("$management")); > MapMessage createMessage = session.createMapMessage(); > createMessage.setStringProperty("type", "org.apache.qpid.Queue"); > createMessage.setStringProperty("operation", "DELETE"); > createMessage.setStringProperty("index", "object-path"); > createMessage.setStringProperty("key", queueName); > producer.send(createMessage); > if (session.getTransacted()) > { > session.commit(); > } > } > private static Connection createConnection() throws JMSException, > NamingException { > Properties properties = new Properties(); > properties.put("java.naming.factory.initial", > "org.apache.qpid.jms.jndi.JmsInitialContextFactory"); > properties.put("connectionfactory.myFactoryLookup", > "amqp://localhost:5672"); > Context context = new InitialContext(properties); > try > { > ConnectionFactory factory = (ConnectionFactory) > context.lookup("myFactoryLookup"); > return factory.createConnection("admin", "admin"); > } > finally > { > context.close(); > } > } > {code} -- This message was sent by Atlassian JIRA (v6.3.15#6346) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@qpid.apache.org For additional commands, e-mail: dev-h...@qpid.apache.org