Пример #1
0
        /// <summary>Sets properties configuration dictionary based on configuration in the database section.</summary>
        /// <param name="config">The database section configuration.</param>
        /// <param name="connectionStrings">Connection strings from configuration</param>
        protected void SetupProperties(DatabaseSection config, ConnectionStringsSection connectionStrings)
        {
            NHibernate.Cfg.Environment.UseReflectionOptimizer = Utility.GetTrustLevel() > System.Web.AspNetHostingPermissionLevel.Medium;
            Properties[NHibernate.Cfg.Environment.ProxyFactoryFactoryClass] = "NHibernate.ByteCode.Castle.ProxyFactoryFactory, NHibernate.ByteCode.Castle";

            // connection

            Properties[NHibernate.Cfg.Environment.ConnectionStringName] = config.ConnectionStringName;
            Properties[NHibernate.Cfg.Environment.ConnectionProvider]   = "NHibernate.Connection.DriverConnectionProvider";
            Properties[NHibernate.Cfg.Environment.Hbm2ddlKeyWords]      = "none";

            SetupFlavourProperties(config, connectionStrings);

            SetupCacheProperties(config);

            // custom config properties

            foreach (string key in config.HibernateProperties.AllKeys)
            {
                Properties[key] = config.HibernateProperties[key].Value;
            }
        }
        public XmlRepository(DatabaseSection config, ConnectionStringsSection connectionStrings)
        {
            _tEntityType         = typeof(TEntity);
            _tEntityIdProperty   = _tEntityType.GetProperty("ID");
            _tEntityNameProperty = _tEntityType.GetProperty("Name");

            if (config != null && !string.IsNullOrEmpty(config.ConnectionStringName))
            {
                ConnectionStringSettings css = connectionStrings.ConnectionStrings[config.ConnectionStringName];
                if (css == null)
                {
                    throw new ConfigurationErrorsException("Could not find the connection string named '" +
                                                           config.ConnectionStringName +
                                                           "' that was defined in the n2/database configuration section.");
                }

                databaseDir = css.ConnectionString;
            }

            if (string.IsNullOrEmpty(databaseDir))
            {
                databaseDir = System.Web.Hosting.HostingEnvironment.MapPath("~/App_Data/ContentItemsXml");
            }

            if (string.IsNullOrEmpty(databaseDir))
            {
                databaseDir = Path.Combine(Path.GetTempPath(), "xmlrepotest" + GetHashCode()); // ensure different paths for replication tests
            }
            if (!Directory.Exists(DataDirectoryPhysical))
            {
                Directory.CreateDirectory(DataDirectoryPhysical);
            }
            else if (config == null && connectionStrings == null)
            {
                InternalDeleteFiles("*"); // assume unit test and delete all files
            }

            _logger.Debug("NEW XmlRepository " + typeof(TEntity).FullName + " in " + databaseDir);
        }
        public ReplicationManager(
            IPersister persister,
            IItemFinder finder,
            IReplicationStorage repstore,
            IFileSystemFactory fileSystemFactory,
            DatabaseSection dataBaseSection,
            ISecurityManager security,
            IIndexer indexer,    // optional
            IFlushable flushable // optional
            )
        {
            _repstore  = repstore;
            _security  = security;
            _persister = persister;
            _finder    = finder;
            _indexer   = indexer;
            _flushable = flushable;

            // detect sync direction from Database Type and double check via config
            string value = ConfigurationManager.AppSettings["XmlReplication"] ?? "false";

            IsSlave  = value.Equals("Slave", StringComparison.InvariantCultureIgnoreCase) & (dataBaseSection.Flavour == DatabaseFlavour.Xml);
            IsMaster = value.Equals("Master", StringComparison.InvariantCultureIgnoreCase) & !IsSlave;

            if (IsMaster || IsSlave)
            {
                // only initialize if replication is active
                var storageConfig = (FileSystemNamespace)Enum.Parse(typeof(FileSystemNamespace),
                                                                    ConfigurationManager.AppSettings["AzureReplicationStorageContainerName"] ??
                                                                    "ReplicationStorageDebug");

                _fileSystem = fileSystemFactory.Create(storageConfig);

                // constructing these dependencies to ensure same filesystem and simplify construction
                _replicationWriteLockManager = new ReplicationWriteLockManager(_fileSystem);
                _replicationReadLockManager  = new ReplicationReadLockManager(_fileSystem);
            }
            _replicationLogPath = "/_Xml_Sync_Log";
        }
