[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