You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2011/07/08 21:40:54 UTC

svn commit: r1144452 - in /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x: ./ src/main/csharp/ src/main/csharp/Commands/ src/main/csharp/Util/ src/test/csharp/

Author: tabish
Date: Fri Jul  8 19:40:53 2011
New Revision: 1144452

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

Added:
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/AdvisoryConsumer.cs
      - copied unchanged from r1144406, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/AdvisoryConsumer.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/ConnectionFailedException.cs
      - copied unchanged from r1144406, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/ConnectionFailedException.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Util/AdvisorySupport.cs
      - copied unchanged from r1144406, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/AdvisorySupport.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/test/csharp/TempDestinationTest.cs
      - copied unchanged from r1144406, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/TempDestinationTest.cs
Modified:
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/   (props changed)
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Commands/ActiveMQDestination.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Connection.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/ConnectionFactory.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageProducer.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Session.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq-test.csproj   (contents, props changed)
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq.csproj   (contents, props changed)

Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul  8 19:40:53 2011
@@ -1,2 +1,3 @@
 /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.0.0:692591,693525
 /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.1.0:788230,788233,790183
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk:1144402-1144406

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Commands/ActiveMQDestination.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Commands/ActiveMQDestination.cs?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Commands/ActiveMQDestination.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Commands/ActiveMQDestination.cs Fri Jul  8 19:40:53 2011
@@ -17,6 +17,7 @@
 
 using System;
 using System.Collections.Specialized;
+using System.Collections.Generic;
 using Apache.NMS.Util;
 
 namespace Apache.NMS.ActiveMQ.Commands
@@ -423,6 +424,30 @@ namespace Apache.NMS.ActiveMQ.Commands
 			}
 		}
 
+        /// <summary>
+        /// Gets the Destination Type of this Destination as a String value which is one
+        /// of {Queue,Topic,TempQueue,TempTopic}.
+        /// </summary>
+        /// <returns>
+        /// The Destination Type as a String.
+        /// </returns>
+        public String GetDestinationTypeAsString()
+        {
+            switch(GetDestinationType())
+            {
+                case ACTIVEMQ_QUEUE:
+                    return "Queue";
+                case ACTIVEMQ_TOPIC:
+                    return "Topic";
+                case ACTIVEMQ_TEMPORARY_QUEUE:
+                    return "TempQueue";
+                case ACTIVEMQ_TEMPORARY_TOPIC:
+                    return "TempTopic";
+                default:
+                    throw new NMSException("Invalid destination type: " + GetDestinationType());
+            }
+        }
+
 		/// <summary>
 		/// Returns true if this destination represents a collection of
 		/// destinations; allowing a set of destinations to be published to or subscribed
@@ -439,30 +464,32 @@ namespace Apache.NMS.ActiveMQ.Commands
 			}
 		}
 
-		/*public List GetChildDestinations() {
-		 List answer = new ArrayList();
-		 StringTokenizer iter = new StringTokenizer(physicalName, COMPOSITE_SEPARATOR);
-		 while (iter.hasMoreTokens()) {
-		 String name = iter.nextToken();
-		 Destination child = null;
-		 if (name.StartsWith(QUEUE_PREFIX)) {
-		 child = new ActiveMQQueue(name.Substring(QUEUE_PREFIX.Length));
-		 }
-		 else if (name.StartsWith(TOPIC_PREFIX)) {
-		 child = new ActiveMQTopic(name.Substring(TOPIC_PREFIX.Length));
-		 }
-		 else {
-		 child = createDestination(name);
-		 }
-		 answer.add(child);
-		 }
-		 if (answer.size() == 1) {
-		 // lets put ourselves inside the collection
-		 // as we are not really a composite destination
-		 answer.set(0, this);
-		 }
-		 return answer;
-		 }*/
+        public ActiveMQDestination[] GetCompositeDestinations()
+        {
+            if (IsComposite)
+            {
+                LinkedList<String> list = new LinkedList<String>();
+                String[] composites = physicalName.Split(COMPOSITE_SEPARATOR.ToCharArray());
+                foreach(String composite in composites)
+                {
+                    if (String.IsNullOrEmpty(composite.Trim()))
+                    {
+                        continue;
+                    }
+                    list.AddLast(composite.Trim());
+                }
+                ActiveMQDestination[] compositeDestinations = new ActiveMQDestination[list.Count];
+                int counter = 0;
+                foreach(String destination in list)
+                {
+                    compositeDestinations[counter++] = CreateDestination(destination);
+                }
+
+                return compositeDestinations;
+            }
+
+            return new ActiveMQDestination[0];
+        }
 
 		/// <summary>
 		/// </summary>

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Connection.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Connection.cs?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Connection.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Connection.cs Fri Jul  8 19:40:53 2011
@@ -18,6 +18,7 @@
 using System;
 using System.Diagnostics;
 using System.Collections;