Пример #4
0
        /// <summary>Creates a new instance of the <see cref="ConfigurationBuilder"/>.</summary>
        public ConfigurationBuilder(IDefinitionProvider[] definitionProviders, ClassMappingGenerator generator, IWebContext webContext, ConfigurationBuilderParticipator[] participators, DatabaseSection config, ConnectionStringsSection connectionStrings)
        {
            this.definitionProviders = definitionProviders;
            this.generator           = generator;
            this.webContext          = webContext;
            this.participators       = participators;

            if (config == null)
            {
                config = new DatabaseSection();
            }
            TryLocatingHbmResources = config.TryLocatingHbmResources;
            tablePrefix             = config.TablePrefix;
            batchSize        = config.BatchSize;
            childrenLaziness = config.Children.Laziness;
            childrenCascade  = config.Children.Cascade;
            childrenBatch    = config.Children.Batch;
            cacheRegion      = config.CacheRegion;

            SetupProperties(config, connectionStrings);
            SetupMappings(config);
        }
Пример #5
0
        /// <summary>Sets properties configuration dictionary based on configuration in the database section.</summary>
        /// <param name="config">The database section configuration.</param>
        /// <param name="connectionStrings">Connection strings from configuration</param>
        protected void SetupProperties(DatabaseSection config, ConnectionStringsSection connectionStrings)
        {
            NHibernate.Cfg.Environment.UseReflectionOptimizer = Utility.GetTrustLevel() > System.Web.AspNetHostingPermissionLevel.Medium;

            // connection

            Properties[NHibernate.Cfg.Environment.ConnectionStringName] = config.ConnectionStringName;
            Properties[NHibernate.Cfg.Environment.ConnectionProvider]   = "NHibernate.Connection.DriverConnectionProvider";
            Properties[NHibernate.Cfg.Environment.Hbm2ddlKeyWords]      = "none";

            SetupFlavourProperties(config, connectionStrings);

            bool useNonBatcher =
                // configured batch size <= 1
                (batchSize.HasValue && batchSize.Value <= 1)
                // medium trust in combination with sql client driver
                // causes fault: Attempt by method 'NHibernate.AdoNet.SqlClientSqlCommandSet..ctor()' to access method 'System.Data.SqlClient.SqlCommandSet..ctor()' failed.   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
                || (Utility.GetTrustLevel() <= System.Web.AspNetHostingPermissionLevel.Medium && typeof(SqlClientDriver).IsAssignableFrom(Type.GetType(Properties[Environment.ConnectionDriver])));

            if (useNonBatcher)
            {
                Properties[NHibernate.Cfg.Environment.BatchStrategy] = typeof(NonBatchingBatcherFactory).AssemblyQualifiedName;
            }

            SetupCacheProperties(config);

            if (config.Isolation.HasValue)
            {
                Properties[NHibernate.Cfg.Environment.Isolation] = config.Isolation.ToString();
            }

            foreach (string key in config.HibernateProperties.AllKeys)
            {
                Properties[key] = config.HibernateProperties[key].Value;
            }
        }
