activemq-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From tab...@apache.org
Subject svn commit: r1028493 - in /activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp: Connection.cs ConnectionFactory.cs Session.cs
Date Thu, 28 Oct 2010 21:28:51 GMT
Author: tabish
Date: Thu Oct 28 21:28:51 2010
New Revision: 1028493

URL: http://svn.apache.org/viewvc?rev=1028493&view=rev
Log:
Refactor the Creation methods to make extending these types simpler.

Modified:
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/ConnectionFactory.cs
    activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs?rev=1028493&r1=1028492&r2=1028493&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Connection.cs Thu Oct
28 21:28:51 2010
@@ -17,7 +17,6 @@
 
 using System;
 using System.Collections;
-using System.Collections.Specialized;
 using System.Threading;
 using Apache.NMS.ActiveMQ.Commands;
 using Apache.NMS.ActiveMQ.Transport;
@@ -52,6 +51,7 @@ namespace Apache.NMS.ActiveMQ
         private readonly ConnectionInfo info;
 		private TimeSpan requestTimeout; // from connection factory
         private BrokerInfo brokerInfo; // from broker
+        private readonly CountDownLatch brokerInfoReceived = new CountDownLatch(1);
         private WireFormatInfo brokerWireFormatInfo; // from broker
         private readonly IList sessions = ArrayList.Synchronized(new ArrayList());
         private readonly IDictionary producers = Hashtable.Synchronized(new Hashtable());
@@ -347,6 +347,15 @@ namespace Apache.NMS.ActiveMQ
             get { return brokerWireFormatInfo; }
         }
 
+        public String ResourceManagerId
+        {
+            get
+            {
+                this.brokerInfoReceived.await();
+                return brokerInfo.BrokerId.Value;
+            }
+        }
+
         /// <summary>
         /// Get/or set the redelivery policy for this connection.
         /// </summary>
@@ -427,7 +436,7 @@ namespace Apache.NMS.ActiveMQ
         /// </summary>
         public ISession CreateSession()
         {
-            return CreateSession(acknowledgementMode);
+            return CreateAtiveMQSession(acknowledgementMode);
         }
 
         /// <summary>
@@ -435,29 +444,21 @@ namespace Apache.NMS.ActiveMQ
         /// </summary>
         public ISession CreateSession(AcknowledgementMode sessionAcknowledgementMode)
         {
-            SessionInfo info = CreateSessionInfo(sessionAcknowledgementMode);
-            SyncRequest(info, this.RequestTimeout);
-            Session session = new Session(this, info, sessionAcknowledgementMode, this.dispatchAsync);
-
-            // Set propertieDs on session using parameters prefixed with "session."
-			if(!String.IsNullOrEmpty(brokerUri.Query) && !brokerUri.OriginalString.EndsWith(")"))
-			{
-				string query = brokerUri.Query.Substring(brokerUri.Query.LastIndexOf(")") + 1);					

-				StringDictionary options = URISupport.ParseQuery(query);
-				options = URISupport.GetProperties(options, "session.");
-	            URISupport.SetProperties(session, options);
-			}
-			
-			session.ConsumerTransformer = this.ConsumerTransformer;
-			session.ProducerTransformer = this.ProducerTransformer;
+            return CreateAtiveMQSession(sessionAcknowledgementMode);
+        }
 
-            if(IsStarted)
+        protected virtual Session CreateAtiveMQSession(AcknowledgementMode ackMode)
+        {
+            CheckConnected();
+            return new Session(this, NextSessionId, ackMode);
+        }
+
+        internal void AddSession(Session session)
+        {
+            if(!this.closing)
             {
-                session.Start();
+                sessions.Add(session);
             }
-
-            sessions.Add(session);
-            return session;
         }
 
         internal void RemoveSession(Session session)
