Exemplo n.º 1
0
        /// <summary>
        /// Executes the installer.
        /// </summary>
        /// <param name="identity">The user for whom permissions will be given.</param>
        public void Install(string identity)
        {
            if (RunInstaller)
            {
                var configSection = Configure.GetConfigSection <TimeoutPersisterConfig>();

                if (configSection != null)
                {
                    if (configSection.NHibernateProperties.Count == 0)
                    {
                        throw new InvalidOperationException(
                                  "No NHibernate properties found. Please specify NHibernateProperties in your TimeoutPersisterConfig section");
                    }

                    foreach (var property in configSection.NHibernateProperties.ToProperties())
                    {
                        ConfigureNHibernate.TimeoutPersisterProperties[property.Key] = property.Value;
                    }
                }

                ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(ConfigureNHibernate.TimeoutPersisterProperties);

                var configuration = ConfigureNHibernate.CreateConfigurationWith(ConfigureNHibernate.TimeoutPersisterProperties);
                ConfigureNHibernate.AddMappings <TimeoutEntityMap>(configuration);
                new SchemaUpdate(configuration).Execute(false, true);
            }
        }
        public void UseNHibernateTimeoutPersister_Reads_From_AppSettings_And_ConnectionStrings()
        {
            NHibernateSettingRetriever.AppSettings = () => new NameValueCollection
            {
                {
                    "NServiceBus/Persistence/NHibernate/dialect",
                    dialect
                }
            };

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

            ConfigureNHibernate.Init();

            Configure.With(Enumerable.Empty <Type>())
            .DefineEndpointName("Foo")
            .DefaultBuilder()
            .UseNHibernateTimeoutPersister();

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

            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.TimeoutPersisterProperties);
        }
        /// <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 configuration = context.Settings.GetOrDefault <Configuration>("NHibernate.Subscriptions.Configuration") ?? context.Settings.GetOrDefault <Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                var properties = new ConfigureNHibernate(context.Settings).SubscriptionStorageProperties;
                configuration = new Configuration().SetProperties(properties);
            }
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            ConfigureNHibernate.AddMappings <SubscriptionMap>(configuration);

            context.Container.ConfigureComponent <Unicast.Subscriptions.NHibernate.Installer.Installer>(DependencyLifecycle.SingleInstance)
            .ConfigureProperty(x => x.Configuration, configuration)
            .ConfigureProperty(x => x.RunInstaller, RunInstaller(context));

            var sessionSource = new SubscriptionStorageSessionProvider(configuration.BuildSessionFactory());

            context.Container.RegisterSingleton(sessionSource);

            if (context.Settings.HasSetting("NHibernate.Subscriptions.CacheExpiration"))
            {
                context.Container.RegisterSingleton <ISubscriptionStorage>(new CachedSubscriptionPersister(sessionSource, context.Settings.Get <TimeSpan>("NHibernate.Subscriptions.CacheExpiration")));
            }
            else
            {
                context.Container.ConfigureComponent <SubscriptionPersister>(DependencyLifecycle.InstancePerCall);
            }
        }
        public void UseNHibernateSubscriptionPersister_Reads_First_From_DBSubscriptionStorageConfig()
        {
            NHibernateSettingRetriever.AppSettings = () => new NameValueCollection
            {
                {
                    "NServiceBus/Persistence/NHibernate/dialect",
                    "Shouldn't be this"
                }
            };

            NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
            {
                new ConnectionStringSettings(
                    "NServiceBus/Persistence/NHibernate",
                    "Shouldn't be this")
            };
            ConfigureNHibernate.Init();

            Configure.ConfigurationSource = new FakeConfigurationSource();

            Configure.With(Enumerable.Empty <Type>())
            .DefineEndpointName("Foo")
            .DefaultBuilder()
            .UseNHibernateSubscriptionPersister();

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

            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.SubscriptionStorageProperties);
        }
        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 config = new ConfigureNHibernate(new SettingsHolder());

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

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

            CollectionAssert.IsSubsetOf(expectedDefault, config.DistributorPersisterProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, config.GatewayDeduplicationProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, config.OutboxProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, config.SagaPersisterProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, config.SubscriptionStorageProperties);
            CollectionAssert.IsSubsetOf(expectedForTimeout, config.TimeoutPersisterProperties);
        }
