/// <summary>
        /// Called when the feature should perform its initialization. This call will only happen if the feature is enabled.
        /// </summary>
        protected override void Setup(FeatureConfigurationContext context)
        {
            var builder = new NHibernateConfigurationBuilder(context.Settings, "Timeout", "NHibernate.Timeouts.Configuration", "StorageConfiguration");
            builder.AddMappings<TimeoutEntityMap>();
            var config = builder.Build();

            if (RunInstaller(context))
            {
                context.Settings.Get<Installer.SchemaUpdater>().Execute = identity =>
                {
                    new OptimizedSchemaUpdate(config.Configuration).Execute(false, true);
                    return Task.FromResult(0);
                };
            }

            var timeoutsCleanupExecutionInterval = context.Settings.GetOrDefault<TimeSpan?>("NHibernate.Timeouts.CleanupExecutionInterval") ?? TimeSpan.FromMinutes(2);

            context.Container.ConfigureComponent(b =>
            {
                var sessionFactory = config.Configuration.BuildSessionFactory();
                return new TimeoutPersister(
                    context.Settings.EndpointName().ToString(),
                    sessionFactory,
                    new NHibernateSynchronizedStorageAdapter(sessionFactory), new NHibernateSynchronizedStorage(sessionFactory),
                    timeoutsCleanupExecutionInterval);
            }, DependencyLifecycle.SingleInstance);

            context.RegisterStartupTask(new DetectIncorrectIndexesStartupTask(config.Configuration));
        }
        /// <summary>
        /// Called when the feature should perform its initialization. This call will only happen if the feature is enabled.
        /// </summary>
        protected override void Setup(FeatureConfigurationContext context)
        {
            var builder = new NHibernateConfigurationBuilder(context.Settings, "Timeout", "NHibernate.Timeouts.Configuration", "StorageConfiguration");

            builder.AddMappings <TimeoutEntityMap>();
            var config = builder.Build();

            if (RunInstaller(context))
            {
                context.Settings.Get <Installer.SchemaUpdater>().Execute = identity =>
                {
                    new OptimizedSchemaUpdate(config.Configuration).Execute(false, true);
                    return(Task.FromResult(0));
                };
            }

            context.Container.ConfigureComponent(b =>
            {
                var sessionFactory = config.Configuration.BuildSessionFactory();
                return(new TimeoutPersister(
                           context.Settings.EndpointName().ToString(),
                           sessionFactory,
                           new NHibernateSynchronizedStorageAdapter(sessionFactory), new NHibernateSynchronizedStorage(sessionFactory)));
            }, DependencyLifecycle.SingleInstance);
        }
Beispiel #3
0
        /// <summary>
        /// Called when the feature should perform its initialization. This call will only happen if the feature is enabled.
        /// </summary>
        protected override void Setup(FeatureConfigurationContext context)
        {
            var builder        = new NHibernateConfigurationBuilder(context.Settings, "Saga", "StorageConfiguration");
            var config         = builder.Build();
            var sharedMappings = context.Settings.Get <SharedMappings>();

            var outboxEnabled = context.Settings.IsFeatureActive(typeof(Outbox));

            if (outboxEnabled)
            {
                sharedMappings.AddMapping(configuration => ApplyMappings(configuration, context));
                config.Configuration.Properties[Environment.TransactionStrategy] = typeof(AdoNetTransactionFactory).FullName;
            }

            sharedMappings.ApplyTo(config.Configuration);

            var sessionFactory = config.Configuration.BuildSessionFactory();

            context.Container.ConfigureComponent(b => new NHibernateSynchronizedStorage(sessionFactory), DependencyLifecycle.SingleInstance);
            context.Container.ConfigureComponent(b => new NHibernateSynchronizedStorageAdapter(sessionFactory), DependencyLifecycle.SingleInstance);
            //Legacy
            context.Container.ConfigureComponent(b => new NHibernateStorageContext(), DependencyLifecycle.InstancePerUnitOfWork);

            if (outboxEnabled)
            {
                var factory   = context.Settings.Get <IOutboxPersisterFactory>();
                var persister = factory.Create(sessionFactory, context.Settings.EndpointName());
                context.Container.ConfigureComponent(b => persister, DependencyLifecycle.SingleInstance);
                context.RegisterStartupTask(b => new OutboxCleaner(persister, b.Build <CriticalError>()));
            }

            var runInstaller = context.Settings.Get <bool>("NHibernate.Common.AutoUpdateSchema");

            if (runInstaller)
            {
                context.Settings.Get <Installer.SchemaUpdater>().Execute = identity =>
                {
                    var schemaUpdate = new OptimizedSchemaUpdate(config.Configuration);
                    var sb           = new StringBuilder();
                    schemaUpdate.Execute(s => sb.AppendLine(s), true);

                    if (schemaUpdate.Exceptions.Any())
                    {
                        var aggregate = new AggregateException(schemaUpdate.Exceptions);

                        var errorMessage = @"Schema update failed.
The following exception(s) were thrown:
{0}

TSql Script:
{1}";
                        throw new Exception(string.Format(errorMessage, aggregate.Flatten(), sb));
                    }



                    return(Task.FromResult(0));
                };
            }
        }