+using System.Collections.Generic;
 using System.Threading;
 using Apache.NMS.ActiveMQ.Commands;
 using Apache.NMS.ActiveMQ.Threads;
@@ -46,6 +47,7 @@ namespace Apache.NMS.ActiveMQ
 		private bool dispatchAsync = true;
 		private int producerWindowSize = 0;
 		private bool messagePrioritySupported=true;
+        private bool watchTopicAdviosires = true;
 
 		private bool userSpecifiedClientID;
 		private readonly Uri brokerUri;
@@ -58,6 +60,7 @@ namespace Apache.NMS.ActiveMQ
 		private readonly IList sessions = ArrayList.Synchronized(new ArrayList());
 		private readonly IDictionary producers = Hashtable.Synchronized(new Hashtable());
 		private readonly IDictionary dispatchers = Hashtable.Synchronized(new Hashtable());
+        private readonly IDictionary tempDests = Hashtable.Synchronized(new Hashtable());
 		private readonly object myLock = new object();
 		private readonly Atomic<bool> connected = new Atomic<bool>(false);
 		private readonly Atomic<bool> closed = new Atomic<bool>(false);
@@ -74,9 +77,11 @@ namespace Apache.NMS.ActiveMQ
 		private PrefetchPolicy prefetchPolicy = new PrefetchPolicy();
 		private ICompressionPolicy compressionPolicy = new CompressionPolicy();
 		private readonly IdGenerator clientIdGenerator;
+        private int consumerIdCounter = 0;
 		private volatile CountDownLatch transportInterruptionProcessingComplete;
 		private readonly MessageTransformation messageTransformation;
 		private readonly ThreadPoolExecutor executor = new ThreadPoolExecutor();
+        private AdvisoryConsumer advisoryConsumer = null;
 
 		public Connection(Uri connectionUri, ITransport transport, IdGenerator clientIdGenerator)
 		{
@@ -319,6 +324,12 @@ namespace Apache.NMS.ActiveMQ
 			set { this.dispatchAsync = value; }
 		}
 
+        public bool WatchTopicAdvisories
+        {
+            get { return this.watchTopicAdviosires; }
+            set { this.watchTopicAdviosires = value; }
+        }
+
 		public string ClientId
 		{
 			get { return info.ClientId; }
@@ -535,6 +546,12 @@ namespace Apache.NMS.ActiveMQ
 					Tracer.Info("Connection.Close(): Closing Connection Now.");
 					this.closing.Value = true;
 
+                    if(this.advisoryConsumer != null)
+                    {
+                        this.advisoryConsumer.Dispose();
+                        this.advisoryConsumer = null;
+                    }
+
 					lock(sessions.SyncRoot)
 					{
 						foreach(Session session in sessions)
@@ -544,6 +561,11 @@ namespace Apache.NMS.ActiveMQ
 					}
 					sessions.Clear();
 
+                    foreach(ActiveMQTempDestination dest in this.tempDests.Values)
+                    {
+                        dest.Delete();
+                    }
+
 					// Connected is true only when we've successfully sent our ConnectionInfo
 					// to the broker, so if we haven't announced ourselves there's no need to
 					// inform the broker of a remove, and if the transport is failed, why bother.
@@ -731,6 +753,13 @@ namespace Apache.NMS.ActiveMQ
 										if(!(response is ExceptionResponse))
 										{
 											connected.Value = true;
+                                            if(this.watchTopicAdviosires)
+                                            {
+                                                ConsumerId id = new ConsumerId(
+                                                    new SessionId(info.ConnectionId, -1),
+                                                    Interlocked.Increment(ref this.consumerIdCounter));
+                                                this.advisoryConsumer = new AdvisoryConsumer(this, id);
+											}
 										}
 									}
 								}
@@ -1088,6 +1117,7 @@ namespace Apache.NMS.ActiveMQ
 			this.SyncRequest(command);
 
 			destination.Connection = this;
+            this.AddTempDestination(destination);
 
 			return destination;
 		}
@@ -1098,6 +1128,19 @@ namespace Apache.NMS.ActiveMQ
 
 		public void DeleteTemporaryDestination(IDestination destination)
 		{
+            CheckClosedOrFailed();
+
+            ActiveMQTempDestination temp = destination as ActiveMQTempDestination;
+
+            foreach(Session session in this.sessions)
+            {
+                if(session.IsInUse(temp))
+                {
+                    throw new NMSException("A consumer is consuming from the temporary destination");
+                }
+            }
+
+            this.tempDests.Remove(destination as ActiveMQTempDestination);
 			this.DeleteDestination(destination);
 		}
 
