示例#1
0
        private static Dictionary <string, object> Read(DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user)
        {
            var prefix  = DatabaseConfigurations.SettingPrefix + "." + source + "." + user + ".";
            var @params = new Dictionary <string, object>();

            foreach (var settings in Settings.GetByPrefix(prefix))
            {
                @params.Add(settings.First.Substring(prefix.Length), settings.Second);
            }
            return(@params);
        }
示例#2
0
        public static void SetFor(IRuntimeDatabaseConfiguration conf, DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user, Action <string, string> setter)
        {
            var prefix = DatabaseConfigurations.SettingPrefix + "." + source + "." + user + ".";

            setter(prefix + DatabaseConfigurations.ProviderKeyName, conf.ProviderKey().Serialize());

            var wrapper = new MetaDatabaseConfiguration(conf);

            foreach (var param in wrapper.PersistableParameters)
            {
                setter(prefix + param.Name,
                       param.Encrypt? SecureConfidentialInformationEncryption.EncryptMaintainingCompatibility(param.Get()): param.Get());
            }
        }
示例#3
0
        public static void SetFor(IRuntimeDatabaseConfiguration conf,
                                  DatabaseSettingsSerialization.Source source,
                                  DatabaseSettingsSerialization.User user,
                                  DatabaseSettingsSerialization.DataSpace dataSpace,
                                  Action <ISetting <string>, string> setter)
        {
            setter(new Setting <string>(BuildSettingName(source, user, dataSpace, DatabaseConfigurations.ProviderKeyName), null), conf.DatabaseProvider.Key.Serialize());

            var wrapper = new MetaDatabaseConfiguration(conf);

            foreach (var param in wrapper.PersistableParameters)
            {
                setter(new Setting <string>(BuildSettingName(source, user, dataSpace, param.Name), null, param.Encrypt), param.Get());
            }
        }
示例#4
0
        private static string BuildSettingName(DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user, DatabaseSettingsSerialization.DataSpace dataSpace, string settingName)
        {
            string dataSpaceStr = null;

            switch (dataSpace)
            {
            case DatabaseSettingsSerialization.DataSpace.Business:
                dataSpaceStr = "Business";
                break;

            case DatabaseSettingsSerialization.DataSpace.Logging:
                dataSpaceStr = "Logging";
                break;

            default:
                dataSpaceStr = "Platform";
                break;
            }

            return(DatabaseConfigurations.SettingPrefix + "." + dataSpaceStr + "." + source + "." + user + "." + settingName);
        }
示例#5
0
        protected static DatabaseAccessProvider <IPlatformDatabaseServices> CreatePlatformDatabaseAccessProvider(
            DatabaseSettingsSerialization.Source source,
            DatabaseSettingsSerialization.User user,
            DatabaseSettingsSerialization.DataSpace dataSpace,
            ISettingsProvider settingsProvider)
        {
            var pluginProvider = PlatformDatabasePluginProvider;

            IRuntimeDatabaseConfiguration conf = RuntimeDatabaseConfigurations.For(pluginProvider, source, user, dataSpace, settingsProvider);

            if (conf == null || conf.ConnectionString.IsEmpty())
            {
                throw new InvalidOperationException("Unable to obtain the connection string. Please run Configuration Tool.");
            }

            var services = pluginProvider.GetImplementation(conf.DatabaseProvider.Key).GetPlatformDatabaseServices(conf);

            return(new DatabaseAccessProvider <IPlatformDatabaseServices>(
                       services,
                       services.TransactionService.CreateTransactionManager()));
        }
