[hornetq-commits] JBoss hornetq SVN: r8927 - in trunk: tests/jms-tests/src/org/hornetq/jms/tests and 1 other directory.

do-not-reply at jboss.org do-not-reply at jboss.org
Tue Mar 16 05:38:22 EDT 2010


Author: jmesnil
Date: 2010-03-16 05:38:22 -0400 (Tue, 16 Mar 2010)
New Revision: 8927

Added:
   trunk/tests/jms-tests/src/org/hornetq/jms/tests/AutoAckMesageListenerTest.java
Modified:
   trunk/src/main/org/hornetq/jms/client/HornetQSession.java
Log:
fix HornetQSession.recover()

* consider the last message as delivered when rolling back the underlying
  ClientSession

Modified: trunk/src/main/org/hornetq/jms/client/HornetQSession.java
===================================================================
--- trunk/src/main/org/hornetq/jms/client/HornetQSession.java	2010-03-12 23:20:41 UTC (rev 8926)
+++ trunk/src/main/org/hornetq/jms/client/HornetQSession.java	2010-03-16 09:38:22 UTC (rev 8927)
@@ -283,7 +283,7 @@
 
       try
       {
-         session.rollback();
+         session.rollback(true);
       }
       catch (HornetQException e)
       {

Added: trunk/tests/jms-tests/src/org/hornetq/jms/tests/AutoAckMesageListenerTest.java
===================================================================
--- trunk/tests/jms-tests/src/org/hornetq/jms/tests/AutoAckMesageListenerTest.java	                        (rev 0)
+++ trunk/tests/jms-tests/src/org/hornetq/jms/tests/AutoAckMesageListenerTest.java	2010-03-16 09:38:22 UTC (rev 8927)
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2010 Red Hat, Inc.
+ * Red Hat licenses this file to you under the Apache License, version
+ * 2.0 (the "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied.  See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+package org.hornetq.jms.tests;
+
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
+
+import javax.jms.Connection;
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.MessageConsumer;
+import javax.jms.MessageListener;
+import javax.jms.MessageProducer;
+import javax.jms.Session;
+
+import org.hornetq.core.logging.Logger;
+
+/**
+ * A AutoAckMesageListenerTest
+ *
+ * @author <a href="mailto:jmesnil at redhat.com">Jeff Mesnil</a>
+ *
+ *
+ */
+public class AutoAckMesageListenerTest extends JMSTestCase
+{
+
+   // Constants -----------------------------------------------------
+
+   private static final Logger log = Logger.getLogger(AutoAckMesageListenerTest.class);
+
+   // Attributes ----------------------------------------------------
+
+   // Static --------------------------------------------------------
+
+   // Constructors --------------------------------------------------
+
+   // Public --------------------------------------------------------
+
+   public void testAutoAckMsgListenerQueue() throws Exception
+   {
+      Connection conn = null;
+
+      try
+      {
+         CountDownLatch latch = new CountDownLatch(1);
+         
+         conn = JMSTestCase.cf.createConnection();
+         Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
+         MessageProducer producer = session.createProducer(HornetQServerTestCase.queue1);
+         MessageConsumer consumer = session.createConsumer(HornetQServerTestCase.queue1);
+         AutoAckMsgListener listener = new AutoAckMsgListener(latch, session);
+         consumer.setMessageListener(listener);
+
+         // create and send messages
+         log.info("Send and receive two message");
+         Message messageSent = session.createMessage();
+         messageSent.setBooleanProperty("last", false);
+         producer.send(messageSent);
+         messageSent.setBooleanProperty("last", true);
+         producer.send(messageSent);
+
+         conn.start();
+
+         // wait until message is received
+         log.info("waiting until message has been received by message listener...");
+         latch.await(10, TimeUnit.SECONDS);
+         
+         // check message listener status
+         if (listener.getPassed() == false)
+         {
+            throw new Exception("failed");
+         }
+      } 
+      finally
+      {
+         if (conn != null)
+         {
+            conn.close();
+         }
+      }
+   }
+
+   // Package protected ---------------------------------------------
+
+   // Protected -----------------------------------------------------
+
+   // Private -------------------------------------------------------
+
+   // Inner classes -------------------------------------------------
+
+   private static class AutoAckMsgListener implements MessageListener
+   {
+      private boolean passed;
+
+      private final Session session;
+
+      private final CountDownLatch monitor;
+
+      public AutoAckMsgListener(CountDownLatch latch, Session session)
+      {
+         this.monitor = latch;
+         this.session = session;
+      }
+
+      // get state of test
+      public boolean getPassed()
+      {
+         return passed;
+      }
+
+      // will receive two messages
+      public void onMessage(Message message)
+      {
+         try
+         {
+            if (message.getBooleanProperty("last") == false)
+            {
+               log.info("Received first message.");
+               if (message.getJMSRedelivered() == true)
+               {
+                  // should not re-receive this one
+                  log.info("Error: received first message twice");
+                  passed = false;
+               }
+            }
+            else
+            {
+               if (message.getJMSRedelivered() == false)
+               {
+                  // received second message for first time
+                  log.info("Received second message. Calling recover()");
+                  session.recover();
+               }
+               else
+               {
+                  // should be redelivered after recover
+                  log.info("Received second message again as expected");
+                  passed = true;
+                  monitor.countDown();
+               }
+            }
+         }
+         catch (JMSException e)
+         {
+            log.warn("Exception caught in message listener:\n" + e);
+            passed = false;
+            monitor.countDown();
+         }
+
+      }
+   }
+}



More information about the hornetq-commits mailing list