Beispiel #4
0
 public void Should_pass_validation_if_connection_string_is_defined_by_name()
 {
     Assert.IsTrue(NHibernateConfigurationBuilder.ContainsRequiredProperties(new Dictionary <string, string>
     {
         { "connection.connection_string_name", "aString" }
     }));
 }
        /// <summary>
        /// Called when the feature should perform its initialization. This call will only happen if the feature is enabled.
        /// </summary>
        protected override void Setup(FeatureConfigurationContext context)
        {
            var builder = new NHibernateConfigurationBuilder(context.Settings, "Subscription", "NHibernate.Subscriptions.Configuration", "StorageConfiguration");

            builder.AddMappings <SubscriptionMap>();
            var config = builder.Build();

            if (RunInstaller(context))
            {
                context.Settings.Get <Installer.SchemaUpdater>().Execute = identity =>
                {
                    new OptimizedSchemaUpdate(config.Configuration).Execute(false, true);

                    return(Task.FromResult(0));
                };
            }

            var sessionFactory = config.Configuration.BuildSessionFactory();
            var persister      = context.Settings.HasSetting(CacheExpirationSettingsKey)
                ? new CachedSubscriptionPersister(sessionFactory, context.Settings.Get <TimeSpan>(CacheExpirationSettingsKey))
                : new SubscriptionPersister(sessionFactory);

            context.Container.ConfigureComponent(b => persister, DependencyLifecycle.SingleInstance);
            context.RegisterStartupTask(new SubscriptionPersisterInitTask(persister));
        }
Beispiel #6
0
        public TestFixtureBase(Action <NHibernateConfigurationBuilder>?options = null)
        {
            var cfgBuilder = new NHibernateConfigurationBuilder(new UnitTestPersistenceStrategy());

            options?.Invoke(cfgBuilder);
            var cfg = cfgBuilder.Build();

            this.sessionFactory = cfg.BuildSessionFactory();
        }
Beispiel #7
0
            public IDictionary <string, string> Execute()
            {
                NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
                {
                    new ConnectionStringSettings("NServiceBus/Persistence", "specified")
                };

                var builder = new NHibernateConfigurationBuilder(new SettingsHolder(), "NotUsed", "NotUsed");

                return(builder.Build().Configuration.Properties);
            }
Beispiel #8
0
        /// <summary>
        /// Called when the feature should perform its initialization. This call will only happen if the feature is enabled.
        /// </summary>
        protected override void Setup(FeatureConfigurationContext context)
        {
            var builder = new NHibernateConfigurationBuilder(context.Settings, "Deduplication", "NHibernate.GatewayDeduplication.Configuration", "StorageConfiguration");

            builder.AddMappings <DeduplicationMessageMap>();
            var config = builder.Build();

            if (RunInstaller(context))
            {
                context.Settings.Get <Installer.SchemaUpdater>().Execute = identity =>
                {
                    new SchemaUpdate(config.Configuration).Execute(false, true);

                    return(Task.FromResult(0));
                };
            }
            context.Container.ConfigureComponent(b => new GatewayDeduplication(config.Configuration.BuildSessionFactory()), DependencyLifecycle.SingleInstance);
        }
