fix and test updates for: https://issues.apache.org/jira/browse/AMQNET-416
diff --git a/src/main/csharp/NetTxConnection.cs b/src/main/csharp/NetTxConnection.cs
index d42e83c..114e7b0 100644
--- a/src/main/csharp/NetTxConnection.cs
+++ b/src/main/csharp/NetTxConnection.cs
@@ -32,6 +32,7 @@
     public class NetTxConnection : Connection, INetTxConnection
     {
         private NetTxRecoveryPolicy recoveryPolicy = new NetTxRecoveryPolicy();
+        private Guid configuredResourceManagerId = Guid.Empty;
 
         public NetTxConnection(Uri connectionUri, ITransport transport, IdGenerator clientIdGenerator)
             : base(connectionUri, transport, clientIdGenerator)
@@ -62,9 +63,19 @@
             set { this.recoveryPolicy = value; }
         }
 
+        public Guid ConfiguredResourceManagerId
+        {
+            get { return this.configuredResourceManagerId; }
+            set { this.configuredResourceManagerId = value; }
+        }
+
         internal Guid ResourceManagerGuid
         {
-            get { return GuidFromId(this.ResourceManagerId); }
+            get
+            {
+                return ConfiguredResourceManagerId != Guid.Empty ? 
+                    ConfiguredResourceManagerId : GuidFromId(ResourceManagerId);
+            }
         }
 
         private static Guid GuidFromId(string id)