Exemplo n.º 6
0
        public static void Execute()
        {
            Program.EnsureDatabaseExists("NHibernate.Sessions.DemoApplication.MultipleSessionFactories.TodoItems");
            Program.EnsureDatabaseExists("NHibernate.Sessions.DemoApplication.MultipleSessionFactories.Users");
            new SchemaExport(getConfiguration(typeof(TodoItems).Name)).Execute(true, true, false);
            new SchemaExport(getConfiguration(typeof(Users).Name)).Execute(true, true, false);

            var multiSessionFactoryConfigurer = ConfigureNHibernate
                                                .ForMultipleSessionFactories(x =>
            {
                Console.WriteLine("Building NHibernate configuration for {0}", x);
                return(getConfiguration(x));
            })
                                                .WithCachedConfiguration(Assembly.GetExecutingAssembly())
                                                .WithBackgroundInitialization()
                                                .WithInitializedCallback(x => Console.WriteLine("{0} initialized", x.GetType().Name))
                                                .WithSessionOpenedCallback(x => Console.WriteLine("{0} opened", x.GetType().Name))
                                                .RegisterSessionFactory <TodoItems>()
                                                .RegisterSessionFactory <Users>();

            Console.WriteLine("Creating an {0}", typeof(ILazySessionsScope).Name);
            var lazySessionsScoper = multiSessionFactoryConfigurer.CreateLazySessions();

            Console.WriteLine("Creating an {0}", typeof(ILazySessionFactories).Name);
            var lazySessionFactories = multiSessionFactoryConfigurer.CreateLazySessionFactories();

            Console.WriteLine("Creating a {0}", typeof(MultipleSessionFactoriesScenarios).FullName);
            using (var scenarios = new MultipleSessionFactoriesScenarios(lazySessionsScoper, lazySessionFactories))
            {
                Console.WriteLine("Executing various scenarios by using different service types to demonstrate the different usage patterns");

                var users = scenarios.ExecuteWithLazySessions(x => x.GetAllUsers());
                Console.WriteLine("Found {0} users", users.Count);
                users = scenarios.ExecuteWithSessionFuncContexts(x => x.GetAllUsers());
                Console.WriteLine("Found {0} users", users.Count);
                users = scenarios.ExecuteWithLazySessionScopeContexts(x => x.GetAllUsers());
                Console.WriteLine("Found {0} users", users.Count);

                var todoItems = scenarios.ExecuteWithLazySessions(x => x.GetAllTodoItems(users[0].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.ExecuteWithSessionFuncContexts(x => x.GetTodoItemsDueThisWeek(users[1].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.ExecuteWithLazySessionScopeContexts(x => x.GetTodoItemsDueThisWeek(users[0].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.ExecuteWithLazySessions(x => x.GetTodoItemsDueThisMonth(users[1].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.ExecuteWithSessionFuncContexts(x => x.GetTodoItemsCompletedLastWeek(users[0].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.ExecuteWithLazySessionScopeContexts(x => x.GetUpcomingTodoItems(users[1].Id, Priority.Urgent));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                var success = scenarios.ExecuteWithLazySessions(x => x.CompleteTodoItem(todoItems[0].Id));
                Console.WriteLine("TodoItem {0} {1} completed", todoItems[0].Id, success ? "was" : "wasn't");
            }
        }
Exemplo n.º 7
0
 public void Should_not_throw_if_connectionstringname_is_used_instead_of_connectionstring()
 {
     Assert.DoesNotThrow(() => ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(new Dictionary <string, string>
     {
         { "connection.connection_string_name", "asdad" }
     }));
 }
        /// <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 properties = new ConfigureNHibernate(context.Settings).GatewayDeduplicationProperties;

            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(properties);

            var configuration = context.Settings.GetOrDefault <Configuration>("NHibernate.GatewayDeduplication.Configuration") ?? context.Settings.GetOrDefault <Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                configuration = new Configuration()
                                .SetProperties(properties);
            }

            ConfigureNHibernate.AddMappings <DeduplicationMessageMap>(configuration);

            Deduplication.NHibernate.Installer.Installer.configuration = configuration;

            if (context.Settings.HasSetting("NHibernate.GatewayDeduplication.AutoUpdateSchema"))
            {
                Deduplication.NHibernate.Installer.Installer.RunInstaller = context.Settings.Get <bool>("NHibernate.GatewayDeduplication.AutoUpdateSchema");
            }
            else
            {
                Deduplication.NHibernate.Installer.Installer.RunInstaller = context.Settings.Get <bool>("NHibernate.Common.AutoUpdateSchema");
            }

            context.Container.ConfigureComponent <Deduplication.NHibernate.GatewayDeduplication>(DependencyLifecycle.SingleInstance)
            .ConfigureProperty(p => p.SessionFactory, configuration.BuildSessionFactory());
        }
Exemplo n.º 9
0
        public void Should_assign_overriden_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")
            };

            ConfigureNHibernate.Init();

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

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

            CollectionAssert.IsSubsetOf(expectedDefault, ConfigureNHibernate.DistributorPersisterProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, ConfigureNHibernate.GatewayPersisterProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, ConfigureNHibernate.SagaPersisterProperties);
            CollectionAssert.IsSubsetOf(expectedDefault, ConfigureNHibernate.SubscriptionStorageProperties);
            CollectionAssert.IsSubsetOf(expectedForTimeout, ConfigureNHibernate.TimeoutPersisterProperties);
        }
        /// <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 configuration = context.Settings.GetOrDefault<Configuration>("NHibernate.Subscriptions.Configuration") ?? context.Settings.GetOrDefault<Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                var properties = new ConfigureNHibernate(context.Settings).SubscriptionStorageProperties;
                configuration = new Configuration().SetProperties(properties);
            }
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            ConfigureNHibernate.AddMappings<SubscriptionMap>(configuration);

            context.Container.ConfigureComponent<Unicast.Subscriptions.NHibernate.Installer.Installer>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(x => x.Configuration, configuration)
                .ConfigureProperty(x => x.RunInstaller, RunInstaller(context));

            var sessionSource = new SubscriptionStorageSessionProvider(configuration.BuildSessionFactory());

            context.Container.RegisterSingleton(sessionSource);

            if (context.Settings.HasSetting("NHibernate.Subscriptions.CacheExpiration"))
            {
                context.Container.RegisterSingleton<ISubscriptionStorage>(new CachedSubscriptionPersister(sessionSource, context.Settings.Get<TimeSpan>("NHibernate.Subscriptions.CacheExpiration")));
            }
            else
            {
                context.Container.ConfigureComponent<SubscriptionPersister>(DependencyLifecycle.InstancePerCall);
            }
        }
Exemplo n.º 11
0
        public void Should_assign_all_optional_properties_to_all_persisters()
        {
            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)
            };

            ConfigureNHibernate.Init();

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

            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.DistributorPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.GatewayPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.SagaPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.SubscriptionStorageProperties);
            CollectionAssert.IsSubsetOf(expected, ConfigureNHibernate.TimeoutPersisterProperties);
        }
Exemplo n.º 12
0
        public void Setup()
        {
            Configure.ConfigurationSource = new DefaultConfigurationSource();

            NHibernateSettingRetriever.AppSettings = () => new NameValueCollection
            {
                { "NServiceBus/Persistence/NHibernate/dialect", dialect }
            };

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

            ConfigureNHibernate.Init();

            Configure.With(Enumerable.Empty <Type>())
            .DefineEndpointName("Foo")
            .DefaultBuilder()
            .UseNHibernateTimeoutPersister();

            persister      = Configure.Instance.Builder.Build <TimeoutStorage>();
            sessionFactory = persister.SessionFactory;

            new Installer.Installer().Install(WindowsIdentity.GetCurrent().Name);
        }
        /// <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 configuration = context.Settings.GetOrDefault<Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                var properties = new ConfigureNHibernate(context.Settings).SagaPersisterProperties;
                configuration = new Configuration().SetProperties(properties);
            }
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            context.Settings.Get<SharedMappings>().ApplyTo(configuration);

            string connString;

            if (!configuration.Properties.TryGetValue(Environment.ConnectionString, out connString))
            {
                string connStringName;

                if (configuration.Properties.TryGetValue(Environment.ConnectionStringName, out connStringName))
                {
                    var connectionStringSettings = System.Configuration.ConfigurationManager.ConnectionStrings[connStringName];

                    connString = connectionStringSettings.ConnectionString;
                }
            }

            context.Container.RegisterSingleton(new SessionFactoryProvider(configuration.BuildSessionFactory()));

            var disableConnectionSharing = DisableTransportConnectionSharing(context);

            context.Container
                .ConfigureProperty<DbConnectionProvider>(p => p.DisableConnectionSharing, disableConnectionSharing)
                .ConfigureProperty<DbConnectionProvider>(p => p.DefaultConnectionString, connString);

            context.Pipeline.Register<OpenSqlConnectionBehavior.Registration>();
            context.Pipeline.Register<OpenSessionBehavior.Registration>();

            context.Container.ConfigureComponent<OpenSqlConnectionBehavior>(DependencyLifecycle.InstancePerCall)
                .ConfigureProperty(p => p.ConnectionString, connString)
                .ConfigureProperty(p => p.DisableConnectionSharing, disableConnectionSharing);

            context.Container.ConfigureComponent<OpenSessionBehavior>(DependencyLifecycle.InstancePerCall)
                .ConfigureProperty(p => p.ConnectionString, connString)
                .ConfigureProperty(p => p.DisableConnectionSharing, disableConnectionSharing)
                .ConfigureProperty(p => p.SessionCreator, context.Settings.GetOrDefault<Func<ISessionFactory, string, ISession>>("NHibernate.SessionCreator"));

            context.Container.ConfigureComponent(b => new NHibernateStorageContext(b.Build<PipelineExecutor>(), connString), DependencyLifecycle.InstancePerUnitOfWork);
            context.Container.ConfigureComponent<SharedConnectionStorageSessionProvider>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(p => p.ConnectionString, connString);

            if (context.Settings.GetOrDefault<bool>("NHibernate.RegisterManagedSession"))
            {
                context.Container.ConfigureComponent(b => b.Build<NHibernateStorageContext>().Session, DependencyLifecycle.InstancePerCall);
            }

            context.Container.ConfigureComponent<Installer>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(x => x.Configuration, configuration)
                .ConfigureProperty(x => x.RunInstaller, context.Settings.Get<bool>("NHibernate.Common.AutoUpdateSchema"));
        }