@@ -700,6 +701,7 @@ namespace Apache.NMS.ActiveMQ
             else if(command is BrokerInfo)
             {
                 this.brokerInfo = (BrokerInfo) command;
+                this.brokerInfoReceived.countDown();
             }
             else if(command is ShutdownInfo)
             {
@@ -803,6 +805,8 @@ namespace Apache.NMS.ActiveMQ
 
         protected void OnException(ITransport sender, Exception exception)
         {
+            this.brokerInfoReceived.countDown();
+
             if(ExceptionListener != null && !this.closing)
             {
                 try
@@ -893,14 +897,9 @@ namespace Apache.NMS.ActiveMQ
             return id;
         }
 
-        private SessionInfo CreateSessionInfo(AcknowledgementMode sessionAcknowledgementMode)
+        protected SessionId NextSessionId
         {
-            SessionInfo answer = new SessionInfo();
-            SessionId sessionId = new SessionId();
-            sessionId.ConnectionId = info.ConnectionId.Value;
-            sessionId.Value = Interlocked.Increment(ref sessionCounter);
-            answer.SessionId = sessionId;
-            return answer;
+            get { return new SessionId(this.info.ConnectionId, Interlocked.Increment(ref
this.sessionCounter)); }
         }
 
         public ActiveMQTempDestination CreateTemporaryDestination(bool topic)

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/ConnectionFactory.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/ConnectionFactory.cs?rev=1028493&r1=1028492&r2=1028493&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/ConnectionFactory.cs
(original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/ConnectionFactory.cs
Thu Oct 28 21:28:51 2010
@@ -98,61 +98,76 @@ namespace Apache.NMS.ActiveMQ
 
 		public IConnection CreateConnection()
 		{
-			return CreateConnection(connectionUserName, connectionPassword);
+			return CreateActiveMQConnection();
 		}
 
 		public IConnection CreateConnection(string userName, string password)
 		{
-			Connection connection = null;
-
-			try
-			{
-				Tracer.InfoFormat("Connecting to: {0}", brokerUri.ToString());
-
-				ITransport transport = TransportFactory.CreateTransport(brokerUri);
-
-				connection = new Connection(brokerUri, transport, this.ClientIdGenerator);
-
-				ConfigureConnection(connection);
-
-				connection.UserName = userName;
-				connection.Password = password;
-
-				if(this.clientId != null)
-				{
-					connection.DefaultClientId = this.clientId;
-				}
-
-				connection.ITransport.Start();
-
-				return connection;
-			}
-			catch(NMSException e)
-			{
-				try
-				{
-					connection.Close();
-				}
-				catch
-				{
-				}
-
-				throw e;
-			}
-			catch(Exception e)
-			{
-				try
-				{
-					connection.Close();
-				}
-				catch
-				{
-				}
-
-				throw NMSExceptionSupport.Create("Could not connect to broker URL: " + this.brokerUri
+ ". Reason: " + e.Message, e);
-			}
+            return CreateActiveMQConnection(userName, password);
 		}
 
+        protected virtual Connection CreateActiveMQConnection()
+        {
+            return CreateActiveMQConnection(connectionUserName, connectionPassword);
+        }
+
+        protected virtual Connection CreateActiveMQConnection(string userName, string password)
+        {
+            Connection connection = null;
+
+            try
+            {
+                Tracer.InfoFormat("Connecting to: {0}", brokerUri.ToString());
+
+                ITransport transport = TransportFactory.CreateTransport(brokerUri);
+
+                connection = CreateActiveMQConnection(transport);
+
+                ConfigureConnection(connection);
+
+                connection.UserName = userName;
+                connection.Password = password;
+
+                if(this.clientId != null)
+                {
+                    connection.DefaultClientId = this.clientId;
+                }
+
+                connection.ITransport.Start();
+
+                return connection;
+            }
+            catch(NMSException e)
+            {
+                try
+                {
+                    connection.Close();
+                }
+                catch
+                {
+                }
+
+                throw e;
+            }
+            catch(Exception e)
+            {
+                try
+                {
+                    connection.Close();
+                }
+                catch
+                {
+                }
+
+                throw NMSExceptionSupport.Create("Could not connect to broker URL: " + this.brokerUri
+ ". Reason: " + e.Message, e);
+            }
+        }
+
+        protected virtual Connection CreateActiveMQConnection(ITransport transport)
+        {
+            return new Connection(this.brokerUri, transport, this.ClientIdGenerator);
+        }
+
 		#region ConnectionFactory Properties
 
 		/// <summary>

Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs?rev=1028493&r1=1028492&r2=1028493&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Session.cs Thu Oct
28 21:28:51 2010
@@ -17,7 +17,9 @@
 
 using System;
 using System.Collections;
+using System.Collections.Specialized;
 using System.Threading;
+using Apache.NMS.Util;
 using Apache.NMS.ActiveMQ.Commands;
 using Apache.NMS.ActiveMQ.Util;
 
@@ -59,20 +61,44 @@ namespace Apache.NMS.ActiveMQ
 		private TimeSpan requestTimeout;
 		private readonly AcknowledgementMode acknowledgementMode;
 
-		public Session(Connection connection, SessionInfo info, AcknowledgementMode acknowledgementMode,
bool dispatchAsync)
+		public Session(Connection connection, SessionId sessionId, AcknowledgementMode acknowledgementMode)
 		{
+            this.info = new SessionInfo();
+            this.info.SessionId = sessionId;
 			this.connection = connection;
-			this.info = info;
+            this.connection.Oneway(this.info);
+
 			this.acknowledgementMode = acknowledgementMode;
 			this.requestTimeout = connection.RequestTimeout;
-			this.dispatchAsync = dispatchAsync;
+			this.dispatchAsync = connection.DispatchAsync;
 
 			if(acknowledgementMode == AcknowledgementMode.Transactional)
 			{
 				this.transactionContext = new TransactionContext(this);
 			}
 
+            Uri brokerUri = connection.BrokerUri;
+
+            // Set propertieDs on session using parameters prefixed with "session."
+            if(!String.IsNullOrEmpty(brokerUri.Query) && !brokerUri.OriginalString.EndsWith(")"))
+            {
+                string query = brokerUri.Query.Substring(brokerUri.Query.LastIndexOf(")")
+ 1);
+                StringDictionary options = URISupport.ParseQuery(query);
+                options = URISupport.GetProperties(options, "session.");
+                URISupport.SetProperties(this, options);
+            }
+
+            this.ConsumerTransformer = connection.ConsumerTransformer;
+            this.ProducerTransformer = connection.ProducerTransformer;
+
 			this.executor = new SessionExecutor(this, this.consumers);
+
+            if(connection.IsStarted)
+            {
+                this.Start();
+            }
+
+            connection.AddSession(this);
 		}
 
 		~Session()



Mime
View raw message