@Test
  public void testOutOfOrder() throws Exception {
    Connection conn = createConnection();

    Session sess = conn.createSession(true, Session.SESSION_TRANSACTED);

    Session sess2 = conn.createSession(true, Session.SESSION_TRANSACTED);

    MessageProducer prod = sess.createProducer(queue1);

    MessageConsumer cons = sess2.createConsumer(queue1);

    CountDownLatch latch = new CountDownLatch(1);

    final int NUM_MESSAGES = 1000;

    MyListener listener = new MyListener(latch, sess2, NUM_MESSAGES);

    cons.setMessageListener(listener);

    conn.start();

    for (int i = 0; i < NUM_MESSAGES; i++) {
      TextMessage tm = sess.createTextMessage("message" + i);

      prod.send(tm);

      if (i % 10 == 0) {
        sess.commit();
      }
    }

    // need extra commit for cases in which the last message index is not a multiple of 10
    sess.commit();

    Assert.assertTrue(latch.await(20000, MILLISECONDS));

    if (listener.failed) {
      ProxyAssertSupport.fail("listener failed: " + listener.getError());
    }
  }