diff --git a/packaging/nuget/nservicebus.nhibernate.nuspec b/packaging/nuget/nservicebus.nhibernate.nuspec index f4730dac6..365d713f5 100644 --- a/packaging/nuget/nservicebus.nhibernate.nuspec +++ b/packaging/nuget/nservicebus.nhibernate.nuspec @@ -17,8 +17,8 @@ - - + + diff --git a/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs b/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs index 3efb0fb63..9f12d970c 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs +++ b/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs @@ -2,6 +2,7 @@ { using System; using System.Collections.Generic; + using NServiceBus.Unicast.Subscriptions.NHibernate; using ObjectBuilder.Common; using ObjectBuilder.Common.Config; using Persistence.InMemory.SagaPersister; @@ -145,6 +146,12 @@ public static Configure DefineSubscriptionStorage(this Configure config, string return config.MsmqSubscriptionStorage(); } + if (persister.Contains("NServiceBus.Unicast.Subscriptions.NHibernate.CachedSubscriptionStorage") + || persister.Contains(typeof(SubscriptionStorage).FullName)) + { + return config.UseNHibernateSubscriptionPersister(); + } + CallConfigureForPersister(config, persister); return config; diff --git a/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/NServiceBus.NHibernate.AcceptanceTests-Oracle.csproj b/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/NServiceBus.NHibernate.AcceptanceTests-Oracle.csproj index 9bba9c074..8bba4609e 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/NServiceBus.NHibernate.AcceptanceTests-Oracle.csproj +++ b/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/NServiceBus.NHibernate.AcceptanceTests-Oracle.csproj @@ -1,4 +1,4 @@ - + @@ -46,16 +46,14 @@ ..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll - False - ..\packages\NServiceBus.Interfaces.4.4.2\lib\net40\NServiceBus.dll + ..\packages\NServiceBus.Interfaces.4.4.8\lib\net40\NServiceBus.dll False ..\packages\NServiceBus.AcceptanceTesting.4.4.2\lib\net40\NServiceBus.AcceptanceTesting.dll - False - ..\packages\NServiceBus.4.4.2\lib\net40\NServiceBus.Core.dll + ..\packages\NServiceBus.4.4.8\lib\net40\NServiceBus.Core.dll False diff --git a/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/packages.config b/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/packages.config index f12d4e879..c94ca2ff5 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/packages.config +++ b/src/NServiceBus.NHibernate.AcceptanceTests-Oracle/packages.config @@ -3,8 +3,8 @@ - + - + \ No newline at end of file diff --git a/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/BasicMessaging/When_using_a_message_with_TimeToBeReceived_has_expired.cs b/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/BasicMessaging/When_using_a_message_with_TimeToBeReceived_has_expired.cs index a2ffe5b21..d55680337 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/BasicMessaging/When_using_a_message_with_TimeToBeReceived_has_expired.cs +++ b/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/BasicMessaging/When_using_a_message_with_TimeToBeReceived_has_expired.cs @@ -54,7 +54,7 @@ public void Handle(MyMessage message) } [Serializable] - [TimeToBeReceived("00:00:01")] + [TimeToBeReceived("00:00:000001")] public class MyMessage : IMessage { } diff --git a/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs b/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs index 3efb0fb63..36a9a7371 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs +++ b/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/EndpointTemplates/ConfigureExtensions.cs @@ -2,6 +2,7 @@ { using System; using System.Collections.Generic; + using NServiceBus.Unicast.Subscriptions.NHibernate; using ObjectBuilder.Common; using ObjectBuilder.Common.Config; using Persistence.InMemory.SagaPersister; @@ -145,6 +146,12 @@ public static Configure DefineSubscriptionStorage(this Configure config, string return config.MsmqSubscriptionStorage(); } + if (persister.Contains("NServiceBus.Unicast.Subscriptions.NHibernate.CachedSubscriptionStorage") + || persister.Contains(typeof(SubscriptionStorage).FullName)) + { + return config.UseNHibernateSubscriptionPersister(); + } + CallConfigureForPersister(config, persister); return config; diff --git a/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/Versioning/When_multiple_versions_of_a_message_is_published.cs b/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/Versioning/When_publishing_multiversioned_message.cs similarity index 52% rename from src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/Versioning/When_multiple_versions_of_a_message_is_published.cs rename to src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/Versioning/When_publishing_multiversioned_message.cs index e19464646..4bbc53def 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/Versioning/When_multiple_versions_of_a_message_is_published.cs +++ b/src/NServiceBus.NHibernate.AcceptanceTests/App_Packages/NServiceBus.AcceptanceTests/Versioning/When_publishing_multiversioned_message.cs @@ -7,47 +7,47 @@ using PubSub; using ScenarioDescriptors; - public class When_multiple_versions_of_a_message_is_published : NServiceBusAcceptanceTest + public class When_publishing_multiversioned_message : NServiceBusAcceptanceTest { [Test] public void Should_deliver_is_to_both_v1_and_vX_subscribers() { Scenario.Define() - .WithEndpoint(b => - b.Given((bus, context) => Subscriptions.OnEndpointSubscribed(s => - { - if (s.SubscriberReturnAddress.Queue.Contains("V1Subscriber")) - context.V1Subscribed = true; - - if (s.SubscriberReturnAddress.Queue.Contains("V2Subscriber")) - context.V2Subscribed = true; - }) - ) - .When(c => c.V1Subscribed && c.V2Subscribed, (bus, c) => bus.Publish(e => - { - e.SomeData = 1; - e.MoreInfo = "dasd"; - }))) - .WithEndpoint(b => b.Given((bus,c) => + .WithEndpoint(b => + b.Given((bus, context) => Subscriptions.OnEndpointSubscribed(s => + { + if (s.SubscriberReturnAddress.Queue.Contains("V1Subscriber")) + context.V1Subscribed = true; + + if (s.SubscriberReturnAddress.Queue.Contains("V2Subscriber")) + context.V2Subscribed = true; + })) + .When(c => c.V1Subscribed && c.V2Subscribed, (bus, c) => bus.Publish(e => { - bus.Subscribe(); - if (!Feature.IsEnabled()) - c.V1Subscribed = true; - })) - .WithEndpoint(b => b.Given((bus,c) => - { - bus.Subscribe(); - if (!Feature.IsEnabled()) - c.V2Subscribed = true; - })) - .Done(c => c.V1SubscriberGotTheMessage && c.V2SubscriberGotTheMessage) - .Repeat(r =>//broken for active mq until #1098 is fixed - r.For(Serializers.Binary)) //versioning isn't supported for binary serialization - .Should(c => - { - //put asserts in here if needed - }) - .Run(); + e.SomeData = 1; + e.MoreInfo = "dasd"; + }))) + .WithEndpoint(b => b.Given((bus, c) => + { + bus.Subscribe(); + if (!Feature.IsEnabled()) + c.V1Subscribed = true; + })) + .WithEndpoint(b => b.Given((bus, c) => + { + bus.Subscribe(); + if (!Feature.IsEnabled()) + c.V2Subscribed = true; + })) + .Done(c => c.V1SubscriberGotTheMessage && c.V2SubscriberGotTheMessage) + .Repeat(r => //broken for active mq until #1098 is fixed + r.For(Serializers.Binary)) //versioning isn't supported for binary serialization + .Should(c => + { + Assert.IsTrue(c.V1SubscriberGotTheMessage); + Assert.IsTrue(c.V2SubscriberGotTheMessage); + }) + .Run(); } public class Context : ScenarioContext diff --git a/src/NServiceBus.NHibernate.AcceptanceTests/NServiceBus.NHibernate.AcceptanceTests.csproj b/src/NServiceBus.NHibernate.AcceptanceTests/NServiceBus.NHibernate.AcceptanceTests.csproj index 690c88d7e..a71681ede 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests/NServiceBus.NHibernate.AcceptanceTests.csproj +++ b/src/NServiceBus.NHibernate.AcceptanceTests/NServiceBus.NHibernate.AcceptanceTests.csproj @@ -44,16 +44,14 @@ ..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll - False - ..\packages\NServiceBus.Interfaces.4.4.2\lib\net40\NServiceBus.dll + ..\packages\NServiceBus.Interfaces.4.4.8\lib\net40\NServiceBus.dll False ..\packages\NServiceBus.AcceptanceTesting.4.4.2\lib\net40\NServiceBus.AcceptanceTesting.dll - False - ..\packages\NServiceBus.4.4.2\lib\net40\NServiceBus.Core.dll + ..\packages\NServiceBus.4.4.8\lib\net40\NServiceBus.Core.dll False @@ -147,7 +145,7 @@ - + diff --git a/src/NServiceBus.NHibernate.AcceptanceTests/packages.config b/src/NServiceBus.NHibernate.AcceptanceTests/packages.config index f12d4e879..c94ca2ff5 100644 --- a/src/NServiceBus.NHibernate.AcceptanceTests/packages.config +++ b/src/NServiceBus.NHibernate.AcceptanceTests/packages.config @@ -3,8 +3,8 @@ - + - + \ No newline at end of file diff --git a/src/NServiceBus.NHibernate.PerformanceTests/NServiceBus.NHibernate.PerformanceTests.csproj b/src/NServiceBus.NHibernate.PerformanceTests/NServiceBus.NHibernate.PerformanceTests.csproj index 9c00dbc86..ffcd1550e 100644 --- a/src/NServiceBus.NHibernate.PerformanceTests/NServiceBus.NHibernate.PerformanceTests.csproj +++ b/src/NServiceBus.NHibernate.PerformanceTests/NServiceBus.NHibernate.PerformanceTests.csproj @@ -1,4 +1,4 @@ - + @@ -42,12 +42,10 @@ ..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll - False - ..\packages\NServiceBus.Interfaces.4.4.2\lib\net40\NServiceBus.dll + ..\packages\NServiceBus.Interfaces.4.4.8\lib\net40\NServiceBus.dll - False - ..\packages\NServiceBus.4.4.2\lib\net40\NServiceBus.Core.dll + ..\packages\NServiceBus.4.4.8\lib\net40\NServiceBus.Core.dll diff --git a/src/NServiceBus.NHibernate.PerformanceTests/packages.config b/src/NServiceBus.NHibernate.PerformanceTests/packages.config index f05af81d2..f222dce7e 100644 --- a/src/NServiceBus.NHibernate.PerformanceTests/packages.config +++ b/src/NServiceBus.NHibernate.PerformanceTests/packages.config @@ -2,6 +2,6 @@ - - + + \ No newline at end of file diff --git a/src/NServiceBus.NHibernate.Tests/NServiceBus.NHibernate.Tests.csproj b/src/NServiceBus.NHibernate.Tests/NServiceBus.NHibernate.Tests.csproj index fa8d43008..332354701 100644 --- a/src/NServiceBus.NHibernate.Tests/NServiceBus.NHibernate.Tests.csproj +++ b/src/NServiceBus.NHibernate.Tests/NServiceBus.NHibernate.Tests.csproj @@ -1,4 +1,4 @@ - + @@ -41,12 +41,10 @@ ..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll - False - ..\packages\NServiceBus.Interfaces.4.4.2\lib\net40\NServiceBus.dll + ..\packages\NServiceBus.Interfaces.4.4.8\lib\net40\NServiceBus.dll - False - ..\packages\NServiceBus.4.4.2\lib\net40\NServiceBus.Core.dll + ..\packages\NServiceBus.4.4.8\lib\net40\NServiceBus.Core.dll False diff --git a/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_fetching_timeouts_from_storage.cs b/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_fetching_timeouts_from_storage.cs index a2bbe1cba..07c80fc7e 100644 --- a/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_fetching_timeouts_from_storage.cs +++ b/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_fetching_timeouts_from_storage.cs @@ -11,7 +11,7 @@ namespace NServiceBus.TimeoutPersisters.NHibernate.Tests public class When_fetching_timeouts_from_storage : InMemoryDBFixture { [Test] - public void Should_return_the_complete_list_of_timeouts() + public void GetNextChunk_should_return_the_complete_list_of_timeouts() { const int numberOfTimeoutsToAdd = 10; @@ -33,7 +33,7 @@ public void Should_return_the_complete_list_of_timeouts() } [Test] - public void Should_return_the_next_time_of_retrieval() + public void GetNextChunk_should_return_the_next_time_of_retrieval() { var nextTime = DateTime.UtcNow.AddHours(1); @@ -55,5 +55,51 @@ public void Should_return_the_next_time_of_retrieval() Assert.IsTrue((nextTime - nextTimeToRunQuery).TotalSeconds < 1); } + + [Test] + public void Peek_should_return_timeout_with_id() + { + var timeoutData = new TimeoutData + { + Time = DateTime.UtcNow.AddHours(-1), + CorrelationId = "boo", + Destination = new Address("timeouts", RuntimeEnvironment.MachineName), + SagaId = Guid.NewGuid(), + State = new byte[] { 0, 0, 133 }, + Headers = new Dictionary { { "Bar", "34234" }, { "Foo", "aString1" }, { "Super", "aString2" } }, + OwningTimeoutManager = Configure.EndpointName, + }; + persister.Add(timeoutData); + + var result = persister.Peek(timeoutData.Id); + + Assert.AreEqual(timeoutData.Id, result.Id); + Assert.AreEqual(timeoutData.Time.ToString("G"), result.Time.ToString("G")); + Assert.AreEqual(timeoutData.CorrelationId, result.CorrelationId); + Assert.AreEqual(timeoutData.Destination, result.Destination); + Assert.AreEqual(timeoutData.SagaId, result.SagaId); + Assert.AreEqual(timeoutData.State, result.State); + Assert.AreEqual(timeoutData.Headers, result.Headers); + } + + [Test] + public void Peek_should_return_null_when_no_existing_timeout_with_id() + { + var timeoutData = new TimeoutData + { + Time = DateTime.UtcNow.AddHours(-1), + CorrelationId = "boo", + Destination = new Address("timeouts", RuntimeEnvironment.MachineName), + SagaId = Guid.NewGuid(), + State = new byte[] { 0, 0, 133 }, + Headers = new Dictionary { { "Bar", "34234" }, { "Foo", "aString1" }, { "Super", "aString2" } }, + OwningTimeoutManager = Configure.EndpointName, + }; + persister.Add(timeoutData); + + var result = persister.Peek(Guid.NewGuid().ToString()); + + Assert.IsNull(result); + } } } \ No newline at end of file diff --git a/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_removing_timeouts_from_the_storage.cs b/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_removing_timeouts_from_the_storage.cs index bededef19..a12a40c2e 100644 --- a/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_removing_timeouts_from_the_storage.cs +++ b/src/NServiceBus.NHibernate.Tests/TimeoutPersister/When_removing_timeouts_from_the_storage.cs @@ -2,6 +2,9 @@ namespace NServiceBus.TimeoutPersisters.NHibernate.Tests { using System; using System.Collections.Generic; + using System.Threading; + using System.Threading.Tasks; + using System.Transactions; using NUnit.Framework; using Support; using Timeout.Core; @@ -10,7 +13,7 @@ namespace NServiceBus.TimeoutPersisters.NHibernate.Tests public class When_removing_timeouts_from_the_storage : InMemoryDBFixture { [Test] - public void Should_return_the_correct_headers() + public void TryRemove_should_return_the_correct_headers() { var headers = new Dictionary { @@ -20,15 +23,15 @@ public void Should_return_the_correct_headers() }; var timeout = new TimeoutData - { - Time = DateTime.UtcNow.AddHours(-1), - CorrelationId = "boo", - Destination = new Address("timeouts", RuntimeEnvironment.MachineName), - SagaId = Guid.NewGuid(), - State = new byte[] {1, 1, 133, 200}, - Headers = headers, - OwningTimeoutManager = Configure.EndpointName, - }; + { + Time = DateTime.UtcNow.AddHours(-1), + CorrelationId = "boo", + Destination = new Address("timeouts", RuntimeEnvironment.MachineName), + SagaId = Guid.NewGuid(), + State = new byte[] { 1, 1, 133, 200 }, + Headers = headers, + OwningTimeoutManager = Configure.EndpointName, + }; persister.Add(timeout); TimeoutData timeoutData; @@ -38,26 +41,26 @@ public void Should_return_the_correct_headers() } [Test] - public void Should_remove_timeouts_by_id() + public void TryRemove_should_remove_timeouts_by_id() { var t1 = new TimeoutData - { - Time = DateTime.Now.AddYears(-1), - OwningTimeoutManager = Configure.EndpointName, - Headers = new Dictionary + { + Time = DateTime.Now.AddYears(-1), + OwningTimeoutManager = Configure.EndpointName, + Headers = new Dictionary { {"Header1", "Value1"} } - }; + }; var t2 = new TimeoutData - { - Time = DateTime.Now.AddYears(-1), - OwningTimeoutManager = Configure.EndpointName, - Headers = new Dictionary + { + Time = DateTime.Now.AddYears(-1), + OwningTimeoutManager = Configure.EndpointName, + Headers = new Dictionary { {"Header1", "Value1"} } - }; + }; persister.Add(t1); persister.Add(t2); @@ -79,35 +82,96 @@ public void Should_remove_timeouts_by_id() } [Test] - public void Should_remove_timeouts_by_sagaid() + public void TryRemove_should_return_false_when_timeout_already_deleted() + { + var timeout = new TimeoutData(); + + persister.Add(timeout); + + Assert.IsTrue(persister.TryRemove(timeout.Id)); + Assert.IsFalse(persister.TryRemove(timeout.Id)); + } + + [Test] + public void TryRemove_should_work_with_concurrent_transactions() + { + var timeout = new TimeoutData + { + Time = DateTime.Now + }; + + persister.Add(timeout); + + var t1EnteredTx = new AutoResetEvent(false); + var t2EnteredTx = new AutoResetEvent(false); + + var task1 = Task.Factory.StartNew(() => + { + using (var tx = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions + { + IsolationLevel = IsolationLevel.ReadCommitted + })) + { + t1EnteredTx.Set(); + t2EnteredTx.WaitOne(); + var result = persister.TryRemove(timeout.Id); + tx.Complete(); + return result; + } + }); + + var task2 = Task.Factory.StartNew(() => + { + using (var tx = new TransactionScope(TransactionScopeOption.Required, new TransactionOptions + { + IsolationLevel = IsolationLevel.ReadCommitted + })) + { + t2EnteredTx.Set(); + t1EnteredTx.WaitOne(); + var result = persister.TryRemove(timeout.Id); + tx.Complete(); + return result; + } + }); + + Assert.True(task1.Wait(TimeSpan.FromSeconds(30))); + Assert.True(task2.Wait(TimeSpan.FromSeconds(30))); + + // one delete should succeed, the other one shouldn't + Assert.IsTrue(task1.Result || task2.Result); + Assert.IsFalse(task1.Result && task2.Result); + } + + [Test] + public void RemoveTimeoutBy_should_remove_timeouts_by_sagaid() { var sagaId1 = Guid.NewGuid(); var sagaId2 = Guid.NewGuid(); var t1 = new TimeoutData - { - SagaId = sagaId1, - Time = DateTime.Now.AddYears(1), - OwningTimeoutManager = Configure.EndpointName, - Headers = new Dictionary + { + SagaId = sagaId1, + Time = DateTime.Now.AddYears(1), + OwningTimeoutManager = Configure.EndpointName, + Headers = new Dictionary { {"Header1", "Value1"} } - }; + }; var t2 = new TimeoutData - { - SagaId = sagaId2, - Time = DateTime.Now.AddYears(1), - OwningTimeoutManager = Configure.EndpointName, - Headers = new Dictionary + { + SagaId = sagaId2, + Time = DateTime.Now.AddYears(1), + OwningTimeoutManager = Configure.EndpointName, + Headers = new Dictionary { {"Header1", "Value1"} } - }; + }; persister.Add(t1); persister.Add(t2); - persister.RemoveTimeoutBy(sagaId1); persister.RemoveTimeoutBy(sagaId2); diff --git a/src/NServiceBus.NHibernate.Tests/packages.config b/src/NServiceBus.NHibernate.Tests/packages.config index 687e224b3..7beba6697 100644 --- a/src/NServiceBus.NHibernate.Tests/packages.config +++ b/src/NServiceBus.NHibernate.Tests/packages.config @@ -2,8 +2,8 @@ - - + + \ No newline at end of file diff --git a/src/NServiceBus.NHibernate/NServiceBus.NHibernate.csproj b/src/NServiceBus.NHibernate/NServiceBus.NHibernate.csproj index 986ba4918..33b2fc61b 100644 --- a/src/NServiceBus.NHibernate/NServiceBus.NHibernate.csproj +++ b/src/NServiceBus.NHibernate/NServiceBus.NHibernate.csproj @@ -1,4 +1,4 @@ - + @@ -13,7 +13,7 @@ 512 ..\NServiceBus.snk true - 89e09834 + 7fba8ee9 true @@ -46,7 +46,6 @@ False ..\packages\Janitor.Fody.1.1.0.0\Lib\portable-net4+sl5+wp8+win8+wpa81+MonoAndroid16+MonoTouch40\Janitor.dll - False @@ -54,12 +53,11 @@ ..\packages\NHibernate.4.0.1.4000\lib\net40\NHibernate.dll - False - ..\packages\NServiceBus.Interfaces.4.4.2\lib\net40\NServiceBus.dll + ..\packages\NServiceBus.Interfaces.4.4.8\lib\net40\NServiceBus.dll - False - ..\packages\NServiceBus.4.4.2\lib\net40\NServiceBus.Core.dll + ..\packages\NServiceBus.4.4.8\lib\net40\NServiceBus.Core.dll + True False @@ -126,15 +124,15 @@ - This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - + + \ No newline at end of file diff --git a/src/NServiceBus.NHibernate/Persistence/ConfigureNHibernate.cs b/src/NServiceBus.NHibernate/Persistence/ConfigureNHibernate.cs index d6770d809..dcb2736a8 100644 --- a/src/NServiceBus.NHibernate/Persistence/ConfigureNHibernate.cs +++ b/src/NServiceBus.NHibernate/Persistence/ConfigureNHibernate.cs @@ -245,8 +245,10 @@ private static IDictionary OverrideConnectionStringSettingIfNotN return new Dictionary(properties); } - var overriddenProperties = new Dictionary(properties); - overriddenProperties[Environment.ConnectionString] = connectionStringOverride; + var overriddenProperties = new Dictionary(properties) + { + [Environment.ConnectionString] = connectionStringOverride + }; return overriddenProperties; } diff --git a/src/NServiceBus.NHibernate/TimeoutPersisters/TimeoutStorage.cs b/src/NServiceBus.NHibernate/TimeoutPersisters/TimeoutStorage.cs index 62835ca4b..decedcfa3 100644 --- a/src/NServiceBus.NHibernate/TimeoutPersisters/TimeoutStorage.cs +++ b/src/NServiceBus.NHibernate/TimeoutPersisters/TimeoutStorage.cs @@ -14,7 +14,7 @@ namespace NServiceBus.TimeoutPersisters.NHibernate /// /// Timeout storage implementation for NHibernate. /// - public class TimeoutStorage : IPersistTimeouts + public class TimeoutStorage : IPersistTimeouts, IPersistTimeoutsV2 { /// /// The current . @@ -120,16 +120,7 @@ public bool TryRemove(string timeoutId, out TimeoutData timeoutData) return false; } - timeoutData = new TimeoutData - { - CorrelationId = te.CorrelationId, - Destination = te.Destination, - Id = te.Id.ToString(), - SagaId = te.SagaId, - State = te.State, - Time = te.Time, - Headers = ConvertStringToDictionary(te.Headers), - }; + timeoutData = MapToTimeoutData(te); var queryString = string.Format("delete {0} where Id = :id", typeof(TimeoutEntity)); @@ -189,6 +180,47 @@ static string ConvertDictionaryToString(ICollection data) return serializer.SerializeObject(data); } + public TimeoutData Peek(string timeoutId) + { + TimeoutData timeoutData = null; + + using (var conn = SessionFactory.GetConnection()) + using (var session = SessionFactory.OpenStatelessSessionEx(conn)) + using (var tx = session.BeginAmbientTransactionAware(IsolationLevel.ReadCommitted)) + { + var te = session.Get(new Guid(timeoutId), LockMode.Upgrade); + + if (te != null) + { + timeoutData = MapToTimeoutData(te); + } + + tx.Commit(); + } + + return timeoutData; + } + + static TimeoutData MapToTimeoutData(TimeoutEntity te) + { + return new TimeoutData + { + CorrelationId = te.CorrelationId, + Destination = te.Destination, + Id = te.Id.ToString(), + SagaId = te.SagaId, + State = te.State, + Time = te.Time, + Headers = ConvertStringToDictionary(te.Headers) + }; + } + + public bool TryRemove(string timeoutId) + { + TimeoutData timeoutData; + return this.TryRemove(timeoutId, out timeoutData); + } + static readonly JsonMessageSerializer serializer = new JsonMessageSerializer(null); } } diff --git a/src/NServiceBus.NHibernate/packages.config b/src/NServiceBus.NHibernate/packages.config index 1df385b5c..4195becbe 100644 --- a/src/NServiceBus.NHibernate/packages.config +++ b/src/NServiceBus.NHibernate/packages.config @@ -1,12 +1,12 @@  - + - - + + \ No newline at end of file