@@ -1182,5 +1225,49 @@ namespace Apache.NMS.ActiveMQ
 				}
 			}
 		}
+
+        internal void AddTempDestination(ActiveMQTempDestination dest)
+        {
+            // .NET lacks a putIfAbsent operation for Maps.
+            lock(tempDests.SyncRoot)
+            {
+                if(!this.tempDests.Contains(dest))
+                {
+                    this.tempDests.Add(dest, dest);
+                }
+            }
+        }
+
+        internal void RemoveTempDestination(ActiveMQTempDestination dest)
+        {
+            this.tempDests.Remove(dest);
+        }
+
+        internal bool IsTempDestinationActive(ActiveMQTempDestination dest)
+        {
+            if(this.advisoryConsumer == null)
+            {
+                return true;
+            }
+
+            return this.tempDests.Contains(dest);
+        }
+
+        protected void CheckClosedOrFailed()
+        {
+            CheckClosed();
+            if (transportFailed.Value)
+            {
+                throw new ConnectionFailedException(firstFailureError.Message);
+            }
+        }
+
+        protected void CheckClosed()
+        {
+            if(closed.Value)
+            {
+                throw new ConnectionClosedException();
+            }
+        }
 	}
 }

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/ConnectionFactory.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/ConnectionFactory.cs?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/ConnectionFactory.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/ConnectionFactory.cs Fri Jul  8 19:40:53 2011
@@ -51,6 +51,7 @@ namespace Apache.NMS.ActiveMQ
 		private AcknowledgementMode acknowledgementMode = AcknowledgementMode.AutoAcknowledge;
 		private TimeSpan requestTimeout = NMSConstants.defaultRequestTimeout;
 		private bool messagePrioritySupported=true;
+        private bool watchTopicAdvisories=true;
 
 		private IRedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
 		private PrefetchPolicy prefetchPolicy = new PrefetchPolicy();
@@ -267,6 +268,12 @@ namespace Apache.NMS.ActiveMQ
 			set { this.dispatchAsync = value; }
 		}
 
+        public bool WatchTopicAdvisories
+        {
+            get { return this.watchTopicAdvisories; }
+            set { this.watchTopicAdvisories = value; }
+        }
+
 		public bool MessagePrioritySupported
 		{
 			get { return this.messagePrioritySupported; }
@@ -410,6 +417,7 @@ namespace Apache.NMS.ActiveMQ
 			connection.CompressionPolicy = this.compressionPolicy.Clone() as ICompressionPolicy;
 			connection.ConsumerTransformer = this.consumerTransformer;
 			connection.ProducerTransformer = this.producerTransformer;
+            connection.WatchTopicAdvisories = this.watchTopicAdvisories;
 		}
 
 		protected static void ExceptionHandler(Exception ex)

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageConsumer.cs Fri Jul  8 19:40:53 2011
@@ -74,7 +74,32 @@ namespace Apache.NMS.ActiveMQ
 			if(destination == null)
 			{
 				throw new InvalidDestinationException("Consumer cannot receive on Null Destinations.");
-			}
+            }
+            else if(destination.PhysicalName == null)
+            {
+                throw new InvalidDestinationException("The destination object was not given a physical name.");
+            }
+            else if (destination.IsTemporary)
+            {
+                String physicalName = destination.PhysicalName;
+
+                if(String.IsNullOrEmpty(physicalName))
+                {
+                    throw new InvalidDestinationException("Physical name of Destination should be valid: " + destination);
+                }
+    
+                String connectionID = session.Connection.ConnectionId.Value;
+
+                if(physicalName.IndexOf(connectionID) < 0)
+                {
+                    throw new InvalidDestinationException("Cannot use a Temporary destination from another Connection");
+                }
+    
+                if(!session.Connection.IsTempDestinationActive(destination as ActiveMQTempDestination))
+                {
+                    throw new InvalidDestinationException("Cannot use a Temporary destination that has been deleted");
+                }
+            }
 
 			this.session = session;
 			this.redeliveryPolicy = this.session.Connection.RedeliveryPolicy;
@@ -1201,6 +1226,11 @@ namespace Apache.NMS.ActiveMQ
 			get { return this.session.IsClientAcknowledge; }
 		}
 
+        internal bool IsInUse(ActiveMQTempDestination dest)
+        {
+            return this.info.Destination.Equals(dest);
+        }
+
 		#region Nested ISyncronization Types
 
 		class MessageConsumerSynchronization : ISynchronization

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageProducer.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageProducer.cs?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageProducer.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/MessageProducer.cs Fri Jul  8 19:40:53 2011
@@ -255,7 +255,7 @@ namespace Apache.NMS.ActiveMQ
 					throw new ConnectionClosedException();
 				}
 
