[jboss-cvs] JBoss Messaging SVN: r5761 - in trunk: tests/src/org/jboss/messaging/tests/integration/cluster/failover and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Jan 29 14:20:37 EST 2009


Author: ataylor
Date: 2009-01-29 14:20:36 -0500 (Thu, 29 Jan 2009)
New Revision: 5761

Modified:
   trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java
   trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/JustReplicationTest.java
Log:
https://jira.jboss.org/jira/browse/JBMESSAGING-1488 - added a warapper round the iterator to handle the case where the sessions are cleared

Modified: trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java
===================================================================
--- trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java	2009-01-29 18:24:44 UTC (rev 5760)
+++ trunk/src/main/org/jboss/messaging/core/client/impl/ConnectionManagerImpl.java	2009-01-29 19:20:36 UTC (rev 5761)
@@ -32,6 +32,8 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Collection;
+import java.util.ConcurrentModificationException;
 import java.util.concurrent.ScheduledThreadPoolExecutor;
 import java.util.concurrent.locks.Lock;
 
@@ -809,7 +811,7 @@
 
          if (mapIterator == null || !mapIterator.hasNext())
          {
-            mapIterator = connections.values().iterator();
+            mapIterator = new ConnectionHolderIterator(connections.values().iterator());
          }
 
          ConnectionEntry entry = mapIterator.next();
@@ -927,4 +929,46 @@
          conn.bufferReceived(connectionID, buffer);
       }
    }
+
+   private class ConnectionHolderIterator implements Iterator<ConnectionEntry>
+   {
+      Iterator<ConnectionEntry> it;
+
+      public ConnectionHolderIterator(Iterator<ConnectionEntry> connectionEntryIterator)
+      {
+         it = connectionEntryIterator;
+      }
+
+      public boolean hasNext()
+      {
+         try
+         {
+            return it.hasNext();
+         }
+         catch (ConcurrentModificationException e)
+         {
+            it = connections.values().iterator();
+            return it.hasNext();
+         }
+      }
+
+      public ConnectionEntry next()
+      {
+         try
+         {
+            return it.next();
+         }
+         catch (ConcurrentModificationException e)
+         {
+            it = connections.values().iterator();
+            return it.next();
+         }
+      }
+
+      public void remove()
+      {
+         throw new UnsupportedOperationException();
+      }
+   }
+  
 }

Modified: trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/JustReplicationTest.java
===================================================================
--- trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/JustReplicationTest.java	2009-01-29 18:24:44 UTC (rev 5760)
+++ trunk/tests/src/org/jboss/messaging/tests/integration/cluster/failover/JustReplicationTest.java	2009-01-29 19:20:36 UTC (rev 5761)
@@ -57,7 +57,29 @@
 
    // Public --------------------------------------------------------
 
+   public void testFactory() throws Exception
+   {
 
+     final ClientSessionFactory factory = createFailoverFactory(); // Just a regular factory with Backup configured
+
+     for (int i = 0; i < 2; i++)
+     {
+        ClientSession sessions[] = new ClientSession[10];
+        for (int j = 0; j < 10; j++)
+        {
+           sessions[j] = factory.createSession(false, true, true);
+           sessions[j].start();
+        }
+
+        for (ClientSession session: sessions)
+        {
+           session.close();
+        }
+
+     }
+
+   }
+
    public void testJustReplication() throws Exception
    {
       ClientSessionFactory factory = createFailoverFactory();




More information about the jboss-cvs-commits mailing list