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 2009/12/22 18:01:17 UTC
svn commit: r893231 - in
/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x: ./
src/main/csharp/ src/main/csharp/Transport/ src/main/csharp/Transport/Mock/
src/main/csharp/Transport/Tcp/ src/main/csharp/Util/ src/test/csharp/
src/test/csharp/...
Author: tabish
Date: Tue Dec 22 17:01:16 2009
New Revision: 893231
URL: http://svn.apache.org/viewvc?rev=893231&view=rev
Log:
https://issues.apache.org/activemq/browse/AMQNET-212
https://issues.apache.org/activemq/browse/AMQNET-227
Merged changes from trunk code for next RC
Added:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/InactivityMonitor.cs
- copied unchanged from r893228, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Transport/InactivityMonitor.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Util/IdGenerator.cs
- copied unchanged from r893228, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/main/csharp/Util/IdGenerator.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/Transport/Inactivity/
- copied from r893228, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/Inactivity/
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/Transport/Inactivity/InactivityMonitorTest.cs
- copied unchanged from r893228, activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/src/test/csharp/Transport/Inactivity/InactivityMonitorTest.cs
Modified:
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/ (props changed)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/nant-common.xml (props changed)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Connection.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/ConnectionFactory.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Mock/MockTransport.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/NMSConnectionFactoryTest.cs
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq-test.csproj (contents, props changed)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.csproj (contents, props changed)
activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.sln (props changed)
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Dec 22 17:01:16 2009
@@ -1,3 +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:891917,892010-892308
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk:891917,892010-892308,892840-893228
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/nant-common.xml
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Dec 22 17:01:16 2009
@@ -1,2 +1,2 @@
/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.1.0/nant-common.xml:788230,788233,790183
-/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/nant-common.xml:891917,892010-892308
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/nant-common.xml:891917,892010-892308,892840-893228
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Connection.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Connection.cs?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Connection.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Connection.cs Tue Dec 22 17:01:16 2009
@@ -18,6 +18,7 @@
using System;
using System.Collections;
using System.Threading;
+using Apache.NMS.ActiveMQ.Util;
using Apache.NMS.ActiveMQ.Commands;
using Apache.NMS.ActiveMQ.Transport;
using Apache.NMS;
@@ -30,17 +31,10 @@
/// </summary>
public class Connection : IConnection
{
- private readonly Uri brokerUri;
- private ITransport transport;
- private readonly ConnectionInfo info;
+ private static readonly IdGenerator CONNECTION_ID_GENERATOR = new IdGenerator();
+
+ // Uri configurable options.
private AcknowledgementMode acknowledgementMode = AcknowledgementMode.AutoAcknowledge;
- private TimeSpan requestTimeout;
- private BrokerInfo brokerInfo; // from broker
- private WireFormatInfo brokerWireFormatInfo; // from broker
- 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 object myLock = new object();
private bool asyncSend = false;
private bool alwaysSyncSend = false;
private bool asyncClose = true;
@@ -49,6 +43,18 @@
private bool sendAcksAsync = false;
private bool dispatchAsync = true;
private int producerWindowSize = 0;
+
+ private bool userSpecifiedClientID;
+ private readonly Uri brokerUri;
+ private ITransport transport;
+ private ConnectionInfo info;
+ private TimeSpan requestTimeout;
+ private BrokerInfo brokerInfo; // from broker
+ private WireFormatInfo brokerWireFormatInfo; // from broker
+ 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 object myLock = new object();
private bool connected = false;
private bool closed = false;
private bool closing = false;
@@ -61,17 +67,25 @@
private IRedeliveryPolicy redeliveryPolicy;
private PrefetchPolicy prefetchPolicy = new PrefetchPolicy();
private ICompressionPolicy compressionPolicy = new CompressionPolicy();
+ private IdGenerator clientIdGenerator;
- public Connection(Uri connectionUri, ITransport transport, ConnectionInfo info)
+ public Connection(Uri connectionUri, ITransport transport, IdGenerator clientIdGenerator)
{
this.brokerUri = connectionUri;
- this.info = info;
this.requestTimeout = transport.RequestTimeout;
+ this.clientIdGenerator = clientIdGenerator;
+
this.transport = transport;
this.transport.Command = new CommandHandler(OnCommand);
this.transport.Exception = new ExceptionHandler(OnException);
this.transport.Interrupted = new InterruptedHandler(OnTransportInterrupted);
this.transport.Resumed = new ResumedHandler(OnTransportResumed);
+
+ ConnectionId id = new ConnectionId();
+ id.Value = CONNECTION_ID_GENERATOR.GenerateId();
+
+ this.info = new ConnectionInfo();
+ this.info.ConnectionId = id;
}
~Connection()
@@ -98,6 +112,18 @@
#region Properties
+ public String UserName
+ {
+ get { return this.info.UserName; }
+ set { this.info.UserName = value; }
+ }
+
+ public String Password
+ {
+ get { return this.info.Password; }
+ set { this.info.Password = value; }
+ }
+
/// <summary>
/// This property indicates what version of the Protocol we are using to
/// communicate with the Broker, if not set we return the lowest version
@@ -252,11 +278,26 @@
get { return info.ClientId; }
set
{
- if(connected)
+ if(this.connected)
{
throw new NMSException("You cannot change the ClientId once the Connection is connected");
}
- info.ClientId = value;
+
+ this.info.ClientId = value;
+ this.userSpecifiedClientID = true;
+ CheckConnected();
+ }
+ }
+
+ /// <summary>
+ /// The Default Client Id used if the ClientId property is not set explicity.
+ /// </summary>
+ public string DefaultClientId
+ {
+ set
+ {
+ this.info.ClientId = value;
+ this.userSpecifiedClientID = true;
}
}
@@ -576,6 +617,11 @@
if(!connected)
{
+ if(!this.userSpecifiedClientID)
+ {
+ this.info.ClientId = this.clientIdGenerator.GenerateId();
+ }
+
connected = true;
// now lets send the connection and see if we get an ack/nak
if(null == SyncRequest(info))
@@ -788,7 +834,7 @@
return id;
}
- protected SessionInfo CreateSessionInfo(AcknowledgementMode sessionAcknowledgementMode)
+ private SessionInfo CreateSessionInfo(AcknowledgementMode sessionAcknowledgementMode)
{
SessionInfo answer = new SessionInfo();
SessionId sessionId = new SessionId();
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/ConnectionFactory.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/ConnectionFactory.cs?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/ConnectionFactory.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/ConnectionFactory.cs Tue Dec 22 17:01:16 2009
@@ -16,6 +16,7 @@
*/
using System;
+using Apache.NMS.ActiveMQ.Util;
using Apache.NMS.ActiveMQ.Commands;
using Apache.NMS.ActiveMQ.Transport;
using Apache.NMS;
@@ -36,9 +37,19 @@
private Uri brokerUri;
private string connectionUserName;
private string connectionPassword;
- private string clientId;
+ private string clientId;
+ private string clientIdPrefix;
+ private IdGenerator clientIdGenerator;
+
private bool useCompression;
-
+ private bool copyMessageOnSend = true;
+ private bool dispatchAsync=true;
+ private bool asyncSend;
+ private bool asyncClose;
+ private bool alwaysSyncSend;
+ private bool sendAcksAsync=true;
+ private AcknowledgementMode acknowledgementMode = AcknowledgementMode.AutoAcknowledge;
+
private IRedeliveryPolicy redeliveryPolicy = new RedeliveryPolicy();
private PrefetchPolicy prefetchPolicy = new PrefetchPolicy();
private ICompressionPolicy compressionPolicy = new CompressionPolicy();
@@ -79,8 +90,8 @@
public ConnectionFactory(Uri brokerUri, string clientID)
{
- this.brokerUri = brokerUri;
- this.clientId = clientID;
+ this.BrokerUri = brokerUri;
+ this.ClientId = clientID;
}
public IConnection CreateConnection()
@@ -90,37 +101,60 @@
public IConnection CreateConnection(string userName, string password)
{
- // Strip off the activemq prefix, if it exists.
- Uri uri = new Uri(URISupport.stripPrefix(brokerUri.OriginalString, "activemq:"));
-
- Tracer.InfoFormat("Connecting to: {0}", uri.ToString());
+ Connection connection = null;
- ConnectionInfo info = CreateConnectionInfo(userName, password);
- ITransport transport = TransportFactory.CreateTransport(uri);
- Connection connection = new Connection(uri, transport, info);
-
- // Set the Factory level configuration to the Connection, this can be overriden by
- // the params on the Connection URI so we do this before applying the params.
- connection.UseCompression = this.useCompression;
- connection.RedeliveryPolicy = this.redeliveryPolicy.Clone() as IRedeliveryPolicy;
- connection.PrefetchPolicy = this.prefetchPolicy.Clone() as PrefetchPolicy;
- connection.CompressionPolicy = this.compressionPolicy.Clone() as ICompressionPolicy;
-
- // Set properties on connection using parameters prefixed with "connection."
- // Since this could be a composite Uri, assume the connection-specific parameters
- // are associated with the outer-most specification of the composite Uri. What's nice
- // is that this works with simple Uri as well.
- URISupport.CompositeData c = URISupport.parseComposite(uri);
- URISupport.SetProperties(connection, c.Parameters, "connection.");
+ try
+ {
+ // Strip off the activemq prefix, if it exists.
+ Uri uri = new Uri(URISupport.stripPrefix(brokerUri.OriginalString, "activemq:"));
+
+ Tracer.InfoFormat("Connecting to: {0}", uri.ToString());
+
+ ITransport transport = TransportFactory.CreateTransport(uri);
+
+ connection = new Connection(uri, transport, this.ClientIdGenerator);
+
+ ConfigureConnection(connection);
+
+ connection.UserName = this.connectionUserName;
+ connection.Password = this.connectionPassword;
+
+ if(this.clientId != null)
+ {
+ connection.DefaultClientId = this.clientId;
+ }
+
+ connection.ITransport.Start();
+
+ return connection;
+ }
+ catch(NMSException e)
+ {
+ try
+ {
+ connection.Close();
+ }
+ catch
+ {
+ }
- URISupport.SetProperties(connection.PrefetchPolicy, c.Parameters, "nms.PrefetchPolicy.");
- URISupport.SetProperties(connection.RedeliveryPolicy, c.Parameters, "nms.RedeliveryPolicy.");
+ throw e;
+ }
+ catch(Exception e)
+ {
+ try
+ {
+ connection.Close();
+ }
+ catch
+ {
+ }
- connection.ITransport.Start();
- return connection;
+ throw NMSExceptionSupport.Create("Could not connect to broker URL: " + this.brokerUri + ". Reason: " + e.Message, e);
+ }
}
- // Properties
+ #region ConnectionFactory Properties
/// <summary>
/// Get/or set the broker Uri.
@@ -128,7 +162,17 @@
public Uri BrokerUri
{
get { return brokerUri; }
- set { brokerUri = value; }
+ set
+ {
+ brokerUri = value;
+
+ Uri uri = new Uri(URISupport.stripPrefix(brokerUri.OriginalString, "activemq:"));
+
+ URISupport.CompositeData c = URISupport.parseComposite(uri);
+ URISupport.SetProperties(this, c.Parameters, "connection.");
+ URISupport.SetProperties(this.PrefetchPolicy, c.Parameters, "nms.PrefetchPolicy.");
+ URISupport.SetProperties(this.RedeliveryPolicy, c.Parameters, "nms.RedeliveryPolicy.");
+ }
}
public string UserName
@@ -149,12 +193,71 @@
set { clientId = value; }
}
+ public string ClientIdPrefix
+ {
+ get { return clientIdPrefix; }
+ set { clientIdPrefix = value; }
+ }
+
public bool UseCompression
{
get { return this.useCompression; }
set { this.useCompression = value; }
}
+ public bool CopyMessageOnSend
+ {
+ get { return copyMessageOnSend; }
+ set { copyMessageOnSend = value; }
+ }
+
+ public bool AlwaysSyncSend
+ {
+ get { return alwaysSyncSend; }
+ set { alwaysSyncSend = value; }
+ }
+
+ public bool AsyncClose
+ {
+ get { return asyncClose; }
+ set { asyncClose = value; }
+ }
+
+ public bool SendAcksAsync
+ {
+ get { return sendAcksAsync; }
+ set { sendAcksAsync = value; }
+ }
+
+ public bool AsyncSend
+ {
+ get { return asyncSend; }
+ set { asyncSend = value; }
+ }
+
+ public bool DispatchAsync
+ {
+ get { return this.dispatchAsync; }
+ set { this.dispatchAsync = value; }
+ }
+
+ public string AckMode
+ {
+ set { this.acknowledgementMode = NMSConvert.ToAcknowledgementMode(value); }
+ }
+
+ public AcknowledgementMode AcknowledgementMode
+ {
+ get { return acknowledgementMode; }
+ set { this.acknowledgementMode = value; }
+ }
+
+ public PrefetchPolicy PrefetchPolicy
+ {
+ get { return this.prefetchPolicy; }
+ set { this.prefetchPolicy = value; }
+ }
+
public IRedeliveryPolicy RedeliveryPolicy
{
get { return this.redeliveryPolicy; }
@@ -177,7 +280,31 @@
this.compressionPolicy = value;
}
}
- }
+ }
+
+ public IdGenerator ClientIdGenerator
+ {
+ set { this.clientIdGenerator = value; }
+ get
+ {
+ lock(this)
+ {
+ if(this.clientIdGenerator == null)
+ {
+ if(this.clientIdPrefix != null)
+ {
+ this.clientIdGenerator = new IdGenerator(this.clientIdPrefix);
+ }
+ else
+ {
+ this.clientIdGenerator = new IdGenerator();
+ }
+ }
+
+ return this.clientIdGenerator;
+ }
+ }
+ }
public event ExceptionListener OnException
{
@@ -191,24 +318,22 @@
}
}
- protected virtual ConnectionInfo CreateConnectionInfo(string userName, string password)
- {
- ConnectionInfo answer = new ConnectionInfo();
- ConnectionId connectionId = new ConnectionId();
- connectionId.Value = CreateNewGuid();
+ #endregion
- answer.ConnectionId = connectionId;
- answer.UserName = userName;
- answer.Password = password;
- answer.ClientId = clientId ?? CreateNewGuid();
-
- return answer;
- }
-
- protected static string CreateNewGuid()
- {
- return Guid.NewGuid().ToString();
- }
+ protected virtual void ConfigureConnection(Connection connection)
+ {
+ connection.AsyncClose = this.AsyncClose;
+ connection.AsyncSend = this.AsyncSend;
+ connection.CopyMessageOnSend = this.CopyMessageOnSend;
+ connection.AlwaysSyncSend = this.AlwaysSyncSend;
+ connection.DispatchAsync = this.DispatchAsync;
+ connection.SendAcksAsync = this.SendAcksAsync;
+ connection.AcknowledgementMode = this.acknowledgementMode;
+ connection.UseCompression = this.useCompression;
+ connection.RedeliveryPolicy = this.redeliveryPolicy.Clone() as IRedeliveryPolicy;
+ connection.PrefetchPolicy = this.prefetchPolicy.Clone() as PrefetchPolicy;
+ connection.CompressionPolicy = this.compressionPolicy.Clone() as ICompressionPolicy;
+ }
protected static void ExceptionHandler(Exception ex)
{
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Mock/MockTransport.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Mock/MockTransport.cs?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Mock/MockTransport.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Mock/MockTransport.cs Tue Dec 22 17:01:16 2009
@@ -44,6 +44,9 @@
private bool failOnReceiveMessage = false;
private int numReceivedMessagesBeforeFail = 0;
private int numReceivedMessages = 0;
+ private bool failOnKeepAliveInfoSends = false;
+ private int numSentKeepAliveInfosBeforeFail = 0;
+ private int numSentKeppAliveInfos = 0;
private int nextCommandId = 0;
private CommandHandler commandHandler;
private CommandHandler outgoingCommandHandler;
@@ -150,16 +153,25 @@
public void Oneway(Command command)
{
Tracer.Debug("MockTransport sending oneway Command: " + command.ToString() );
-
+
if( command.IsMessage ) {
this.numSentMessages++;
-
+
if( this.failOnSendMessage && this.numSentMessages > this.numSentMessagesBeforeFail ) {
Tracer.Debug("MockTransport Oneway send, failing as per configuration." );
throw new IOException( "Failed to Send Message.");
}
}
-
+
+ if( command.IsKeepAliveInfo ) {
+ this.numSentKeppAliveInfos++;
+
+ if( this.failOnKeepAliveInfoSends && this.numSentKeppAliveInfos > this.numSentKeepAliveInfosBeforeFail ) {
+ Tracer.Debug("MockTransport Oneway send, failing as per configuration." );
+ throw new IOException( "Failed to Send Message.");
+ }
+ }
+
// Process and send any new Commands back.
// Let the Response Builder give us the Commands to send to the Client App.
@@ -324,19 +336,37 @@
get { return failOnReceiveMessage; }
set { failOnReceiveMessage = value; }
}
-
+
public int NumReceivedMessagesBeforeFail
{
get { return numReceivedMessagesBeforeFail; }
- set { numReceivedMessagesBeforeFail = value; }
+ set { numReceivedMessagesBeforeFail = value; }
}
-
+
public int NumReceivedMessages
{
get { return numReceivedMessages; }
set { numReceivedMessages = value; }
}
+ public bool FailOnKeepAliveInfoSends
+ {
+ get { return failOnKeepAliveInfoSends; }
+ set { failOnKeepAliveInfoSends = value; }
+ }
+
+ public int NumSentKeepAliveInfosBeforeFail
+ {
+ get { return numSentKeepAliveInfosBeforeFail; }
+ set { numSentKeepAliveInfosBeforeFail = value; }
+ }
+
+ public int NumSentKeppAliveInfos
+ {
+ get { return numSentKeppAliveInfos; }
+ set { numSentKeppAliveInfos = value; }
+ }
+
public bool IsFaultTolerant
{
get{ return false; }
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs Tue Dec 22 17:01:16 2009
@@ -25,350 +25,365 @@
namespace Apache.NMS.ActiveMQ.Transport.Tcp
{
- public class TcpTransportFactory : ITransportFactory
- {
- public TcpTransportFactory()
- {
- }
-
- #region Properties
-
- private bool useLogging = false;
- public bool UseLogging
- {
- get { return useLogging; }
- set { useLogging = value; }
- }
-
- /// <summary>
- /// Size in bytes of the receive buffer.
- /// </summary>
- private int receiveBufferSize = 8192;
- public int ReceiveBufferSize
- {
- get { return receiveBufferSize; }
- set { receiveBufferSize = value; }
- }
-
- /// <summary>
- /// Size in bytes of send buffer.
- /// </summary>
- private int sendBufferSize = 8192;
- public int SendBufferSize
- {
- get { return sendBufferSize; }
- set { sendBufferSize = value; }
- }
-
- /// <summary>
- /// The time-out value, in milliseconds. The default value is 0, which indicates
- /// an infinite time-out period. Specifying -1 also indicates an infinite time-out period.
- /// </summary>
- private int receiveTimeout = 0;
- public int ReceiveTimeout
- {
- get { return receiveTimeout; }
- set { receiveTimeout = value; }
- }
-
- /// <summary>
- /// The time-out value, in milliseconds. If you set the property with a value between 1 and 499,
- /// the value will be changed to 500. The default value is 0, which indicates an infinite
- /// time-out period. Specifying -1 also indicates an infinite time-out period.
- /// </summary>
- private int sendTimeout = 0;
- public int SendTimeout
- {
- get { return sendTimeout; }
- set { sendTimeout = value; }
- }
-
- private string wireFormat = "OpenWire";
- public string WireFormat
- {
- get { return wireFormat; }
- set { wireFormat = value; }
- }
-
- private TimeSpan requestTimeout = NMSConstants.defaultRequestTimeout;
- public int RequestTimeout
- {
- get { return (int) requestTimeout.TotalMilliseconds; }
- set { requestTimeout = TimeSpan.FromMilliseconds(value); }
- }
-
- #endregion
-
- #region ITransportFactory Members
-
- public ITransport CompositeConnect(Uri location)
- {
- return CompositeConnect(location, null);
- }
-
- public ITransport CompositeConnect(Uri location, SetTransport setTransport)
- {
- // Extract query parameters from broker Uri
- StringDictionary map = URISupport.ParseQuery(location.Query);
+ public class TcpTransportFactory : ITransportFactory
+ {
+ public TcpTransportFactory()
+ {
+ }
+
+ #region Properties
+
+ private bool useLogging = false;
+ public bool UseLogging
+ {
+ get { return useLogging; }
+ set { useLogging = value; }
+ }
+
+ /// <summary>
+ /// Should the Inactivity Monitor be enabled on this Transport.
+ /// </summary>
+ private bool useInactivityMonitor = false;
+ public bool UseInactivityMonitor
+ {
+ get { return this.useInactivityMonitor; }
+ set { this.useInactivityMonitor = value; }
+ }
+
+ /// <summary>
+ /// Size in bytes of the receive buffer.
+ /// </summary>
+ private int receiveBufferSize = 8192;
+ public int ReceiveBufferSize
+ {
+ get { return receiveBufferSize; }
+ set { receiveBufferSize = value; }
+ }
+
+ /// <summary>
+ /// Size in bytes of send buffer.
+ /// </summary>
+ private int sendBufferSize = 8192;
+ public int SendBufferSize
+ {
+ get { return sendBufferSize; }
+ set { sendBufferSize = value; }
+ }
+
+ /// <summary>
+ /// The time-out value, in milliseconds. The default value is 0, which indicates
+ /// an infinite time-out period. Specifying -1 also indicates an infinite time-out period.
+ /// </summary>
+ private int receiveTimeout = 0;
+ public int ReceiveTimeout
+ {
+ get { return receiveTimeout; }
+ set { receiveTimeout = value; }
+ }
+
+ /// <summary>
+ /// The time-out value, in milliseconds. If you set the property with a value between 1 and 499,
+ /// the value will be changed to 500. The default value is 0, which indicates an infinite
+ /// time-out period. Specifying -1 also indicates an infinite time-out period.
+ /// </summary>
+ private int sendTimeout = 0;
+ public int SendTimeout
+ {
+ get { return sendTimeout; }
+ set { sendTimeout = value; }
+ }
+
+ private string wireFormat = "OpenWire";
+ public string WireFormat
+ {
+ get { return wireFormat; }
+ set { wireFormat = value; }
+ }
+
+ private TimeSpan requestTimeout = NMSConstants.defaultRequestTimeout;
+ public int RequestTimeout
+ {
+ get { return (int) requestTimeout.TotalMilliseconds; }
+ set { requestTimeout = TimeSpan.FromMilliseconds(value); }
+ }
+
+ #endregion
+
+ #region ITransportFactory Members
+
+ public ITransport CompositeConnect(Uri location)
+ {
+ return CompositeConnect(location, null);
+ }
+
+ public ITransport CompositeConnect(Uri location, SetTransport setTransport)
+ {
+ // Extract query parameters from broker Uri
+ StringDictionary map = URISupport.ParseQuery(location.Query);
- // Set transport. properties on this (the factory)
- URISupport.SetProperties(this, map, "transport.");
+ // Set transport. properties on this (the factory)
+ URISupport.SetProperties(this, map, "transport.");
- Tracer.Debug("Opening socket to: " + location.Host + " on port: " + location.Port);
- Socket socket = Connect(location.Host, location.Port);
+ Tracer.Debug("Opening socket to: " + location.Host + " on port: " + location.Port);
+ Socket socket = Connect(location.Host, location.Port);
#if !NETCF
- socket.ReceiveBufferSize = ReceiveBufferSize;
- socket.SendBufferSize = SendBufferSize;
- socket.ReceiveTimeout = ReceiveTimeout;
- socket.SendTimeout = SendTimeout;
+ socket.ReceiveBufferSize = ReceiveBufferSize;
+ socket.SendBufferSize = SendBufferSize;
+ socket.ReceiveTimeout = ReceiveTimeout;
+ socket.SendTimeout = SendTimeout;
#endif
- IWireFormat wireformat = CreateWireFormat(map);
- ITransport transport = new TcpTransport(location, socket, wireformat);
+ IWireFormat wireformat = CreateWireFormat(map);
+ ITransport transport = new TcpTransport(location, socket, wireformat);
- wireformat.Transport = transport;
+ wireformat.Transport = transport;
- if(UseLogging)
- {
- transport = new LoggingTransport(transport);
- }
-
- if(wireformat is OpenWireFormat)
- {
- transport = new WireFormatNegotiator(transport, (OpenWireFormat) wireformat);
- }
-
- transport.RequestTimeout = this.requestTimeout;
-
- if(setTransport != null)
- {
- setTransport(transport, location);
- }
-
- return transport;
- }
-
- public ITransport CreateTransport(Uri location)
- {
- ITransport transport = CompositeConnect(location);
-
- transport = new MutexTransport(transport);
- transport = new ResponseCorrelator(transport);
- transport.RequestTimeout = this.requestTimeout;
-
- return transport;
- }
-
- #endregion
-
- // DISCUSSION: Caching host entries may not be the best strategy when using the
- // failover protocol. The failover protocol needs to be very dynamic when looking
- // up hostnames at runtime. If old hostname->IP mappings are kept around, this may
- // lead to runtime failures that could have been avoided by dynamically looking up
- // the new hostname IP.
+ if(UseLogging)
+ {
+ transport = new LoggingTransport(transport);
+ }
+
+ if(UseInactivityMonitor)
+ {
+ transport = new InactivityMonitor(transport);
+ }
+
+ if(wireformat is OpenWireFormat)
+ {
+ transport = new WireFormatNegotiator(transport, (OpenWireFormat) wireformat);
+ }
+
+ transport.RequestTimeout = this.requestTimeout;
+
+ if(setTransport != null)
+ {
+ setTransport(transport, location);
+ }
+
+ return transport;
+ }
+
+ public ITransport CreateTransport(Uri location)
+ {
+ ITransport transport = CompositeConnect(location);
+
+ transport = new MutexTransport(transport);
+ transport = new ResponseCorrelator(transport);
+ transport.RequestTimeout = this.requestTimeout;
+
+ return transport;
+ }
+
+ #endregion
+
+ // DISCUSSION: Caching host entries may not be the best strategy when using the
+ // failover protocol. The failover protocol needs to be very dynamic when looking
+ // up hostnames at runtime. If old hostname->IP mappings are kept around, this may
+ // lead to runtime failures that could have been avoided by dynamically looking up
+ // the new hostname IP.
#if CACHE_HOSTENTRIES
- private static IDictionary<string, IPHostEntry> CachedIPHostEntries = new Dictionary<string, IPHostEntry>();
- private static readonly object _syncLock = new object();
+ private static IDictionary<string, IPHostEntry> CachedIPHostEntries = new Dictionary<string, IPHostEntry>();
+ private static readonly object _syncLock = new object();
#endif
- public static IPHostEntry GetIPHostEntry(string host)
- {
- IPHostEntry ipEntry;
+ public static IPHostEntry GetIPHostEntry(string host)
+ {
+ IPHostEntry ipEntry;
#if CACHE_HOSTENTRIES
- string hostUpperName = host.ToUpper();
+ string hostUpperName = host.ToUpper();
- lock (_syncLock)
- {
- if (!CachedIPHostEntries.TryGetValue(hostUpperName, out ipEntry))
- {
- try
- {
- ipEntry = Dns.GetHostEntry(hostUpperName);
- CachedIPHostEntries.Add(hostUpperName, ipEntry);
- }
- catch
- {
- ipEntry = null;
- }
- }
- }
+ lock (_syncLock)
+ {
+ if (!CachedIPHostEntries.TryGetValue(hostUpperName, out ipEntry))
+ {
+ try
+ {
+ ipEntry = Dns.GetHostEntry(hostUpperName);
+ CachedIPHostEntries.Add(hostUpperName, ipEntry);
+ }
+ catch
+ {
+ ipEntry = null;
+ }
+ }
+ }
#else
- try
- {
- ipEntry = Dns.GetHostEntry(host);
- }
- catch
- {
- ipEntry = null;
- }
+ try
+ {
+ ipEntry = Dns.GetHostEntry(host);
+ }
+ catch
+ {
+ ipEntry = null;
+ }
#endif
- return ipEntry;
- }
+ return ipEntry;
+ }
- private Socket ConnectSocket(IPAddress address, int port)
- {
- if(null != address)
- {
- try
- {
- Socket socket = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
-
- if(null != socket)
- {
- socket.Connect(new IPEndPoint(address, port));
- if(socket.Connected)
- {
- return socket;
- }
- }
- }
- catch
- {
- }
- }
+ private Socket ConnectSocket(IPAddress address, int port)
+ {
+ if(null != address)
+ {
+ try
+ {
+ Socket socket = new Socket(address.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
+
+ if(null != socket)
+ {
+ socket.Connect(new IPEndPoint(address, port));
+ if(socket.Connected)
+ {
+ return socket;
+ }
+ }
+ }
+ catch
+ {
+ }
+ }
- return null;
- }
+ return null;
+ }
- public static bool TryParseIPAddress(string host, out IPAddress ipaddress)
- {
+ public static bool TryParseIPAddress(string host, out IPAddress ipaddress)
+ {
#if !NETCF
- return IPAddress.TryParse(host, out ipaddress);
+ return IPAddress.TryParse(host, out ipaddress);
#else
- try
- {
- ipaddress = IPAddress.Parse(host);
- }
- catch
- {
- ipaddress = null;
- }
+ try
+ {
+ ipaddress = IPAddress.Parse(host);
+ }
+ catch
+ {
+ ipaddress = null;
+ }
- return (null != ipaddress);
+ return (null != ipaddress);
#endif
- }
+ }
- public static IPAddress GetIPAddress(string hostname, AddressFamily addressFamily)
- {
- IPAddress ipaddress = null;
- IPHostEntry hostEntry = GetIPHostEntry(hostname);
-
- if(null != hostEntry)
- {
- ipaddress = GetIPAddress(hostEntry, addressFamily);
- }
-
- return ipaddress;
- }
-
- public static IPAddress GetIPAddress(IPHostEntry hostEntry, AddressFamily addressFamily)
- {
- if(null != hostEntry)
- {
- foreach(IPAddress address in hostEntry.AddressList)
- {
- if(address.AddressFamily == addressFamily)
- {
- return address;
- }
- }
- }
-
- return null;
- }
-
- protected Socket Connect(string host, int port)
- {
- Socket socket = null;
- IPAddress ipaddress;
-
- try
- {
- if(TryParseIPAddress(host, out ipaddress))
- {
- socket = ConnectSocket(ipaddress, port);
- }
- else
- {
- // Looping through the AddressList allows different type of connections to be tried
- // (IPv6, IPv4 and whatever else may be available).
- IPHostEntry hostEntry = GetIPHostEntry(host);
-
- if(null != hostEntry)
- {
- // Prefer IPv6 first.
- ipaddress = GetIPAddress(hostEntry, AddressFamily.InterNetworkV6);
- socket = ConnectSocket(ipaddress, port);
- if(null == socket)
- {
- // Try IPv4 next.
- ipaddress = GetIPAddress(hostEntry, AddressFamily.InterNetwork);
- socket = ConnectSocket(ipaddress, port);
- if(null == socket)
- {
- // Try whatever else there is.
- foreach(IPAddress address in hostEntry.AddressList)
- {
- if(AddressFamily.InterNetworkV6 == address.AddressFamily
- || AddressFamily.InterNetwork == address.AddressFamily)
- {
- // Already tried these protocols.
- continue;
- }
-
- socket = ConnectSocket(address, port);
- if(null != socket)
- {
- ipaddress = address;
- break;
- }
- }
- }
- }
- }
- }
-
- if(null == socket)
- {
- throw new SocketException();
- }
- }
- catch(Exception ex)
- {
- throw new NMSConnectionException(String.Format("Error connecting to {0}:{1}.", host, port), ex);
- }
-
- Tracer.DebugFormat("Connected to {0}:{1} using {2} protocol.", host, port, ipaddress.AddressFamily.ToString());
- return socket;
- }
-
- protected IWireFormat CreateWireFormat(StringDictionary map)
- {
- object properties = null;
- IWireFormat wireFormatItf = null;
-
- if(String.Compare(this.wireFormat, "stomp", true) == 0)
- {
- wireFormatItf = new StompWireFormat();
- properties = wireFormatItf;
- }
- else
- {
- OpenWireFormat openwireFormat = new OpenWireFormat();
-
- wireFormatItf = openwireFormat;
- properties = openwireFormat.PreferedWireFormatInfo;
- }
-
- if(null != properties)
- {
- // Set wireformat. properties on the wireformat owned by the tcpTransport
- URISupport.SetProperties(properties, map, "wireFormat.");
- }
-
- return wireFormatItf;
- }
- }
+ public static IPAddress GetIPAddress(string hostname, AddressFamily addressFamily)
+ {
+ IPAddress ipaddress = null;
+ IPHostEntry hostEntry = GetIPHostEntry(hostname);
+
+ if(null != hostEntry)
+ {
+ ipaddress = GetIPAddress(hostEntry, addressFamily);
+ }
+
+ return ipaddress;
+ }
+
+ public static IPAddress GetIPAddress(IPHostEntry hostEntry, AddressFamily addressFamily)
+ {
+ if(null != hostEntry)
+ {
+ foreach(IPAddress address in hostEntry.AddressList)
+ {
+ if(address.AddressFamily == addressFamily)
+ {
+ return address;
+ }
+ }
+ }
+
+ return null;
+ }
+
+ protected Socket Connect(string host, int port)
+ {
+ Socket socket = null;
+ IPAddress ipaddress;
+
+ try
+ {
+ if(TryParseIPAddress(host, out ipaddress))
+ {
+ socket = ConnectSocket(ipaddress, port);
+ }
+ else
+ {
+ // Looping through the AddressList allows different type of connections to be tried
+ // (IPv6, IPv4 and whatever else may be available).
+ IPHostEntry hostEntry = GetIPHostEntry(host);
+
+ if(null != hostEntry)
+ {
+ // Prefer IPv6 first.
+ ipaddress = GetIPAddress(hostEntry, AddressFamily.InterNetworkV6);
+ socket = ConnectSocket(ipaddress, port);
+ if(null == socket)
+ {
+ // Try IPv4 next.
+ ipaddress = GetIPAddress(hostEntry, AddressFamily.InterNetwork);
+ socket = ConnectSocket(ipaddress, port);
+ if(null == socket)
+ {
+ // Try whatever else there is.
+ foreach(IPAddress address in hostEntry.AddressList)
+ {
+ if(AddressFamily.InterNetworkV6 == address.AddressFamily
+ || AddressFamily.InterNetwork == address.AddressFamily)
+ {
+ // Already tried these protocols.
+ continue;
+ }
+
+ socket = ConnectSocket(address, port);
+ if(null != socket)
+ {
+ ipaddress = address;
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ if(null == socket)
+ {
+ throw new SocketException();
+ }
+ }
+ catch(Exception ex)
+ {
+ throw new NMSConnectionException(String.Format("Error connecting to {0}:{1}.", host, port), ex);
+ }
+
+ Tracer.DebugFormat("Connected to {0}:{1} using {2} protocol.", host, port, ipaddress.AddressFamily.ToString());
+ return socket;
+ }
+
+ protected IWireFormat CreateWireFormat(StringDictionary map)
+ {
+ object properties = null;
+ IWireFormat wireFormatItf = null;
+
+ if(String.Compare(this.wireFormat, "stomp", true) == 0)
+ {
+ wireFormatItf = new StompWireFormat();
+ properties = wireFormatItf;
+ }
+ else
+ {
+ OpenWireFormat openwireFormat = new OpenWireFormat();
+
+ wireFormatItf = openwireFormat;
+ properties = openwireFormat.PreferedWireFormatInfo;
+ }
+
+ if(null != properties)
+ {
+ // Set wireformat. properties on the wireformat owned by the tcpTransport
+ URISupport.SetProperties(properties, map, "wireFormat.");
+ }
+
+ return wireFormatItf;
+ }
+ }
}
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/NMSConnectionFactoryTest.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/NMSConnectionFactoryTest.cs?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/NMSConnectionFactoryTest.cs (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/src/test/csharp/NMSConnectionFactoryTest.cs Tue Dec 22 17:01:16 2009
@@ -45,20 +45,20 @@
[Row("activemq:tcp://InvalidHost:61616", ExpectedException = typeof(NMSConnectionException))]
[Row("activemq:tcp://InvalidHost:61616?connection.asyncclose=false", ExpectedException = typeof(NMSConnectionException))]
- [Row("tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSException))]
- [Row("activemq:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSException))]
- [Row("activemq:failover:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSException))]
- [Row("activemq:failover:(tcp://${activemqhost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSException))]
- [Row("activemq:failover:(tcp://${activemqhost}:61616,tcp://${activemqbackuphost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSException))]
+ [Row("tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
+ [Row("activemq:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
+ [Row("activemq:failover:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
+ [Row("activemq:failover:(tcp://${activemqhost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
+ [Row("activemq:failover:(tcp://${activemqhost}:61616,tcp://${activemqbackuphost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
[Row("ftp://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
[Row("http://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
[Row("discovery://${activemqhost}:6155", ExpectedException = typeof(NMSConnectionException))]
[Row("sms://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
[Row("activemq:multicast://${activemqhost}:6155", ExpectedException = typeof(NMSConnectionException))]
+ [Row("activemq:(tcp://${activemqhost}:61616)?connection.asyncClose=false", ExpectedException = typeof(NMSConnectionException))]
- [Row("activemq:(tcp://${activemqhost}:61616)?connection.asyncclose=false", ExpectedException = typeof(UriFormatException))]
- [Row("(tcp://${activemqhost}:61616,tcp://${activemqhost}:61616)", ExpectedException = typeof(UriFormatException))]
+ [Row("(tcp://${activemqhost}:61616,tcp://${activemqhost}:61616)", ExpectedException = typeof(UriFormatException))]
[Row("tcp://${activemqhost}:61616,tcp://${activemqhost}:61616", ExpectedException = typeof(UriFormatException))]
public void TestURI(string connectionURI)
{
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq-test.csproj
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq-test.csproj?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq-test.csproj (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq-test.csproj Tue Dec 22 17:01:16 2009
@@ -90,6 +90,7 @@
<Compile Include="src\test\csharp\StompHelperTest.cs" />
<Compile Include="src\test\csharp\Threads\DedicatedTaskRunnerTest.cs" />
<Compile Include="src\test\csharp\Transport\failover\FailoverTransportTest.cs" />
+ <Compile Include="src\test\csharp\Transport\Inactivity\InactivityMonitorTest.cs" />
<Compile Include="src\test\csharp\Transport\Mock\MockTransportFactoryTest.cs" />
<Compile Include="src\test\csharp\Transport\Mock\MockTransportTest.cs" />
<Compile Include="src\test\csharp\Util\MemoryUsageTest.cs" />
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq-test.csproj
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Dec 22 17:01:16 2009
@@ -1,2 +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:891917,892010-892308
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/vs2008-activemq-test.csproj:891917,892010-892308,892840-893228
Modified: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.csproj
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.csproj?rev=893231&r1=893230&r2=893231&view=diff
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.csproj (original)
+++ activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.csproj Tue Dec 22 17:01:16 2009
@@ -899,6 +899,7 @@
<SubType>Code</SubType>
</Compile>
<Compile Include="src\main\csharp\Transport\ICompositeTransport.cs" />
+ <Compile Include="src\main\csharp\Transport\InactivityMonitor.cs" />
<Compile Include="src\main\csharp\Transport\ITransport.cs">
<SubType>Code</SubType>
</Compile>
@@ -935,6 +936,7 @@
<Compile Include="src\main\csharp\Transport\WireFormatNegotiator.cs">
<SubType>Code</SubType>
</Compile>
+ <Compile Include="src\main\csharp\Util\IdGenerator.cs" />
<Compile Include="src\main\csharp\Util\MemoryUsage.cs" />
<Compile Include="src\main\csharp\Util\MessageDispatchChannel.cs" />
</ItemGroup>
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.csproj
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Dec 22 17:01:16 2009
@@ -1,2 +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:891917,892010-892308
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/vs2008-activemq.csproj:891917,892010-892308,892840-893228
Propchange: activemq/activemq-dotnet/Apache.NMS.ActiveMQ/branches/1.2.x/vs2008-activemq.sln
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Dec 22 17:01:16 2009
@@ -1,2 +1,2 @@
/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/tags/1.1.0/vs2008-activemq.sln:788230,788233,790183
-/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/vs2008-activemq.sln:891917,892010-892308
+/activemq/activemq-dotnet/Apache.NMS.ActiveMQ/trunk/vs2008-activemq.sln:891917,892010-892308,892840-893228