Exemplo n.º 14
0
        /// <summary>
        /// Configures NHibernate Timeout Persister.
        /// </summary>
        /// <remarks>
        /// Reads configuration settings from <a href="http://msdn.microsoft.com/en-us/library/ms228154.aspx">&lt;appSettings&gt; config section</a> and <a href="http://msdn.microsoft.com/en-us/library/bf7sd233">&lt;connectionStrings&gt; config section</a>.
        /// </remarks>
        /// <example>
        /// An example that shows the minimum configuration:
        /// <code lang="XML" escaped="true">
        ///  <appSettings>
        ///    <!-- other optional settings examples -->
        ///    <add key="NServiceBus/Persistence/NHibernate/connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
        ///    <add key="NServiceBus/Persistence/NHibernate/connection.driver_class" value="NHibernate.Driver.Sql2008ClientDriver"/>
        ///    <!-- For more setting see http://www.nhforge.org/doc/nh/en/#configuration-hibernatejdbc and http://www.nhforge.org/doc/nh/en/#configuration-optional -->
        ///  </appSettings>
        ///
        ///  <connectionStrings>
        ///    <!-- Default connection string for all persisters -->
        ///    <add name="NServiceBus/Persistence/NHibernate" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True" />
        ///
        ///    <!-- Optional overrides per persister -->
        ///    <add name="NServiceBus/Persistence/NHibernate/Timeout" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=timeout;Integrated Security=True" />
        ///  </connectionStrings>
        /// </code>
        /// </example>
        /// <param name="config">The configuration object.</param>
        /// <returns>The configuration object.</returns>
        public static Configure UseNHibernateTimeoutPersister(this Configure config)
        {
            var configSection = Configure.GetConfigSection <TimeoutPersisterConfig>();

            if (configSection != null)
            {
                if (configSection.NHibernateProperties.Count == 0)
                {
                    throw new InvalidOperationException(
                              "No NHibernate properties found. Please specify NHibernateProperties in your TimeoutPersisterConfig section");
                }

                foreach (var property in configSection.NHibernateProperties.ToProperties())
                {
                    ConfigureNHibernate.TimeoutPersisterProperties[property.Key] = property.Value;
                }
            }

            ConfigureNHibernate.ConfigureSqlLiteIfRunningInDebugModeAndNoConfigPropertiesSet(ConfigureNHibernate.TimeoutPersisterProperties);

            var properties = ConfigureNHibernate.TimeoutPersisterProperties;

            return(config.UseNHibernateTimeoutPersisterInternal(ConfigureNHibernate.CreateConfigurationWith(properties),
                                                                configSection == null || configSection.UpdateSchema));
        }
