diff --git a/.gitignore b/.gitignore index 9cbb6cf94f2..9e1e0b667cd 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ nuget CommonAssemblyInfo.cs lib/sqlite/System.Data.SQLite.dll *.orig +Samples/DataBus/storage diff --git a/Samples/DataBus/DataBus.suo b/Samples/DataBus/DataBus.suo index 70de7fdefe0..17e4020d4bc 100644 Binary files a/Samples/DataBus/DataBus.suo and b/Samples/DataBus/DataBus.suo differ diff --git a/src/databus/NServiceBus.Databus.Tests/InMemoryDataBus.cs b/src/databus/NServiceBus.Databus.Tests/InMemoryDataBus.cs index dfe5b94e7f0..96a78421887 100644 --- a/src/databus/NServiceBus.Databus.Tests/InMemoryDataBus.cs +++ b/src/databus/NServiceBus.Databus.Tests/InMemoryDataBus.cs @@ -23,5 +23,15 @@ public string Put(Stream stream, TimeSpan timeToBeReceived) storage.Add(key,data); return key; } + + public void Start() + { + //no-op + } + + public void Dispose() + { + //no-op + } } } \ No newline at end of file diff --git a/src/databus/NServiceBus.Databus/Config/Bootstrapper.cs b/src/databus/NServiceBus.Databus/Config/Bootstrapper.cs index bfb4bfe965e..d46bf8f9b06 100644 --- a/src/databus/NServiceBus.Databus/Config/Bootstrapper.cs +++ b/src/databus/NServiceBus.Databus/Config/Bootstrapper.cs @@ -6,31 +6,41 @@ namespace NServiceBus.DataBus.Config { using System; using System.Configuration; + using Unicast; - public class Bootstrapper:INeedInitialization - { - public void Init() - { - bool dataBusPropertyFound = Configure.TypesToScan - .Where(t => typeof (IMessage).IsAssignableFrom(t)) - .SelectMany(messageType => messageType.GetProperties()) + public class Bootstrapper : INeedInitialization + { + public void Init() + { + bool dataBusPropertyFound = Configure.TypesToScan + .Where(t => typeof(IMessage).IsAssignableFrom(t)) + .SelectMany(messageType => messageType.GetProperties()) .Any(t => typeof(IDataBusProperty).IsAssignableFrom(t.PropertyType)); - if (dataBusPropertyFound) - { - if(!Configure.Instance.Configurer.HasComponent()) - throw new InvalidOperationException("Messages containing databus properties found, please configure a databus!"); + if (!dataBusPropertyFound) + return; - Configure.Instance.Configurer.ConfigureComponent( - DependencyLifecycle.InstancePerCall); + if (!Configure.Instance.Configurer.HasComponent()) + throw new InvalidOperationException("Messages containing databus properties found, please configure a databus!"); - Configure.Instance.Configurer.ConfigureComponent( - DependencyLifecycle.SingleInstance); + Configure.Instance.Configurer.ConfigureComponent( + DependencyLifecycle.InstancePerCall); + Configure.Instance.Configurer.ConfigureComponent( + DependencyLifecycle.SingleInstance); - - } - + HookupDataBusStartMethod(); } - } + + static void HookupDataBusStartMethod() + { + Configure.ConfigurationComplete += + (o,a) => + { + Configure.Instance.Builder.Build() + .Started += (sender, eventargs) => Configure.Instance.Builder.Build().Start(); + + }; + } + } } \ No newline at end of file diff --git a/src/databus/NServiceBus.Databus/IDataBus.cs b/src/databus/NServiceBus.Databus/IDataBus.cs index 5ba97df48fa..a5705f1122b 100644 --- a/src/databus/NServiceBus.Databus/IDataBus.cs +++ b/src/databus/NServiceBus.Databus/IDataBus.cs @@ -7,7 +7,7 @@ namespace NServiceBus.DataBus /// /// The main interface for interactions with the databus /// - public interface IDataBus + public interface IDataBus:IDisposable { /// /// Gets a data item from the bus @@ -22,5 +22,10 @@ public interface IDataBus /// A create containing the data to be sent on the databus /// The time to be received specified on the message type. TimeSpan.MaxValue is the default string Put(Stream stream, TimeSpan timeToBeReceived); + + /// + /// Called when the bus starts up to allow the data bus to active background tasks + /// + void Start(); } } \ No newline at end of file diff --git a/src/databus/NServiceBus.Databus/NServiceBus.DataBus.csproj b/src/databus/NServiceBus.Databus/NServiceBus.DataBus.csproj index c2072199e3f..49fada5076b 100644 --- a/src/databus/NServiceBus.Databus/NServiceBus.DataBus.csproj +++ b/src/databus/NServiceBus.Databus/NServiceBus.DataBus.csproj @@ -49,6 +49,9 @@ False ..\..\..\build\nservicebus.core\NServiceBus.ObjectBuilder.dll + + ..\..\..\build\nservicebus.core\NServiceBus.Unicast.dll + diff --git a/src/impl/databus/NServiceBus.Databus.FileShare/FileShareDataBus.cs b/src/impl/databus/NServiceBus.Databus.FileShare/FileShareDataBus.cs index 3ea30550e7a..82ff9515eb5 100644 --- a/src/impl/databus/NServiceBus.Databus.FileShare/FileShareDataBus.cs +++ b/src/impl/databus/NServiceBus.Databus.FileShare/FileShareDataBus.cs @@ -2,11 +2,13 @@ { using System; using System.IO; + using Common.Logging; using DataBus; public class FileShareDataBus : IDataBus { readonly string basePath; + private readonly ILog logger = LogManager.GetLogger(typeof(IDataBus)); public FileShareDataBus(string basePath) { @@ -41,6 +43,13 @@ public string Put(Stream stream, TimeSpan timeToBeReceived) return key; } + public void Start() + { + logger.Info("File share data bus started. Location: " + basePath); + + //TODO: Implement a clean up thread + } + string GenerateKey(TimeSpan timeToBeReceived) { if (timeToBeReceived > MaxMessageTimeToLive) @@ -54,5 +63,9 @@ string GenerateKey(TimeSpan timeToBeReceived) return Path.Combine(keepMessageUntil.ToString("yyyy-MM-dd_hh"), Guid.NewGuid().ToString()); } + public void Dispose() + { + logger.Info("File share data bus started. Location: " + basePath); + } } } diff --git a/src/impl/databus/NServiceBus.Databus.FileShare/NServiceBus.Databus.FileShare.csproj b/src/impl/databus/NServiceBus.Databus.FileShare/NServiceBus.Databus.FileShare.csproj index 4fbc61844bc..5211f36b4b2 100644 --- a/src/impl/databus/NServiceBus.Databus.FileShare/NServiceBus.Databus.FileShare.csproj +++ b/src/impl/databus/NServiceBus.Databus.FileShare/NServiceBus.Databus.FileShare.csproj @@ -31,6 +31,9 @@ 4 + + ..\..\..\..\lib\Common.Logging.dll + ..\..\..\..\build\output\NServiceBus.dll