示例#6
0
        public static IRuntimeDatabaseConfiguration For(
            DatabasePluginProvider <IPlatformDatabaseProvider> provider,
            DatabaseSettingsSerialization.Source source,
            DatabaseSettingsSerialization.User user,
            DatabaseSettingsSerialization.DataSpace dataSpace,
            ISettingsProvider settingsProvider)
        {
            var providerKeySetting = new Setting <string>(BuildSettingName(source, user, dataSpace, DatabaseConfigurations.ProviderKeyName), string.Empty);
            var providerKeyString  = settingsProvider.Get(providerKeySetting);

            if (string.IsNullOrEmpty(providerKeyString))
            {
                return(null);
            }

            var providerKey = DatabaseProviderKey.Deserialize(providerKeyString);
            var conf        = provider.GetImplementation(providerKey).CreateEmptyRuntimeDatabaseConfiguration();

            RuntimeDatabaseConfigurations.Fill(conf, BuildSettingName(source, user, dataSpace, ""), settingsProvider);

            return(conf);
        }
        protected static DatabaseAccessProvider <IPlatformDatabaseServices> CreatePlatformDatabaseAccessProvider(
            DatabaseSettingsSerialization.Source source,
            DatabaseSettingsSerialization.User user)
        {
            var pluginProvider = PlatformDatabasePluginProvider;

            var key = Pair.Create(source, user);
            IRuntimeDatabaseConfiguration conf;

            if (source == DatabaseSettingsSerialization.Source.Application)
            {
                // We don't use GetOrAdd because in Java computeIfAbsent holds a lock
                // while evaluating the factory function which can lead to deadlocks when one thread
                // is initializing the database access for the first time and another is retrieving
                // a setting from the database
                if (!cachedPlatformAccessConfigurations.TryGetValue(key, out conf))
                {
                    var newConf = RuntimeDatabaseConfigurations.For(pluginProvider, source, user);
                    conf = cachedPlatformAccessConfigurations.GetOrAdd(key, newConf);
                }
            }
            else
            {
                // Service Configurations can't be cached becase the underlining settings storage keeps changing as they serve diferent sandboxes
                conf = RuntimeDatabaseConfigurations.For(pluginProvider, source, user);
            }

            if (conf == null || conf.ConnectionString.IsEmpty())
            {
                throw new InvalidOperationException("Unable to obtain the connection string. Please run Configuration Tool.");
            }

            var services = pluginProvider.GetImplementation(conf.ProviderKey()).GetPlatformDatabaseServices(conf);

            services.IntrospectionService.QueryTimeout = IntrospectionQueryTimeout;
            return(new DatabaseAccessProvider <IPlatformDatabaseServices>(
                       services,
                       services.TransactionService.CreateTransactionManager()));
        }
        protected internal static IRuntimeDatabaseConfiguration ConfigurationForDatabase(string databaseName, DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user)
        {
            if (string.IsNullOrEmpty(databaseName) ||
                (databaseName == Constants.SystemDatabaseLogicalName) ||
                (databaseName == ForSystemDatabase.DatabaseServices.DatabaseConfiguration.DatabaseIdentifier))
            {
                return(null);
            }

            using (var trans = ForSystemDatabase.GetCommitableTransaction()) {
                var eSpaceParams = DBRuntimePlatform.Instance.GetCatalogDetailsByName(trans, databaseName, user);
                if (eSpaceParams == null)
                {
                    return(null);
                }

                var baseConf = RuntimeDatabaseConfigurations.For(
                    CurrentPlatformDatabasesPluginProvider,
                    source,
                    user);

                baseConf.SetParameters(eSpaceParams);
                return(baseConf);
            }
        }
示例#9
0
 public static void SetOnCacheFor(IRuntimeDatabaseConfiguration conf, DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user)
 {
     SetFor(conf, source, user, Settings.Set);
 }
示例#10
0
        public static IRuntimeDatabaseConfiguration For(DatabasePluginProvider <IPlatformDatabaseProvider> provider, DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user)
        {
            var @params = Read(source, user);

            if (@params.Count == 0)
            {
                return(null);
            }

            var providerKey = DatabaseProviderKey.Deserialize(@params[DatabaseConfigurations.ProviderKeyName].ToString());
            var conf        = provider.GetImplementation(providerKey).CreateEmptyRuntimeDatabaseConfiguration();

            RuntimeDatabaseConfigurations.Fill(conf, @params);

            return(conf);
        }