Exemplo n.º 15
0
 public void Should_not_throw_if_minimum_properties_are_set()
 {
     Assert.DoesNotThrow(() => ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(new Dictionary <string, string>
     {
         { "connection.connection_string", "asdad" }
     }));
 }
        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 config = new ConfigureNHibernate(new SettingsHolder());

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

            CollectionAssert.IsSubsetOf(expected, config.DistributorPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, config.GatewayDeduplicationProperties);
            CollectionAssert.IsSubsetOf(expected, config.OutboxProperties);
            CollectionAssert.IsSubsetOf(expected, config.SagaPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, config.SubscriptionStorageProperties);
            CollectionAssert.IsSubsetOf(expected, config.TimeoutPersisterProperties);
        }
Exemplo n.º 17
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 configuration = context.Settings.GetOrDefault <Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                var properties = new ConfigureNHibernate(context.Settings).SagaPersisterProperties;
                configuration = new Configuration().SetProperties(properties);
            }
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            context.Settings.Get <SharedMappings>().ApplyTo(configuration);

            string connString;

            if (!configuration.Properties.TryGetValue(Environment.ConnectionString, out connString))
            {
                string connStringName;

                if (configuration.Properties.TryGetValue(Environment.ConnectionStringName, out connStringName))
                {
                    var connectionStringSettings = System.Configuration.ConfigurationManager.ConnectionStrings[connStringName];

                    connString = connectionStringSettings.ConnectionString;
                }
            }

            context.Container.RegisterSingleton(new SessionFactoryProvider(configuration.BuildSessionFactory()));

            var disableConnectionSharing = DisableTransportConnectionSharing(context);

            context.Container
            .ConfigureProperty <DbConnectionProvider>(p => p.DisableConnectionSharing, disableConnectionSharing)
            .ConfigureProperty <DbConnectionProvider>(p => p.DefaultConnectionString, connString);

            context.Pipeline.Register <OpenSqlConnectionBehavior.Registration>();
            context.Pipeline.Register <OpenSessionBehavior.Registration>();

            context.Container.ConfigureComponent <OpenSqlConnectionBehavior>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(p => p.ConnectionString, connString)
            .ConfigureProperty(p => p.DisableConnectionSharing, disableConnectionSharing);

            context.Container.ConfigureComponent <OpenSessionBehavior>(DependencyLifecycle.InstancePerCall)
            .ConfigureProperty(p => p.ConnectionString, connString)
            .ConfigureProperty(p => p.DisableConnectionSharing, disableConnectionSharing)
            .ConfigureProperty(p => p.SessionCreator, context.Settings.GetOrDefault <Func <ISessionFactory, string, ISession> >("NHibernate.SessionCreator"));

            context.Container.ConfigureComponent(b => new NHibernateStorageContext(b.Build <PipelineExecutor>(), connString), DependencyLifecycle.InstancePerUnitOfWork);
            context.Container.ConfigureComponent <SharedConnectionStorageSessionProvider>(DependencyLifecycle.SingleInstance)
            .ConfigureProperty(p => p.ConnectionString, connString);

            if (context.Settings.GetOrDefault <bool>("NHibernate.RegisterManagedSession"))
            {
                context.Container.ConfigureComponent(b => b.Build <NHibernateStorageContext>().Session, DependencyLifecycle.InstancePerCall);
            }

            context.Container.ConfigureComponent <Installer>(DependencyLifecycle.SingleInstance)
            .ConfigureProperty(x => x.Configuration, configuration)
            .ConfigureProperty(x => x.RunInstaller, context.Settings.Get <bool>("NHibernate.Common.AutoUpdateSchema"));
        }
            public IDictionary <string, string> Execute()
            {
                var config        = new ConfigureNHibernate(new SettingsHolder());
                var configuration =
                    ConfigureNHibernate.CreateConfigurationWith(config.DistributorPersisterProperties);

                return(configuration.Properties);
            }
