From 3e7e7352603ac42880c995c58992fb366331d2d8 Mon Sep 17 00:00:00 2001 From: markpollack Date: Tue, 13 Jan 2009 17:56:18 +0000 Subject: [PATCH] SPRNET-1150 - Provide warning if MSMQ IMessageConverter object is not specified with scope = prototype. --- .../Core/DefaultMessageQueueFactory.cs | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/src/Spring/Spring.Messaging/Messaging/Core/DefaultMessageQueueFactory.cs b/src/Spring/Spring.Messaging/Messaging/Core/DefaultMessageQueueFactory.cs index c3e82f7d..6f272786 100644 --- a/src/Spring/Spring.Messaging/Messaging/Core/DefaultMessageQueueFactory.cs +++ b/src/Spring/Spring.Messaging/Messaging/Core/DefaultMessageQueueFactory.cs @@ -21,6 +21,7 @@ using System; using System.Collections; using System.Messaging; +using Common.Logging; using Spring.Context; using Spring.Messaging.Support; using Spring.Messaging.Support.Converters; @@ -37,6 +38,12 @@ namespace Spring.Messaging.Core /// Mark Pollack public class DefaultMessageQueueFactory : IMessageQueueFactory, IApplicationContextAware { + /// + /// The instance for this class. + /// + private readonly ILog log = LogManager.GetLogger(typeof(DefaultMessageQueueFactory)); + + private static readonly string QUEUE_DICTIONARY_SLOTNAME = UniqueKey.GetTypeScopedString(typeof (DefaultMessageQueueFactory), "Queue"); @@ -128,8 +135,18 @@ namespace Spring.Messaging.Core } if (!converters.Contains(messageConverterObjectName)) { - IMessageConverter mc = applicationContext.GetObject(messageConverterObjectName) as IMessageConverter; - converters.Add(messageConverterObjectName, mc); + IMessageConverter mc = + (IMessageConverter) + applicationContext.GetObject(messageConverterObjectName, typeof (IMessageConverter)); + if (applicationContext.ObjectFactory.GetObjectDefinition(messageConverterObjectName).IsSingleton) + { + log.Warn("MessageConverter with name = [" + messageConverterObjectName + "] should be declared with singleton=false. Using Clone() to create independent instance for thread local storage"); + converters.Add(messageConverterObjectName, mc.Clone()); + } + else + { + converters.Add(messageConverterObjectName, mc); + } } return converters[messageConverterObjectName] as IMessageConverter; }