Пример #6
0
 public NHInstallationManager(IHost host, DefinitionMap map, ContentActivator activator, Importer importer, IPersister persister, ISessionProvider sessionProvider, IConfigurationBuilder configurationBuilder, IWebContext webContext, ConnectionMonitor connectionContext, DatabaseSection config)
     : base(connectionContext, importer, webContext, persister, activator)
 {
     this.host                       = host;
     this.map                        = map;
     this.activator                  = activator;
     this.importer                   = importer;
     this.persister                  = persister;
     this.sessionProvider            = sessionProvider;
     this.configurationBuilder       = configurationBuilder;
     this.webContext                 = webContext;
     this.connectionContext          = connectionContext;
     this.config                     = config;
     this.isDatabaseFileSystemEnbled = config.Files.StorageLocation == FileStoreLocation.Database;
 }
Пример #7
0
        public ContentChangeTracker(IAsyncIndexer indexer, IPersister persister, ConnectionMonitor connection, DatabaseSection config)
        {
            this.indexer = indexer;

            if (config.Search.Enabled)
            {
                connection.Online += delegate
                {
                    persister.ItemSaved   += persister_ItemSaved;
                    persister.ItemMoving  += persister_ItemMoving;
                    persister.ItemMoved   += persister_ItemMoved;
                    persister.ItemCopied  += persister_ItemCopied;
                    persister.ItemDeleted += persister_ItemDeleted;
                };
                connection.Offline += delegate
                {
                    persister.ItemSaved   -= persister_ItemSaved;
                    persister.ItemMoving  -= persister_ItemMoving;
                    persister.ItemMoved   -= persister_ItemMoved;
                    persister.ItemCopied  -= persister_ItemCopied;
                    persister.ItemDeleted -= persister_ItemDeleted;
                };
            }
        }
Пример #8
0
 public FileConfigurationParticipator(DatabaseSection config)
 {
     tablePrefix = config.TablePrefix;
     chunkSize   = config.Files.ChunkSize;
 }
Пример #9
0
 public RavenStoreFactory(DatabaseSection config)
 {
     connectionStringName  = config.ConnectionStringName;
     RunInMemory           = config.Raven.RunInMemory;
     EmbeddedDocumentStore = config.Raven.EmbeddedDocumentStore;
 }
Пример #10
0
 public SessionProvider(IConfigurationBuilder builder, NHInterceptorFactory interceptorFactory, IWebContext webContext, DatabaseSection config)
 {
     nhSessionFactory = builder.BuildSessionFactory();
     logger.Debug("Built Session Factory " + DateTime.Now);
     this.webContext         = webContext;
     this.interceptorFactory = interceptorFactory;
     this.isolation          = config.Isolation;
 }