Exemplo n.º 19
0
            public IDictionary <string, string> Execute()
            {
                ConfigureNHibernate.Init();
                var configuration =
                    ConfigureNHibernate.CreateConfigurationWith(ConfigureNHibernate.DistributorPersisterProperties);

                return(configuration.Properties);
            }
Exemplo n.º 20
0
        public static Configure UseNHibernateTimeoutPersisterWithSQLiteAndAutomaticSchemaGeneration(this Configure config)
        {
            ConfigureNHibernate.TimeoutPersisterProperties["dialect"] = "NHibernate.Dialect.SQLiteDialect";
            ConfigureNHibernate.TimeoutPersisterProperties["connection.connection_string"] = "Data Source=.\\NServiceBus.Timeouts.sqlite;Version=3;New=True;";

            var configuration = ConfigureNHibernate.CreateConfigurationWith(ConfigureNHibernate.TimeoutPersisterProperties);

            return(config.UseNHibernateTimeoutPersisterInternal(configuration, true));
        }
        /// <summary>
        /// Configures NHibernate Gateway Persister.
        /// </summary>
        /// <remarks>
        /// Reads configuration settings from <a href="http://msdn.microsoft.com/en-us/library/ms228154.aspx">&lt;appSettings&gt; config section</a> and <a href="http://msdn.microsoft.com/en-us/library/bf7sd233">&lt;connectionStrings&gt; config section</a>.
        /// </remarks>
        /// <example>
        /// An example that shows the minimum configuration:
        /// <code lang="XML" escaped="true">
        ///  <appSettings>
        ///    <!-- optional settings examples -->
        ///    <add key="NServiceBus/Persistence/NHibernate/connection.provider" value="NHibernate.Connection.DriverConnectionProvider"/>
        ///    <add key="NServiceBus/Persistence/NHibernate/connection.driver_class" value="NHibernate.Driver.Sql2008ClientDriver"/>
        ///    <!-- For more setting see http://www.nhforge.org/doc/nh/en/#configuration-hibernatejdbc and http://www.nhforge.org/doc/nh/en/#configuration-optional -->
        ///  </appSettings>
        ///
        ///  <connectionStrings>
        ///    <!-- Default connection string for all persisters -->
        ///    <add name="NServiceBus/Persistence/NHibernate" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=nservicebus;Integrated Security=True" />
        ///
        ///    <!-- Optional overrides per persister -->
        ///    <add name="NServiceBus/Persistence/NHibernate/Gateway" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=gateway;Integrated Security=True" />
        ///  </connectionStrings>
        /// </code>
        /// </example>
        /// <param name="config">The configuration object.</param>
        /// <returns>The configuration object.</returns>
        public static Configure UseNHibernateGatewayPersister(this Configure config)
        {
            ConfigureNHibernate.ConfigureSqlLiteIfRunningInDebugModeAndNoConfigPropertiesSet(ConfigureNHibernate.GatewayPersisterProperties);

            var properties    = ConfigureNHibernate.GatewayPersisterProperties;
            var configuration = ConfigureNHibernate.CreateConfigurationWith(properties);

            return(config.UseNHibernateGatewayPersisterInternal(configuration));
        }
