[prev in list] [next in list] [prev in thread] [next in thread] 

List:       activemq-commits
Subject:    (activemq-nms-openwire) branch main updated: AMQNET-838 ActiveMQ NMS client does not support nested 
From:       havret () apache ! org
Date:       2024-01-31 9:59:58
Message-ID: 170669525814.915041.18131045898686801730 () gitbox2-he-fi ! apache ! org
[Download RAW message or body]

This is an automated email from the ASF dual-hosted git repository.

havret pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/activemq-nms-openwire.git


The following commit(s) were added to refs/heads/main by this push:
     new fe3c59d  AMQNET-838 ActiveMQ NMS client does not support nested parameters \
for failover transport fe3c59d is described below

commit fe3c59dc9b6ce4c4e73b5e23ccebad489fc0d42e
Author: vivanku <vivanku@gmail.com>
AuthorDate: Wed Jan 31 03:02:17 2024 +0530

    AMQNET-838 ActiveMQ NMS client does not support nested parameters for failover \
transport  
    Refer "Configuring Nested URI Options" section in \
https://activemq.apache.org/failover-transport-reference.html  This is supported for \
jms client however not for nms client.  reference for jms client :
    https://github.com/apache/activemq/blob/a2d5d28c1f24d67f57d245003f1d7f96d696dd7c/a \
ctivemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransportFactory.java#L70
  https://github.com/apache/activemq/blob/a2d5d28c1f24d67f57d245003f1d7f96d696dd7c/act \
ivemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java#L1431
  https://github.com/apache/activemq/blob/a2d5d28c1f24d67f57d245003f1d7f96d696dd7c/act \
ivemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java#L1019
  https://github.com/apache/activemq/blob/a2d5d28c1f24d67f57d245003f1d7f96d696dd7c/act \
ivemq-client/src/main/java/org/apache/activemq/transport/failover/FailoverTransport.java#L1194
  
    As part of this PR , adding support to nested parameters in NMS client for \
failover transport.  
    Co-authored-by: Kumar, Vivek <vivek.kumar5@ge.com>
---
 src/Transport/Failover/FailoverTransport.cs        | 43 +++++++++++++++++++---
 src/Transport/Failover/FailoverTransportFactory.cs | 10 ++++-
 test/Transport/failover/FailoverTransportTest.cs   | 30 ++++++++++++++-
 3 files changed, 75 insertions(+), 8 deletions(-)

diff --git a/src/Transport/Failover/FailoverTransport.cs \
b/src/Transport/Failover/FailoverTransport.cs index f14a927..ce78cc1 100644
--- a/src/Transport/Failover/FailoverTransport.cs
+++ b/src/Transport/Failover/FailoverTransport.cs
@@ -94,9 +94,10 @@ namespace Apache.NMS.ActiveMQ.Transport.Failover
     	private List<Uri> priorityList = new List<Uri>();
     	private bool priorityBackupAvailable = false;
         private String sslProtocol = null;
+        private string nestedExtraQueryOptions;
 
-		// Not Sure how to work these back in with all the changes.
-		//private int asyncTimeout = 45000;
+        // Not Sure how to work these back in with all the changes.
+        //private int asyncTimeout = 45000;
         //private bool asyncConnect = false;
 
         public FailoverTransport()
@@ -1177,7 +1178,7 @@ namespace Apache.NMS.ActiveMQ.Transport.Failover
 	                            // URI from the pool until next time around.
 	                            if (transport == null) 
 								{
-	                                uri = iter.Current;
+	                                uri = AddExtraQueryOptions(iter.Current);
 	                                transport = TransportFactory.CompositeConnect(uri);
 	                            }
 
@@ -1310,14 +1311,14 @@ namespace Apache.NMS.ActiveMQ.Transport.Failover
                         }
                     }
 