Beispiel #9
0
        public void Should_assign_default_properties()
        {
            NHibernateSettingRetriever.AppSettings       = () => new NameValueCollection();
            NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
            {
                new ConnectionStringSettings("NServiceBus/Persistence", connectionString)
            };

            var builder = new NHibernateConfigurationBuilder(new SettingsHolder(), "NotUsed", "NotUsed");

            var expected = new Dictionary <string, string>
            {
                { "dialect", NHibernateConfigurationBuilder.DefaultDialect },
                { "connection.connection_string", connectionString }
            };

            CollectionAssert.IsSubsetOf(expected, builder.Build().Configuration.Properties);
        }
Beispiel #10
0
        public void Should_assign_overridden_connectionString_if_specified()
        {
            NHibernateSettingRetriever.AppSettings       = () => new NameValueCollection();
            NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
            {
                new ConnectionStringSettings("NServiceBus/Persistence", connectionString),
                new ConnectionStringSettings("NServiceBus/Persistence/NHibernate/Timeout",
                                             "timeout_connection_string")
            };

            var builder = new NHibernateConfigurationBuilder(new SettingsHolder(), "Timeout", "NotUsed");

            var expected = new Dictionary <string, string>
            {
                { "connection.connection_string", "timeout_connection_string" }
            };

            CollectionAssert.IsSubsetOf(expected, builder.Build().Configuration.Properties);
        }
Beispiel #11
0
        public void Should_skip_settings_that_are_not_for_persistence()
        {
            NHibernateSettingRetriever.AppSettings = () => new NameValueCollection
            {
                { "myOtherSetting1", "provider" },
                { "myOtherSetting2", "driver_class" },
            };

            NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
            {
                new ConnectionStringSettings("NServiceBus/Persistence", connectionString)
            };
            var builder = new NHibernateConfigurationBuilder(new SettingsHolder(), "NotUsed", "NotUsed");

            var expected = new Dictionary <string, string>
            {
                { "connection.connection_string", connectionString },
            };

            CollectionAssert.IsSubsetOf(expected, builder.Build().Configuration.Properties);
        }
Beispiel #12
0
        public void Should_assign_all_optional_properties()
        {
            NHibernateSettingRetriever.AppSettings = () => new NameValueCollection
            {
                { "NServiceBus/Persistence/NHibernate/connection.provider", "provider" },
                { "NServiceBus/Persistence/NHibernate/connection.driver_class", "driver_class" },
            };

            NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
            {
                new ConnectionStringSettings("NServiceBus/Persistence", connectionString)
            };

            var builder = new NHibernateConfigurationBuilder(new SettingsHolder(), "NotUsed", "NotUsed");

            var expected = new Dictionary <string, string>
            {
                { "connection.connection_string", connectionString },
                { "connection.provider", "provider" },
                { "connection.driver_class", "driver_class" },
            };

            CollectionAssert.IsSubsetOf(expected, builder.Build().Configuration.Properties);
        }
Beispiel #13
0
            public IDictionary <string, string> Execute()
            {
                var builder = new NHibernateConfigurationBuilder(new SettingsHolder(), "NotUsed", "NotUsed");

                return(builder.Build().Configuration.Properties);
            }
Beispiel #14
0
 public void Should_fail_validation_if_no_connection_string_is_defined()
 {
     Assert.IsFalse(NHibernateConfigurationBuilder.ContainsRequiredProperties(new Dictionary <string, string>()));
 }
Beispiel #15
0
            // Builds NHibernateConfiguration for the given assembly (bounded context)
            protected virtual Configuration BuildNHibernateConfiguration(Assembly assembly)
            {
                var configurationBuilder = new NHibernateConfigurationBuilder("db", assembly);

                return(configurationBuilder.Build());
            }
        private void InitNHibernateSessionFactory()
        {
            var configuration = new NHibernateConfigurationBuilder().Build();

            SessionFactory = configuration.BuildSessionFactory();
        }