diff --git a/src/main/csharp/NetTxConnectionFactory.cs b/src/main/csharp/NetTxConnectionFactory.cs
index 09ce90c..49ab30b 100644
--- a/src/main/csharp/NetTxConnectionFactory.cs
+++ b/src/main/csharp/NetTxConnectionFactory.cs
@@ -26,6 +26,7 @@
     public class NetTxConnectionFactory : ConnectionFactory, INetTxConnectionFactory
     {
         private NetTxRecoveryPolicy recoveryPolicy = new NetTxRecoveryPolicy();
+        private Guid configuredResourceManagerId = Guid.Empty;
 
         public NetTxConnectionFactory() : base(GetDefaultBrokerUrl())
         {
@@ -50,6 +51,12 @@
         {
         }
 
+        public String ConfiguredResourceManagerId
+        {
+            get { return this.configuredResourceManagerId.ToString(); }
+            set { this.configuredResourceManagerId = new Guid(value); }
+        }
+
         public INetTxConnection CreateNetTxConnection()
         {
             return (INetTxConnection) base.CreateActiveMQConnection();
@@ -65,6 +72,7 @@
             NetTxConnection connection = new NetTxConnection(this.BrokerUri, transport, this.ClientIdGenerator);
 
             connection.RecoveryPolicy = this.recoveryPolicy.Clone() as NetTxRecoveryPolicy;
+            connection.ConfiguredResourceManagerId = this.configuredResourceManagerId;
 
             return connection;
         }
diff --git a/src/test/csharp/DtcBasicTransactionsTest.cs b/src/test/csharp/DtcBasicTransactionsTest.cs
index 8977461..88ebf5f 100644
--- a/src/test/csharp/DtcBasicTransactionsTest.cs
+++ b/src/test/csharp/DtcBasicTransactionsTest.cs
@@ -15,6 +15,7 @@
  * limitations under the License.

  */

 

+using System;

 using System.Threading;

 using Apache.NMS.ActiveMQ.Transactions;

 using NUnit.Framework;

@@ -25,12 +26,21 @@
     [Category("Manual")]

     class DtcBasicTransactionsTest : DtcTransactionsTestSupport

     {

+        private NetTxConnectionFactory factory = null;

+

+        [SetUp]

+        public override void SetUp()

+        {

+            base.SetUp();

+

+            this.factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

+            this.factory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();

+        }

+

         [Test]

         [ExpectedException("Apache.NMS.NMSException")]

         public void TestSessionCreateFailsWithInvalidLogLocation()

         {

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -49,8 +59,6 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -75,8 +83,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

diff --git a/src/test/csharp/DtcConsumerTransactionsTest.cs b/src/test/csharp/DtcConsumerTransactionsTest.cs
index 0720c20..ccce80f 100644
--- a/src/test/csharp/DtcConsumerTransactionsTest.cs
+++ b/src/test/csharp/DtcConsumerTransactionsTest.cs
@@ -31,6 +31,17 @@
     [Category("Manual")]

     class DtcConsumerTransactionsTest : DtcTransactionsTestSupport

     {

+        private NetTxConnectionFactory factory = null;

+

+        [SetUp]

+        public override void SetUp()

+        {

+            base.SetUp();

+

+            this.factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

+            this.factory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();

+        }

+

         [Test]

         public void TestRedelivered()

         {

@@ -39,7 +50,6 @@
             PurgeAndFillQueue();

 

             // receive just one

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.Start();

@@ -103,7 +113,6 @@
             PurgeDatabase();

             PurgeAndFillQueue(messageCount);

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.Start();

@@ -175,7 +184,6 @@
             PurgeDatabase();

             PurgeAndFillQueue(messageCount);

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.Start();

@@ -246,7 +254,6 @@
             PurgeDatabase();

             PurgeAndFillQueue(messageCount);

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 // allow no redelivery so that message immediatly goes to the DLQ if first read fails

@@ -314,8 +321,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -348,8 +353,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -382,8 +385,6 @@
             PurgeDatabase();

             PurgeAndFillQueue(5 * MSG_COUNT);

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -409,8 +410,10 @@
         public void TestConsumeWithDBInsertLogLocation()

         {

             const string logLocation = @".\RecoveryDir";

-            const string newConnectionUri =

-                connectionURI + "?nms.RecoveryPolicy.RecoveryLogger.Location=" + logLocation;

+            string newConnectionUri =

+                connectionURI + "?nms.RecoveryPolicy.RecoveryLogger.Location=" + logLocation +

+                                "&nms.configuredResourceManagerId=" + 

+                                factory.ConfiguredResourceManagerId;

 

             // Test initialize - Fills in queue with data to send and clears the DB.

             PurgeDatabase();

@@ -423,7 +426,7 @@
 

             Directory.CreateDirectory(logLocation);

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));

+            factory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));

 

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

@@ -458,8 +461,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -484,8 +485,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -515,8 +514,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 ITransport transport = (connection as Connection).ITransport;

@@ -549,8 +546,6 @@
             PurgeDatabase();

             PurgeAndFillQueue();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 ITransport transport = (connection as Connection).ITransport;

@@ -589,8 +584,6 @@
             PurgeDatabase();

             PurgeAndFillQueue(MSG_COUNT * BATCH_COUNT);

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             using (NetTxSession session = connection.CreateNetTxSession() as NetTxSession)

             {

diff --git a/src/test/csharp/DtcProducerTransactionsTest.cs b/src/test/csharp/DtcProducerTransactionsTest.cs
index ae29eba..19f9661 100644
--- a/src/test/csharp/DtcProducerTransactionsTest.cs
+++ b/src/test/csharp/DtcProducerTransactionsTest.cs
@@ -15,6 +15,7 @@
  * limitations under the License.

  */

 

+using System;

 using System.IO;

 using System.Threading;

 using Apache.NMS.ActiveMQ.Transactions;

@@ -28,14 +29,23 @@
     [Category("Manual")]

     class DtcProducerTransactionsTest : DtcTransactionsTestSupport

     {

+        private NetTxConnectionFactory factory = null;

+

+        [SetUp]

+        public override void SetUp()

+        {

+            base.SetUp();

+

+            this.factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

+            this.factory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();

+        }

+

         [Test]

         public void TestRecoverAfterFailOnTransactionCommit()

         {

             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -67,8 +77,6 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -100,8 +108,7 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-            NetTxConnectionFactory netTxFactory = factory as NetTxConnectionFactory;

+            NetTxConnectionFactory netTxFactory = factory;

             RecoveryFileLogger logger = netTxFactory.RecoveryPolicy.RecoveryLogger as RecoveryFileLogger;

             string logDirectory = logger.Location;

 

@@ -142,10 +149,12 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            const string newConnectionUri = 

-                connectionURI + "?nms.RecoveryPolicy.RecoveryLoggerType=harness";

+            string newConnectionUri = 

+                connectionURI + "?nms.RecoveryPolicy.RecoveryLoggerType=harness" +

+                                "&nms.configuredResourceManagerId=" +

+                                factory.ConfiguredResourceManagerId;

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));

+            factory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));

 

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

@@ -177,8 +186,6 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -207,8 +214,6 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -237,8 +242,6 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -262,8 +265,6 @@
             // Test initialize - Fills in DB with data to send.

             PrepareDatabase();

 

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -292,8 +293,6 @@
         [Test]

         public void TestIterativeTransactedProduceWithDBDelete()

         {

-            INetTxConnectionFactory factory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));

-

             using (INetTxConnection connection = factory.CreateNetTxConnection())

             {

                 connection.ExceptionListener += this.OnException;

@@ -321,6 +320,5 @@
             // check messages are present in the queue

             VerifyBrokerQueueCount(MSG_COUNT * 5);

         }

-

     }

 }