-				session.DoSend(activeMessage, this, this.usage, this.RequestTimeout);
+				session.DoSend(dest, activeMessage, this, this.usage, this.RequestTimeout);
 			}
 		}
 

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Session.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Session.cs?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Session.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/src/main/csharp/Session.cs Fri Jul  8 19:40:53 2011
@@ -664,10 +664,16 @@ namespace Apache.NMS.ActiveMQ
 
         #endregion
 
-        internal void DoSend( ActiveMQMessage message, MessageProducer producer, MemoryUsage producerWindow, TimeSpan sendTimeout )
+        internal void DoSend(ActiveMQDestination destination, ActiveMQMessage message,
+                             MessageProducer producer, MemoryUsage producerWindow, TimeSpan sendTimeout)
         {
             ActiveMQMessage msg = message;
 
+            if(destination.IsTemporary && !connection.IsTempDestinationActive(destination as ActiveMQTempDestination))
+            {
+                throw new InvalidDestinationException("Cannot publish to a deleted Destination: " + destination);
+            }
+
             if(IsTransacted)
             {
                 DoStartTransaction();
@@ -969,5 +975,17 @@ namespace Apache.NMS.ActiveMQ
             }
         }
 
+        internal bool IsInUse(ActiveMQTempDestination dest)
+        {
+            foreach(MessageConsumer consumer in this.consumers.Values)
+            {
+                if(consumer.IsInUse(dest))
+                {
+                    return true;
+                }
+            }
+
+            return false;
+        }
     }
 }

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq-test.csproj
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq-test.csproj?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq-test.csproj (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq-test.csproj Fri Jul  8 19:40:53 2011
@@ -2,7 +2,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProductVersion>9.0.30729</ProductVersion>
+    <ProductVersion>9.0.21022</ProductVersion>
     <SchemaVersion>2.0</SchemaVersion>
     <ProjectGuid>{EB943C69-2C9B-45E7-B95B-FB916E7057ED}</ProjectGuid>
     <OutputType>Library</OutputType>
@@ -97,6 +97,7 @@
     <Compile Include="src\test\csharp\QueueBrowserTests.cs" />
     <Compile Include="src\test\csharp\QueueConsumerPriorityTest.cs" />
     <Compile Include="src\test\csharp\RollbackRedeliveryTest.cs" />
+    <Compile Include="src\test\csharp\TempDestinationTest.cs" />
     <Compile Include="src\test\csharp\Threads\CompositeTaskRunnerTest.cs" />
     <Compile Include="src\test\csharp\Threads\DedicatedTaskRunnerTest.cs" />
     <Compile Include="src\test\csharp\Threads\ThreadPoolExecutorTest.cs" />

Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq-test.csproj
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul  8 19:40:53 2011
@@ -1 +1,2 @@
 /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.1.0/vs2008-activemq-test.csproj:788230,788233,790183
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/vs2008-activemq-test.csproj:1144402-1144406

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq.csproj
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq.csproj?rev=1144452&r1=1144451&r2=1144452&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq.csproj (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq.csproj Fri Jul  8 19:40:53 2011
@@ -68,6 +68,7 @@
     <Reference Include="System.Transactions" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="src\main\csharp\AdvisoryConsumer.cs" />
     <Compile Include="src\main\csharp\BrokerException.cs">
       <SubType>Code</SubType>
     </Compile>
@@ -288,6 +289,7 @@
     <Compile Include="src\main\csharp\ConnectionFactory.cs">
       <SubType>Code</SubType>
     </Compile>
+    <Compile Include="src\main\csharp\ConnectionFailedException.cs" />
     <Compile Include="src\main\csharp\ConnectionMetaData.cs" />
     <Compile Include="src\main\csharp\ConsumerClosedException.cs">
       <SubType>Code</SubType>
@@ -1017,6 +1019,7 @@
       <SubType>Code</SubType>
     </Compile>
     <Compile Include="src\main\csharp\Util\ActiveMQMessageTransformation.cs" />
+    <Compile Include="src\main\csharp\Util\AdvisorySupport.cs" />
     <Compile Include="src\main\csharp\Util\FactoryAttribute.cs" />
     <Compile Include="src\main\csharp\Util\FactoryFinder.cs" />
     <Compile Include="src\main\csharp\Util\FifoMessageDispatchChannel.cs" />

Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.5.x/vs2008-activemq.csproj
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Fri Jul  8 19:40:53 2011
@@ -1 +1,2 @@
 /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.1.0/vs2008-activemq.csproj:788230,788233,790183
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/vs2008-activemq.csproj:1144402-1144406