Пример #11
0
        /// <summary>
        /// Configures the properties of each supported database flavor. You need to extend this method if you want to
        /// add your own database flavor.
        /// </summary>
        /// <param name="config"></param>
        /// <param name="connectionStrings"></param>
        /// <returns></returns>
        private DatabaseFlavour SetupFlavourProperties(DatabaseSection config, ConnectionStringsSection connectionStrings)
        {
            DatabaseFlavour flavour = config.Flavour;

            if (flavour == DatabaseFlavour.AutoDetect)
            {
                ConnectionStringSettings css = connectionStrings.ConnectionStrings[config.ConnectionStringName];
                if (css == null)
                {
                    throw new ConfigurationErrorsException("Could not find the connection string named '" + config.ConnectionStringName + "' that was defined in the n2/database configuration section. If you installed using NuGet try installing 'N2 CMS SQLite config' or configuring this connection string manually.");
                }
                flavour = DetectFlavor(css);
            }

            // HACK: used to support seamless text/nvarchar(max) support across databases
            if (flavour == DatabaseFlavour.MySql)
            {
                stringLength = 16777215;
            }

            switch (flavour)
            {
            case DatabaseFlavour.SqlServer2000:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.SqlClientDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.MsSql2000Dialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.SqlServer2005:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.SqlClientDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.MsSql2005Dialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.SqlServer:
            case DatabaseFlavour.SqlServer2008:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.SqlClientDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.MsSql2008Dialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.SqlCe3:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.SqlServerCeDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.MsSqlCeDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.SqlCe:
            case DatabaseFlavour.SqlCe4:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.SqlServerCeDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.MsSqlCe40Dialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.MySql:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.MySqlDataDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.MySQL5Dialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.SqLite:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.SQLite20Driver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.SQLiteDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.Firebird:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.FirebirdDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.FirebirdDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.Generic:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.OleDbDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.GenericDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.Jet:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = "NHibernate.JetDriver.JetDriver, NHibernate.JetDriver";
                Properties[NHibernate.Cfg.Environment.Dialect]          = "NHibernate.JetDriver.JetDialect, NHibernate.JetDriver";
                break;

            case DatabaseFlavour.DB2:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.OdbcDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.DB2Dialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.Oracle9i:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.OracleClientDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.Oracle9iDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.Oracle:
            case DatabaseFlavour.Oracle10g:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.OracleClientDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.Oracle10gDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.OracleOdp:
                Properties[NHibernate.Cfg.Environment.ConnectionDriver] = typeof(NHibernate.Driver.OracleDataClientDriver).AssemblyQualifiedName;
                Properties[NHibernate.Cfg.Environment.Dialect]          = typeof(NHibernate.Dialect.Oracle10gDialect).AssemblyQualifiedName;
                break;

            case DatabaseFlavour.MongoDB:
                return(DatabaseFlavour.MongoDB);

            case DatabaseFlavour.Xml:
                return(DatabaseFlavour.Xml);

            default:
                throw new ConfigurationErrorsException("Couldn't determine database flavour. Please check the 'flavour' attribute of the n2/database configuration section.");
            }
            return(flavour);
        }
Пример #12
0
        public SessionProvider(IConfigurationBuilder builder, NHInterceptorFactory interceptorFactory, IWebContext webContext, DatabaseSection config)
        {
            if (config.Flavour.IsFlagSet(DatabaseFlavour.NoSql))
            {
                return;
            }

            nhSessionFactory          = builder.BuildSessionFactory();
            this.webContext           = webContext;
            this.interceptorFactory   = interceptorFactory;
            this.isolation            = config.Isolation;
            this.autoStartTransaction = config.AutoStartTransaction;
            this.CacheEnabled         = config.Caching;
        }
 public StatisticsTablesParticipator(DatabaseSection config)
 {
     tablePrefix = config.TablePrefix;
 }
Пример #14
0
        /// <summary>Creates a new instance of the <see cref="ConfigurationBuilder"/>.</summary>
        public ConfigurationBuilder(IDefinitionProvider[] definitionProviders, ClassMappingGenerator generator, IWebContext webContext, ConfigurationBuilderParticipator[] participators, DatabaseSection config, ConnectionStringsSection connectionStrings)
        {
            this.definitionProviders = definitionProviders;
            this.generator           = generator;
            this.webContext          = webContext;
            this.participators       = participators;

            if (config == null)
            {
                config = new DatabaseSection();
            }

            if (!string.IsNullOrEmpty(config.HibernateMapping))
            {
                DefaultMapping = config.HibernateMapping;
            }

            SetupProperties(config, connectionStrings);
            SetupMappings(config);

            TryLocatingHbmResources = config.TryLocatingHbmResources;
            tablePrefix             = config.TablePrefix;
            batchSize        = config.BatchSize;
            childrenLaziness = config.ChildrenLaziness;
        }
Пример #15
0
 public RavenInstallationManager(IHost host, DefinitionMap map, ContentActivator activator, Importer importer, IPersister persister, ISessionProvider sessionProvider, IConfigurationBuilder configurationBuilder, IWebContext webContext, ConnectionMonitor connectionContext, DatabaseSection config, RavenConnectionProvider cp)
     : base(connectionContext, importer, webContext, persister, activator)
 {
     this.cp = cp;
 }
