Author: tabish
Date: Mon Nov 29 21:07:26 2010
New Revision: 1040297

URL: http://svn.apache.org/viewvc?rev=1040297&view=rev
Log:
fix for: https://issues.apache.org/jira/browse/AMQNET-295

Modified:
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs
    
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs

Modified: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs?rev=1040297&r1=1040296&r2=1040297&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/Failover/FailoverTransport.cs
 Mon Nov 29 21:07:26 2010
@@ -63,7 +63,8 @@ namespace Apache.NMS.ActiveMQ.Transport.
                private bool useExponentialBackOff = true;
                private bool randomize = true;
                private bool initialized;
-               private int maxReconnectAttempts;
+        private int maxReconnectAttempts;
+        private int startupMaxReconnectAttempts;
                private int connectFailures;
                private int reconnectDelay = 10;
                private int asyncTimeout = 45000;
@@ -231,6 +232,12 @@ namespace Apache.NMS.ActiveMQ.Transport.
                        set { maxReconnectAttempts = value; }
                }
 
+        public int StartupMaxReconnectAttempts
+        {
+            get { return startupMaxReconnectAttempts; }
+            set { startupMaxReconnectAttempts = value; }
+        }
+
                public bool Randomize
                {
                        get { return randomize; }
@@ -1034,7 +1041,17 @@ namespace Apache.NMS.ActiveMQ.Transport.
                                                }
                                        }
 
-                                       if(MaxReconnectAttempts > 0 && 
++connectFailures >= MaxReconnectAttempts)
+                    int reconnectAttempts = 0;
+                    if( firstConnection ) {
+                        if( StartupMaxReconnectAttempts != 0 ) {
+                            reconnectAttempts = StartupMaxReconnectAttempts;
+                        }
+                    }
+                    if( reconnectAttempts == 0 ) {
+                        reconnectAttempts = MaxReconnectAttempts;
+                    }
+        
+                                       if(reconnectAttempts > 0 && 
++connectFailures >= reconnectAttempts)
                                        {
                                                Tracer.ErrorFormat("Failed to 
connect to transport after {0} attempt(s)", connectFailures);
                                                connectionFailure = Failure;

Modified: 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs
URL: 
http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs?rev=1040297&r1=1040296&r2=1040297&view=diff
==============================================================================
--- 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs
 (original)
+++ 
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/failover/FailoverTransportTest.cs
 Mon Nov 29 21:07:26 2010
@@ -160,6 +160,32 @@ namespace Apache.NMS.ActiveMQ.Test
                        }
                }
 
+        [Test]
+        public void FailoverTransportCreateFailOnCreateTest2()
+        {
+            Uri uri = new 
Uri("failover:(mock://localhost:61616?transport.failOnCreate=true)?" +
+                              
"transport.useExponentialBackOff=false&transport.startupMaxReconnectAttempts=3&transport.initialReconnectDelay=100");
+            FailoverTransportFactory factory = new FailoverTransportFactory();
+
+            using(ITransport transport = factory.CreateTransport(uri))
+            {
+                Assert.IsNotNull(transport);
+                transport.Command = OnCommand;
+                transport.Exception = OnException;
+
+                FailoverTransport failover = 
transport.Narrow(typeof(FailoverTransport)) as FailoverTransport;
+                Assert.IsNotNull(failover);
+                Assert.IsFalse(failover.UseExponentialBackOff);
+                Assert.AreEqual(3, failover.StartupMaxReconnectAttempts);
+                Assert.AreEqual(100, failover.InitialReconnectDelay);
+
+                transport.Start();
+                Thread.Sleep(2000);
+                Assert.IsNotEmpty(this.exceptions);
+                Assert.IsFalse(failover.IsConnected);
+            }
+        }
+
                [Test]
                public void FailoverTransportFailOnSendMessageTest()
                {


Reply via email to