Exemplo n.º 22
0
        public static Configure NHibernateSagaPersister(this Configure config, IDictionary <string, string> nhibernateProperties,
                                                        bool autoUpdateSchema)
        {
            foreach (var property in nhibernateProperties)
            {
                ConfigureNHibernate.SagaPersisterProperties[property.Key] = property.Value;
            }

            return(config.UseNHibernateSagaPersisterInternal(ConfigureNHibernate.CreateConfigurationWith(ConfigureNHibernate.SagaPersisterProperties), autoUpdateSchema));
        }
Exemplo n.º 23
0
        public static void Start()
        {
            var container = new UnityContainer();

            GlobalConfiguration.Configuration.DependencyResolver = new UnityDependencyResolver(container);

            RegisterSettings.Register(container);
            ConfigureNHibernate.Configure(container);
            RegisterRepositories.Register(container);
        }
Exemplo n.º 24
0
        /// <summary>
        /// Executes the installer.
        /// </summary>
        /// <param name="identity">The user for whom permissions will be given.</param>
        public void Install(string identity)
        {
            if (RunInstaller)
            {
                ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(ConfigureNHibernate.GatewayPersisterProperties);

                var configuration = ConfigureNHibernate.CreateConfigurationWith(ConfigureNHibernate.GatewayPersisterProperties);
                ConfigureNHibernate.AddMappings <GatewayMessageMap>(configuration);
                new SchemaUpdate(configuration).Execute(false, true);
            }
        }
Exemplo n.º 25
0
        public void Update_schema_can_be_specified_by_the_user()
        {
            var builder    = new SessionFactoryBuilder(Configure.TypesToScan);
            var properties = ConfigureNHibernate.SagaPersisterProperties;

            var sessionFactory = builder.Build(ConfigureNHibernate.CreateConfigurationWith(properties));

            using (var session = sessionFactory.OpenSession())
            {
                session.CreateCriteria(typeof(MySaga)).List <MySaga>();
            }
        }
Exemplo n.º 26
0
        static Configure UseNHibernateTimeoutPersisterInternal(this Configure config, Configuration configuration, bool autoUpdateSchema)
        {
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(ConfigureNHibernate.TimeoutPersisterProperties);

            TimeoutPersisters.NHibernate.Installer.Installer.RunInstaller = autoUpdateSchema;
            ConfigureNHibernate.AddMappings <TimeoutEntityMap>(configuration);

            config.Configurer.ConfigureComponent <TimeoutStorage>(DependencyLifecycle.SingleInstance)
            .ConfigureProperty(p => p.SessionFactory, configuration.BuildSessionFactory());

            return(config);
        }