Пример #16
0
        public ContentChangeTracker(IAsyncIndexer indexer, IPersister persister, ConnectionMonitor connection, DatabaseSection config)
        {
            this.indexer = indexer;

            if (!config.Search.Enabled)
            {
                return;
            }
            if (!string.IsNullOrEmpty(config.Search.IndexOnMachineNamed) && config.Search.IndexOnMachineNamed != Environment.MachineName)
            {
                return;
            }

            connection.Online += delegate
            {
                IsMonitoring           = true;
                persister.ItemSaved   += persister_ItemSaved;
                persister.ItemMoving  += persister_ItemMoving;
                persister.ItemMoved   += persister_ItemMoved;
                persister.ItemCopied  += persister_ItemCopied;
                persister.ItemDeleted += persister_ItemDeleted;
            };
            connection.Offline += delegate
            {
                IsMonitoring           = false;
                persister.ItemSaved   -= persister_ItemSaved;
                persister.ItemMoving  -= persister_ItemMoving;
                persister.ItemMoved   -= persister_ItemMoved;
                persister.ItemCopied  -= persister_ItemCopied;
                persister.ItemDeleted -= persister_ItemDeleted;
            };
        }
Пример #17
0
 public DatabaseFileSystem(ISessionProvider sessionProvider, DatabaseSection config)
 {
     this._sessionProvider = sessionProvider;
     this.chunkSize        = config.Files.ChunkSize;
 }
Пример #18
0
 public LuceneAccesor(IWebContext webContext, DatabaseSection config)
 {
     LockTimeout = 2000L;
     indexPath   = Path.Combine(webContext.MapPath(config.Search.IndexPath), "Pages");
 }
Пример #19
0
 private void SetupCacheProperties(DatabaseSection config)
 {
     Properties[NHibernate.Cfg.Environment.UseSecondLevelCache] = config.Caching.ToString();
     Properties[NHibernate.Cfg.Environment.UseQueryCache]       = config.Caching.ToString();
     Properties[NHibernate.Cfg.Environment.CacheProvider]       = config.CacheProviderClass;
 }
Пример #20
0
        public AsyncIndexer(IContentIndexer indexer, IPersister persister, IWorker worker, IErrorNotifier errors, DatabaseSection config)
        {
            RetryInterval     = TimeSpan.FromMinutes(2);
            this.async        = config.Search.AsyncIndexing;
            this.handleErrors = config.Search.HandleErrors;

            this.indexer   = indexer;
            this.persister = persister;
            this.worker    = worker;
            this.errors    = errors;
        }
Пример #21
0
        public static void Setup(out IDefinitionManager definitions, out ContentActivator activator, out IItemNotifier notifier, out FakeSessionProvider sessionProvider, out ItemFinder finder, out SchemaExport schemaCreator, out InterceptingProxyFactory proxyFactory, IWebContext context, DatabaseSection config, ConfigurationBuilderParticipator[] participators, params Type[] itemTypes)
        {
            Setup(out definitions, out activator, out notifier, out proxyFactory, itemTypes);

            var connectionStrings    = (ConnectionStringsSection)ConfigurationManager.GetSection("connectionStrings");
            var configurationBuilder = new ConfigurationBuilder(definitions, new ClassMappingGenerator(), new ThreadContext(), participators, config, connectionStrings);
            var configurationSource  = new ConfigurationSource(configurationBuilder);

            sessionProvider = new FakeSessionProvider(configurationSource, new NHInterceptor(proxyFactory, configurationSource, notifier), context);

            finder = new ItemFinder(sessionProvider, definitions);

            schemaCreator = new SchemaExport(configurationSource.BuildConfiguration());
        }
Пример #22
0
 public CacheWrapper(IPersister persister, IWebContext context, DatabaseSection config)
 {
     this.persister          = persister;
     this.tablePrefix        = config.TablePrefix;
     this.sqlCacheDependency = config.SqlCacheDependency;
 }