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); }
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()); } }
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()); } }
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); }
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())); }
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); } }
public static void SetOnCacheFor(IRuntimeDatabaseConfiguration conf, DatabaseSettingsSerialization.Source source, DatabaseSettingsSerialization.User user) { SetFor(conf, source, user, Settings.Set); }
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); }