-                    foreach(Uri uri in connectList)
+                    foreach(Uri u in connectList)
                     {
 						if (disposed)
 						{
 							break;
 						}
-
-                        if(ConnectedTransportURI != null && \
!ConnectedTransportURI.Equals(uri)) +                        Uri uri = \
AddExtraQueryOptions(u); +                        if (ConnectedTransportURI != null \
&& !ConnectedTransportURI.Equals(uri))  {
                             try
                             {
@@ -1712,5 +1713,35 @@ namespace Apache.NMS.ActiveMQ.Transport.Failover
 
 	        return result;
 	    }
+
+        public void SetNestedExtraQueryOptions(String nestedExtraQueryOptions)
+        {
+            this.nestedExtraQueryOptions = nestedExtraQueryOptions;
+        }
+
+        private Uri AddExtraQueryOptions(Uri uri)
+        {
+            try
+            {
+                if (!string.IsNullOrEmpty(nestedExtraQueryOptions))
+                {
+                    if (uri.Query == null)
+                    {
+                        uri = URISupport.CreateUriWithQuery(uri, \
nestedExtraQueryOptions); +                    }
+                    else
+                    {
+                        uri = URISupport.CreateUriWithQuery(uri, uri.Query + "&" + \
nestedExtraQueryOptions); +                    }
+                    Tracer.Info($"URI with nested parameter is {uri.ToString()}");
+                }
+            }
+            catch (UriFormatException e)
+            {
+                Tracer.Error(e.Message);
+                throw;
+            }
+            return uri;
+        }
     }
 }
diff --git a/src/Transport/Failover/FailoverTransportFactory.cs \
b/src/Transport/Failover/FailoverTransportFactory.cs index 504d07b..b5740f0 100644
--- a/src/Transport/Failover/FailoverTransportFactory.cs
+++ b/src/Transport/Failover/FailoverTransportFactory.cs
@@ -55,7 +55,15 @@ namespace Apache.NMS.ActiveMQ.Transport.Failover
 			StringDictionary options = compositData.Parameters;
 			FailoverTransport transport = CreateTransport(options);
 			transport.Add(false, compositData.Components);
-			return transport;
+            try
+            {
+                transport.SetNestedExtraQueryOptions(URISupport.CreateQueryString(URISupport.GetProperties(options, \
"nested."))); +            }
+            catch (Exception e)
+            {
+				Tracer.Error($"Error in setting nested parameters {e.Message}");
+            }
+            return transport;
 		}
 
 		protected FailoverTransport CreateTransport(StringDictionary parameters)
diff --git a/test/Transport/failover/FailoverTransportTest.cs \
b/test/Transport/failover/FailoverTransportTest.cs index ec3cc67..4bdfb51 100644
--- a/test/Transport/failover/FailoverTransportTest.cs
+++ b/test/Transport/failover/FailoverTransportTest.cs
@@ -162,8 +162,36 @@ namespace Apache.NMS.ActiveMQ.Test
 				Assert.IsTrue(failover.IsConnected);
 			}
 		}
+        [Test]
+        public void FailoverTransportWithNestedParametersTest()
+        {
+            Uri uri = new \
Uri("failover:(mock://localhost:61616)?transport.randomize=false&transport.backup=true \
&nested.transport.failOnSendMessage=true&nested.transport.numSentMessagesBeforeFail=20");
 +            FailoverTransportFactory factory = new FailoverTransportFactory();
 
-		[Test]
+            using (ITransport transport = factory.CreateTransport(uri))
+            {
+                Assert.IsNotNull(transport);
+                transport.CommandAsync = OnCommand;
+                transport.Exception = OnException;
+                transport.Resumed = OnResumed;
+                transport.Interrupted = OnInterrupted;
+
+                FailoverTransport failover = \
transport.Narrow(typeof(FailoverTransport)) as FailoverTransport; +                \
Assert.IsNotNull(failover); +                Assert.IsFalse(failover.Randomize);
+                Assert.IsTrue(failover.Backup);
+
+                transport.Start();
+                Thread.Sleep(1000);
+                Assert.IsTrue(failover.IsConnected);
+
+                MockTransport mock = transport.Narrow(typeof(MockTransport)) as \
MockTransport; +                Assert.IsNotNull(mock);
+                Assert.IsTrue(mock.FailOnSendMessage);
+                Assert.AreEqual(20,mock.NumSentMessagesBeforeFail);
+            }
+        }
+        [Test]
 		public void FailoverTransportCreateFailOnCreateTest()
 		{
 			Uri uri = new Uri("failover:(mock://localhost:61616?transport.failOnCreate=true)?" \
+


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic