[jboss-cvs] JBoss Messaging SVN: r2139 - in branches/Branch_1_0_1_SP: src/main/org/jboss/jms/client/delegate and 3 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 2 04:37:33 EST 2007


Author: ovidiu.feodorov at jboss.com
Date: 2007-02-02 04:37:33 -0500 (Fri, 02 Feb 2007)
New Revision: 2139

Modified:
   branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/JBossQueueBrowser.java
   branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java
   branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/BrowserEndpoint.java
   branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java
   branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/advised/BrowserAdvised.java
   branches/Branch_1_0_1_SP/tests/src/org/jboss/test/messaging/jms/BrowserTest.java
Log:
http://jira.jboss.org/jira/browse/JBMESSAGING-803

Modified: branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/JBossQueueBrowser.java
===================================================================
--- branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/JBossQueueBrowser.java	2007-02-02 09:12:26 UTC (rev 2138)
+++ branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/JBossQueueBrowser.java	2007-02-02 09:37:33 UTC (rev 2139)
@@ -49,8 +49,6 @@
    private Queue queue;
    private String messageSelector; 
    
-   private BrowserEnumeration enumeration = new BrowserEnumeration();
-
    // Constructors --------------------------------------------------
 
    JBossQueueBrowser(Queue queue, String messageSelector, BrowserDelegate delegate)
@@ -69,8 +67,9 @@
    }
  
    public Enumeration getEnumeration() throws JMSException
-   {               
-      return enumeration;
+   {
+      delegate.reset();
+      return new BrowserEnumeration();
    }
   
    public String getMessageSelector() throws JMSException

Modified: branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java
===================================================================
--- branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java	2007-02-02 09:12:26 UTC (rev 2138)
+++ branches/Branch_1_0_1_SP/src/main/org/jboss/jms/client/delegate/ClientBrowserDelegate.java	2007-02-02 09:37:33 UTC (rev 2139)
@@ -80,6 +80,11 @@
       throw new IllegalStateException("This invocation should not be handled here!");
    }
 