Exemplo n.º 27
0
        public static void Execute()
        {
            Program.EnsureDatabaseExists("NHibernate.Sessions.DemoApplication.SingleSessionFactory");
            const string connectionStringName = "SingleSessionFactory";

            new SchemaExport(getConfiguration(connectionStringName)).Execute(true, true, false);

            Console.WriteLine("Configuring an {0}", typeof(ISingleSessionFactoryConfigurer).Name);
            var singleSessionFactoryConfigurer = ConfigureNHibernate
                                                 .ForSingleSessionFactory(() =>
            {
                Console.WriteLine("Building NHibernate configuration for {0}", connectionStringName);
                return(getConfiguration(connectionStringName));
            })
                                                 .WithLazyInitialization()
                                                 .WithInitializedCallback(x => Console.WriteLine("{0} initialized", x.GetType().Name))
                                                 .WithSessionOpenedCallback(x => Console.WriteLine("{0} opened", x.GetType().Name));

            Console.WriteLine("Creating an {0}", typeof(ILazySessionScope).Name);
            var lazySessionScoper = singleSessionFactoryConfigurer.CreateLazySession();

            Console.WriteLine("Creating an {0}", typeof(ILazySessionFactory).Name);
            var lazySessionFactory = singleSessionFactoryConfigurer.CreateLazySessionFactory();

            Console.WriteLine("Creating a {0}", typeof(SingleSessionFactoryScenarios).FullName);
            using (var scenarios = new SingleSessionFactoryScenarios(lazySessionScoper, lazySessionFactory))
            {
                var users = scenarios.Execute(x => x.GetAllUsers());
                Console.WriteLine("Found {0} users", users.Count);

                var todoItems = scenarios.Execute(x => x.GetAllTodoItems(users[0].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.Execute(x => x.GetTodoItemsDueThisWeek(users[1].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.Execute(x => x.GetTodoItemsDueThisWeek(users[0].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.Execute(x => x.GetTodoItemsDueThisMonth(users[1].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.Execute(x => x.GetTodoItemsCompletedLastWeek(users[0].Id));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                todoItems = scenarios.Execute(x => x.GetUpcomingTodoItems(users[1].Id, Priority.Urgent));
                Console.WriteLine("Found {0} todo items", todoItems.Count);

                var success = scenarios.Execute(x => x.CompleteTodoItem(todoItems[0].Id));
                Console.WriteLine("TodoItem {0} {1} completed", todoItems[0].Id, success ? "was" : "wasn't");
            }
        }
Exemplo n.º 28
0
            public IDictionary <string, string> Execute()
            {
                NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
                {
                    new ConnectionStringSettings("NServiceBus/Persistence", "specified")
                };

                ConfigureNHibernate.Init();
                var configuration =
                    ConfigureNHibernate.CreateConfigurationWith(ConfigureNHibernate.DistributorPersisterProperties);

                return(configuration.Properties);
            }
Exemplo n.º 29
0
        public void Should_display_no_warning_and_not_configure_properties_if_debugger_is_not_attached_and_properties_not_set()
        {
            if (System.Diagnostics.Debugger.IsAttached)
            {
                Assert.Ignore("Can't run this unit test with debugger attached.");
                return;
            }

            var properties = new Dictionary <string, string>();

            ConfigureNHibernate.ConfigureSqlLiteIfRunningInDebugModeAndNoConfigPropertiesSet(properties);

            Assert.AreEqual(0, properties.Count);
        }
        private static Configure UseNHibernateGatewayPersisterInternal(this Configure config, Configuration configuration)
        {
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            GatewayPersister.NHibernate.Installer.Installer.RunInstaller = true;

            ConfigureNHibernate.AddMappings <GatewayMessageMap>(configuration);

            config.Configurer.ConfigureComponent <GatewayPersister.NHibernate.GatewayPersister>(
                DependencyLifecycle.SingleInstance)
            .ConfigureProperty(p => p.SessionFactory, configuration.BuildSessionFactory());

            return(config.RunGateway());
        }
Exemplo n.º 31
0
        public void Should_display_warning_and_configure_properties_if_debugger_is_attached_and_properties_not_set()
        {
            if (!System.Diagnostics.Debugger.IsAttached)
            {
                Assert.Ignore("Debugger needs to be attached to run this unit test.");
                return;
            }

            var properties = new Dictionary <string, string>();

            ConfigureNHibernate.ConfigureSqlLiteIfRunningInDebugModeAndNoConfigPropertiesSet(properties);

            Assert.IsTrue(properties.ContainsKey("dialect"));
            Assert.AreEqual("NHibernate.Dialect.SQLiteDialect", properties["dialect"]);
        }
        static Configure UseNHibernateSubscriptionPersisterInternal(this Configure config, Configuration configuration, bool autoUpdateSchema)
        {
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(ConfigureNHibernate.SubscriptionStorageProperties);

            Unicast.Subscriptions.NHibernate.Installer.Installer.RunInstaller = autoUpdateSchema;

            ConfigureNHibernate.AddMappings <SubscriptionMap>(configuration);

            var sessionSource = new SubscriptionStorageSessionProvider(configuration.BuildSessionFactory());

            config.Configurer.RegisterSingleton <ISubscriptionStorageSessionProvider>(sessionSource);
            config.Configurer.ConfigureComponent <SubscriptionStorage>(DependencyLifecycle.InstancePerCall);

            return(config);
        }
        /// <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 properties = new ConfigureNHibernate(context.Settings)
                             .TimeoutPersisterProperties;

            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(properties);

            var configuration = context.Settings.GetOrDefault <Configuration>("NHibernate.Timeouts.Configuration") ?? context.Settings.GetOrDefault <Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                configuration = new Configuration()
                                .SetProperties(properties);
            }

            ConfigureNHibernate.AddMappings <TimeoutEntityMap>(configuration);

            TimeoutPersisters.NHibernate.Installer.Installer.configuration = configuration;

            if (context.Settings.HasSetting("NHibernate.Timeouts.AutoUpdateSchema"))
            {
                TimeoutPersisters.NHibernate.Installer.Installer.RunInstaller = context.Settings.Get <bool>("NHibernate.Timeouts.AutoUpdateSchema");
            }
            else
            {
                TimeoutPersisters.NHibernate.Installer.Installer.RunInstaller = context.Settings.Get <bool>("NHibernate.Common.AutoUpdateSchema");
            }

            string connString;

            if (!configuration.Properties.TryGetValue(Environment.ConnectionString, out connString))
            {
                string connStringName;

                if (configuration.Properties.TryGetValue(Environment.ConnectionStringName, out connStringName))
                {
                    var connectionStringSettings = System.Configuration.ConfigurationManager.ConnectionStrings[connStringName];

                    connString = connectionStringSettings.ConnectionString;
                }
            }

            context.Container.ConfigureComponent <TimeoutPersister>(DependencyLifecycle.SingleInstance)
            .ConfigureProperty(p => p.ConnectionString, connString)
            .ConfigureProperty(p => p.SessionFactory, configuration.BuildSessionFactory())
            .ConfigureProperty(p => p.EndpointName, context.Settings.EndpointName());
        }
        /// <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 configuration = context.Settings.GetOrDefault<Configuration>("NHibernate.GatewayDeduplication.Configuration") ?? context.Settings.GetOrDefault<Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                var properties = new ConfigureNHibernate(context.Settings).GatewayDeduplicationProperties;
                configuration = new Configuration().SetProperties(properties);
            }
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            ConfigureNHibernate.AddMappings<DeduplicationMessageMap>(configuration);

            context.Container.ConfigureComponent<Deduplication.NHibernate.Installer.Installer>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(x => x.Configuration, configuration)
                .ConfigureProperty(x => x.RunInstaller, RunInstaller(context));

            context.Container.ConfigureComponent<Deduplication.NHibernate.GatewayDeduplication>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(p => p.SessionFactory, configuration.BuildSessionFactory());
        }
        /// <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 configuration = context.Settings.GetOrDefault<Configuration>("NHibernate.Timeouts.Configuration") ?? context.Settings.GetOrDefault<Configuration>("StorageConfiguration");

            if (configuration == null)
            {
                var properties = new ConfigureNHibernate(context.Settings).TimeoutPersisterProperties;
                configuration = new Configuration().SetProperties(properties);
            }
            ConfigureNHibernate.ThrowIfRequiredPropertiesAreMissing(configuration.Properties);

            ConfigureNHibernate.AddMappings<TimeoutEntityMap>(configuration);

            context.Container.ConfigureComponent<TimeoutPersisters.NHibernate.Installer.Installer>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(x => x.Configuration, configuration)
                .ConfigureProperty(x => x.RunInstaller, RunInstaller(context));
                

            string connString;

            if (!configuration.Properties.TryGetValue(Environment.ConnectionString, out connString))
            {
                string connStringName;

                if (configuration.Properties.TryGetValue(Environment.ConnectionStringName, out connStringName))
                {
                    var connectionStringSettings = System.Configuration.ConfigurationManager.ConnectionStrings[connStringName];

                    connString = connectionStringSettings.ConnectionString;
                }
            }

            context.Container.ConfigureComponent<TimeoutPersister>(DependencyLifecycle.SingleInstance)
                .ConfigureProperty(p => p.ConnectionString, connString)
                .ConfigureProperty(p => p.SessionFactory, configuration.BuildSessionFactory())
                .ConfigureProperty(p => p.EndpointName, context.Settings.EndpointName());
        }
        public void Should_assign_default_properties_to_all_persisters()
        {
            NHibernateSettingRetriever.AppSettings = () => new NameValueCollection();
            NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
                {
                    new ConnectionStringSettings("NServiceBus/Persistence", connectionString)
                };

            var config = new ConfigureNHibernate(new SettingsHolder());

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

            CollectionAssert.IsSubsetOf(expected, config.DistributorPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, config.GatewayDeduplicationProperties);
            CollectionAssert.IsSubsetOf(expected, config.OutboxProperties);
            CollectionAssert.IsSubsetOf(expected, config.SagaPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, config.SubscriptionStorageProperties);
            CollectionAssert.IsSubsetOf(expected, config.TimeoutPersisterProperties);
        }
            public IDictionary<string, string> Execute()
            {

                var config = new ConfigureNHibernate(new SettingsHolder());
                var configuration =
                    ConfigureNHibernate.CreateConfigurationWith(config.DistributorPersisterProperties);

                return configuration.Properties;
            }
            public IDictionary<string, string> Execute()
            {
                NHibernateSettingRetriever.ConnectionStrings = () => new ConnectionStringSettingsCollection
                {
                    new ConnectionStringSettings("NServiceBus/Persistence", "specified")
                };

                var config = new ConfigureNHibernate(new SettingsHolder());
                var configuration =
                    ConfigureNHibernate.CreateConfigurationWith(config.DistributorPersisterProperties);

                return configuration.Properties;
            }
        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 config = new ConfigureNHibernate(new SettingsHolder());

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

            CollectionAssert.IsSubsetOf(expected, config.DistributorPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, config.GatewayDeduplicationProperties);
            CollectionAssert.IsSubsetOf(expected, config.OutboxProperties);
            CollectionAssert.IsSubsetOf(expected, config.SagaPersisterProperties);
            CollectionAssert.IsSubsetOf(expected, config.SubscriptionStorageProperties);
            CollectionAssert.IsSubsetOf(expected, config.TimeoutPersisterProperties);
        }