Skip to content

Commit

Permalink
Merge branch 'hotfix-5.0.3'
Browse files Browse the repository at this point in the history
  • Loading branch information
John Simons committed Oct 27, 2014
2 parents 6055b9f + 23bab60 commit 68f7d3f
Show file tree
Hide file tree
Showing 6 changed files with 192 additions and 37 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
namespace NServiceBus.AcceptanceTests.Basic
{
using System;
using NServiceBus.AcceptanceTesting;
using NServiceBus.AcceptanceTests.EndpointTemplates;
using NUnit.Framework;

public class When_using_ineedinitialization : NServiceBusAcceptanceTest
{
[Test]
public void Should_be_able_to_set_endpoint_name()
{
var context = new Context();

Scenario.Define(context)
.WithEndpoint<Sender>()
.WithEndpoint<Receiver>()
.Done(c => c.WasCalled)
.Run();

Assert.True(context.WasCalled, "The message handler should be called");
}

public class Context : ScenarioContext
{
public bool WasCalled { get; set; }
}

public class Sender : EndpointConfigurationBuilder
{
public Sender()
{
EndpointSetup<DefaultServer>();
}
}

public class Receiver : EndpointConfigurationBuilder
{
public Receiver()
{
EndpointSetup<DefaultServer>()
.AddMapping<SendMessage>(typeof(Sender));
}

public class SetEndpointName : INeedInitialization
{
public void Customize(BusConfiguration config)
{
config.EndpointName("ineedinitialization_receiver");
}
}

public class SendMessageToSender: IWantToRunWhenBusStartsAndStops
{
public IBus Bus { get; set; }

public void Start()
{
Bus.Send(new SendMessage());
}

public void Stop()
{
}
}
}

[Serializable]
public class SendMessage : ICommand
{
}

[Serializable]
public class MyMessage : ICommand
{
public Guid Id { get; set; }
}

public class SendMessageHandler : IHandleMessages<SendMessage>
{
public IBus Bus { get; set; }

public void Handle(SendMessage message)
{
Bus.Send("ineedinitialization_receiver", new MyMessage());
}
}

public class MyMessageHandler : IHandleMessages<MyMessage>
{
public Context Context { get; set; }

public IBus Bus { get; set; }

public void Handle(MyMessage message)
{
Context.WasCalled = true;
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="Audit\When_using_audit_message_is_received.cs" />
<Compile Include="Basic\When_using_ineedinitialization.cs" />
<Compile Include="Basic\When_using_callbacks_from_older_versions.cs" />
<Compile Include="Basic\When_sending_from_a_send_only.cs" />
<Compile Include="Basic\When_using_a_greedy_convention.cs" />
Expand All @@ -67,6 +68,7 @@
<Compile Include="DataBus\When_sending_with_custom_IDataBus.cs" />
<Compile Include="Exceptions\Message_without_an_id.cs" />
<Compile Include="Sagas\When_message_has_a_saga_id.cs" />
<Compile Include="Tx\Issue_2481.cs" />
<Compile Include="Volatile\When_sending_to_non_durable_endpoint.cs" />
<Compile Include="Encryption\When_using_Rijndael_with_multikey.cs" />
<Compile Include="Encryption\When_using_Rijndael_with_custom.cs" />
Expand Down
58 changes: 58 additions & 0 deletions src/NServiceBus.AcceptanceTests/Tx/Issue_2481.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
namespace NServiceBus.AcceptanceTests.Tx
{
using System;
using System.Transactions;
using NServiceBus.AcceptanceTesting;
using NServiceBus.AcceptanceTests.EndpointTemplates;
using NServiceBus.AcceptanceTests.ScenarioDescriptors;
using NUnit.Framework;

public class Issue_2481 : NServiceBusAcceptanceTest
{
[Test]
public void Should_enlist_the_receive_in_the_dtc_tx()
{
Scenario.Define<Context>()
.WithEndpoint<DTCEndpoint>(b => b.Given(bus => bus.SendLocal(new MyMessage())))
.Done(c => c.HandlerInvoked)
.Repeat(r => r.For<AllDtcTransports>())
.Should(c => Assert.False(c.CanEnlistPromotable, "There should exists a DTC tx"))
.Run();
}


public class Context : ScenarioContext
{
public bool HandlerInvoked { get; set; }

public bool CanEnlistPromotable { get; set; }
}

public class DTCEndpoint : EndpointConfigurationBuilder
{
public DTCEndpoint()
{
EndpointSetup<DefaultServer>(c=>c.Transactions().Enable());
}

public class MyMessageHandler : IHandleMessages<MyMessage>
{
public Context Context { get; set; }

public void Handle(MyMessage messageThatIsEnlisted)
{
Context.CanEnlistPromotable = Transaction.Current.EnlistPromotableSinglePhase(new FakePromotableResourceManager());
Context.HandlerInvoked = true;
}
}
}

[Serializable]
public class MyMessage : ICommand
{
}



}
}
57 changes: 28 additions & 29 deletions src/NServiceBus.Core/BusConfiguration.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,13 @@ public BusConfiguration() : base(new SettingsHolder())
configurationSourceToUse = new DefaultConfigurationSource();
Settings.Set<PipelineModifications>(new PipelineModifications());
Pipeline = new PipelineSettings(this);

Settings.SetDefault("Endpoint.SendOnly", false);
Settings.SetDefault("Transactions.Enabled", true);
Settings.SetDefault("Transactions.IsolationLevel", IsolationLevel.ReadCommitted);
Settings.SetDefault("Transactions.DefaultTimeout", TransactionManager.DefaultTimeout);
Settings.SetDefault("Transactions.SuppressDistributedTransactions", false);
Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", false);
}

/// <summary>
Expand Down Expand Up @@ -193,9 +200,29 @@ internal Configure BuildConfiguration()
}
}

Settings.SetDefault("TypesToScan", scannedTypes);

Configure.ActivateAndInvoke<INeedInitialization>(scannedTypes, t => t.Customize(this));

UseTransportExtensions.SetupTransport(this);
var container = customBuilder ?? new AutofacObjectBuilder();
RegisterEndpointWideDefaults();

Settings.SetDefault<IConfigurationSource>(configurationSourceToUse);

var endpointHelper = new EndpointHelper(new StackTrace());

if (endpointVersion == null)
{
endpointVersion = endpointHelper.GetEndpointVersion();
}

if (endpointName == null)
{
endpointName = endpointHelper.GetDefaultEndpointName();
}

Settings.SetDefault("EndpointName", endpointName);
Settings.SetDefault("EndpointVersion", endpointVersion);

if (publicReturnAddress != null)
{
Expand All @@ -206,8 +233,6 @@ internal Configure BuildConfiguration()

Settings.SetDefault<Conventions>(conventionsBuilder.Conventions);

Configure.ActivateAndInvoke<INeedInitialization>(scannedTypes, t => t.Customize(this));

return new Configure(Settings, container, registrations, Pipeline);
}

Expand All @@ -224,32 +249,6 @@ IEnumerable<Assembly> GetAssembliesInDirectory(string path, params string[] asse
.Assemblies;
}

void RegisterEndpointWideDefaults()
{
var endpointHelper = new EndpointHelper(new StackTrace());

if (endpointVersion == null)
{
endpointVersion = endpointHelper.GetEndpointVersion();
}

if (endpointName == null)
{
endpointName = endpointHelper.GetDefaultEndpointName();
}

Settings.SetDefault("EndpointName", endpointName);
Settings.SetDefault("TypesToScan", scannedTypes);
Settings.SetDefault("EndpointVersion", endpointVersion);
Settings.SetDefault("Endpoint.SendOnly", false);
Settings.SetDefault("Transactions.Enabled", true);
Settings.SetDefault("Transactions.IsolationLevel", IsolationLevel.ReadCommitted);
Settings.SetDefault("Transactions.DefaultTimeout", TransactionManager.DefaultTimeout);
Settings.SetDefault("Transactions.SuppressDistributedTransactions", false);
Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", false);
Settings.SetDefault<IConfigurationSource>(configurationSourceToUse);
}

IConfigurationSource configurationSourceToUse;
ConventionsBuilder conventionsBuilder = new ConventionsBuilder();
List<Action<IConfigureComponents>> registrations = new List<Action<IConfigureComponents>>();
Expand Down
6 changes: 3 additions & 3 deletions src/NServiceBus.Core/Settings/TransactionSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ internal TransactionSettings(BusConfiguration config)
public TransactionSettings Disable()
{
config.Settings.Set("Transactions.Enabled", false);
config.Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", false);
config.Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", true);
config.Settings.SetDefault("Transactions.SuppressDistributedTransactions", true);

return this;
Expand All @@ -35,7 +35,7 @@ public TransactionSettings Disable()
public TransactionSettings Enable()
{
config.Settings.Set("Transactions.Enabled", true);
config.Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", true);
config.Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", false);
config.Settings.SetDefault("Transactions.SuppressDistributedTransactions", false);

return this;
Expand All @@ -61,7 +61,7 @@ public TransactionSettings IsolationLevel(IsolationLevel isolationLevel)
public TransactionSettings DisableDistributedTransactions()
{
config.Settings.Set("Transactions.SuppressDistributedTransactions", true);
config.Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", false);
config.Settings.SetDefault("Transactions.DoNotWrapHandlersExecutionInATransactionScope", true);
return this;
}

Expand Down
5 changes: 0 additions & 5 deletions src/NServiceBus.Core/Transports/Msmq/MsmqMessageSender.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,11 +97,6 @@ MessageQueueTransactionType GetTransactionTypeForSend()
return MessageQueueTransactionType.None;
}

if (SuppressDistributedTransactions)
{
return MessageQueueTransactionType.Single;
}

return Transaction.Current != null
? MessageQueueTransactionType.Automatic
: MessageQueueTransactionType.Single;
Expand Down

0 comments on commit 68f7d3f

Please sign in to comment.