+   public void reset() throws JMSException
+   {
+      throw new IllegalStateException("This invocation should not be handled here!");
+   }
+
    public boolean hasNextMessage() throws JMSException
    {
       throw new IllegalStateException("This invocation should not be handled here!");

Modified: branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/BrowserEndpoint.java
===================================================================
--- branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/BrowserEndpoint.java	2007-02-02 09:12:26 UTC (rev 2138)
+++ branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/BrowserEndpoint.java	2007-02-02 09:37:33 UTC (rev 2139)
@@ -31,12 +31,20 @@
  * of the methods are handled in the advice stack.
  * 
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
  */
 public interface BrowserEndpoint extends Closeable
-{   
+{
+   /**
+    * Reset the internal state of the browser endpoint so the following
+    * nextMessage()/hasNextMessage()/nextMessageBlock() invocations would reflect the state of the
+    * queue at the moment of the reset.
+    */
+   void reset() throws JMSException;
+
    Message nextMessage() throws JMSException;
    
    boolean hasNextMessage() throws JMSException;

Modified: branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java
===================================================================
--- branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java	2007-02-02 09:12:26 UTC (rev 2138)
+++ branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/ServerBrowserEndpoint.java	2007-02-02 09:37:33 UTC (rev 2139)
@@ -39,6 +39,7 @@
  * Concrete implementation of BrowserEndpoint.
  * 
  * @author <a href="mailto:tim.fox at jboss.com">Tim Fox</a>
+ * @author <a href="mailto:ovidiu at jboss.org">Ovidiu Feodorov</a>
  * @version <tt>$Revision$</tt>
  *
  * $Id$
@@ -55,14 +56,16 @@
    
    private boolean trace = log.isTraceEnabled();
 
-   private Iterator iterator;
-   
    private ServerSessionEndpoint session;
    
    private int id;
    
    private boolean closed;
 
+   private Channel destination;
+   private Filter filter;
+   private Iterator iterator;
+
    // Constructors --------------------------------------------------
 
    protected ServerBrowserEndpoint(ServerSessionEndpoint session, int id,
@@ -72,25 +75,41 @@
       this.session = session;
       
       this.id = id;
+
+      this.destination = destination;
       
-		Filter filter = null;
-      
 		if (messageSelector != null)
 		{	
 			filter = new Selector(messageSelector);		
 		}
-      
-		iterator = destination.browse(filter).iterator();
    }
 
    // BrowserEndpoint implementation --------------------------------
 
+   public void reset() throws JMSException
+   {
+      if (closed)
+      {
+         throw new IllegalStateException("Browser is closed");
+      }
+
+      log.debug(this + " is being resetted");
+
+      iterator = createIterator();
+   }
+
    public boolean hasNextMessage() throws JMSException
    {
       if (closed)
       {
          throw new IllegalStateException("Browser is closed");
       }
+
+      if (iterator == null)
+      {
+         iterator = createIterator();
+      }
+
       return iterator.hasNext();
    }
    
@@ -100,6 +119,12 @@
       {
          throw new IllegalStateException("Browser is closed");
       }
+
+      if (iterator == null)
+      {
+         iterator = createIterator();
+      }
+
       Routable r = (Routable)iterator.next();
 
       if (trace) { log.trace("returning the message corresponding to " + r); }
@@ -121,7 +146,12 @@
       {
          throw new IllegalArgumentException("maxMessages must be >=2 otherwise use nextMessage");
       }
-      
+
+      if (iterator == null)
+      {
+         iterator = createIterator();
+      }
+
       ArrayList messages = new ArrayList(maxMessages);
       int i = 0;
       while (i < maxMessages)
@@ -173,6 +203,11 @@
 
    // Private -------------------------------------------------------
 
+   private Iterator createIterator()
+   {
+      return destination.browse(filter).iterator();
+   }
+
    // Inner classes -------------------------------------------------
 
 }

Modified: branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/advised/BrowserAdvised.java
===================================================================
--- branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/advised/BrowserAdvised.java	2007-02-02 09:12:26 UTC (rev 2138)
+++ branches/Branch_1_0_1_SP/src/main/org/jboss/jms/server/endpoint/advised/BrowserAdvised.java	2007-02-02 09:37:33 UTC (rev 2139)
@@ -70,6 +70,11 @@
       return endpoint.isClosed();
    }
 
+   public void reset() throws JMSException
+   {
+      endpoint.reset();
+   }
+
    public boolean hasNextMessage() throws JMSException
    {
       return endpoint.hasNextMessage();

Modified: branches/Branch_1_0_1_SP/tests/src/org/jboss/test/messaging/jms/BrowserTest.java
===================================================================
--- branches/Branch_1_0_1_SP/tests/src/org/jboss/test/messaging/jms/BrowserTest.java	2007-02-02 09:12:26 UTC (rev 2138)
+++ branches/Branch_1_0_1_SP/tests/src/org/jboss/test/messaging/jms/BrowserTest.java	2007-02-02 09:37:33 UTC (rev 2139)
@@ -32,6 +32,7 @@
 import javax.jms.QueueBrowser;
 import javax.jms.Session;
 import javax.jms.Topic;
+import javax.jms.TextMessage;
 import javax.naming.InitialContext;
 
 import org.jboss.jms.client.JBossConnectionFactory;
@@ -89,6 +90,8 @@
       
 		ServerManagement.deployQueue("Queue");
 		queue = (Queue)initialContext.lookup("/queue/Queue");
+
+      drainDestination(cf, queue);
       		
       connection = cf.createConnection();
       session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
@@ -241,10 +244,47 @@
 		}
 		assertEquals(70, count);
 	}
+
+   public void testGetEnumeration() throws Exception
+   {
+      // send a message to the queue
+
+      Message m = session.createTextMessage("A");
+      producer.send(m);
+
+      // make sure we can browse it
+
+      QueueBrowser browser = session.createBrowser(queue);
+
+      Enumeration en = browser.getEnumeration();
+
+      assertTrue(en.hasMoreElements());
+
+      TextMessage rm = (TextMessage)en.nextElement();
+
+      assertNotNull(rm);
+      assertEquals("A", rm.getText());
+
+      assertFalse(en.hasMoreElements());
+
+      // create a *new* enumeration, that should reset it
+
+      en = browser.getEnumeration();
+
+      assertTrue(en.hasMoreElements());
+
+      rm = (TextMessage)en.nextElement();
+
+      assertNotNull(rm);
+      assertEquals("A", rm.getText());
+
+      assertFalse(en.hasMoreElements());
+   }
+
+
+
+   // Package protected ---------------------------------------------
 	
-	
-	// Package protected ---------------------------------------------
-	
 	// Protected -----------------------------------------------------
 	
 	// Private -------------------------------------------------------




More information about the jboss-cvs-commits mailing list