diff --git a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs index 27f8b60c51..c524fc0a82 100644 --- a/OpenSim/Data/MSSQL/MSSQLInventoryData.cs +++ b/OpenSim/Data/MSSQL/MSSQLInventoryData.cs @@ -51,6 +51,12 @@ namespace OpenSim.Data.MSSQL /// /// Loads and initialises this database plugin /// + public void Initialise(string connect) + { + // TODO: actually use the provided connect string + Initialise(); + } + public void Initialise() { IniFile GridDataMySqlFile = new IniFile("mssql_connection.ini"); diff --git a/OpenSim/Data/MySQL/MySQLInventoryData.cs b/OpenSim/Data/MySQL/MySQLInventoryData.cs index dbcb9bd282..6261d37442 100644 --- a/OpenSim/Data/MySQL/MySQLInventoryData.cs +++ b/OpenSim/Data/MySQL/MySQLInventoryData.cs @@ -51,6 +51,12 @@ namespace OpenSim.Data.MySQL /// /// Loads and initialises this database plugin /// + public void Initialise(string connect) + { + // TODO: actually use the provided connect string + Initialise(); + } + public void Initialise() { IniFile GridDataMySqlFile = new IniFile("mysql_connection.ini"); diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs index 7bd4a0b899..beac6934e2 100644 --- a/OpenSim/Data/NHibernate/NHibernateAssetData.cs +++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs @@ -55,11 +55,11 @@ namespace OpenSim.Data.NHibernate public override void Initialise(string connect) { - // TODO: hard coding for sqlite based stuff to begin with, just making it easier to test + // Split out the dialect, driver, and connect string char[] split = {';'}; string[] parts = connect.Split(split); - // This is stubbing for now, it will become dynamic later and support different db backends + // NHibernate setup cfg = new Configuration(); cfg.SetProperty(Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider"); @@ -74,7 +74,11 @@ namespace OpenSim.Data.NHibernate using ( MemoryStream stream = HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly())) cfg.AddInputStream(stream); - + + // If uncommented this will auto create tables, but it + // does drops of the old tables, so we need a smarter way + // to acturally manage this. + // new SchemaExport(cfg).Create(true, true); factory = cfg.BuildSessionFactory(); diff --git a/OpenSim/Data/NHibernate/NHibernateInventoryData.cs b/OpenSim/Data/NHibernate/NHibernateInventoryData.cs index 1ac0f0c2d9..938f47c2b4 100644 --- a/OpenSim/Data/NHibernate/NHibernateInventoryData.cs +++ b/OpenSim/Data/NHibernate/NHibernateInventoryData.cs @@ -50,25 +50,21 @@ namespace OpenSim.Data.NHibernate /// /// Initialises the interface /// - public void Initialise() + public void Initialise(string connect) { - Initialise("Inventory.db", "Inventory"); - } - - public void Initialise(string dbfile, string dbname) - { - // TODO: hard coding for sqlite based stuff to begin with, just making it easier to test - - // This is stubbing for now, it will become dynamic later and support different db backends + // Split out the dialect, driver, and connect string + char[] split = {';'}; + string[] parts = connect.Split(split); + + // Establish NHibernate Connection cfg = new Configuration(); cfg.SetProperty(Environment.ConnectionProvider, "NHibernate.Connection.DriverConnectionProvider"); cfg.SetProperty(Environment.Dialect, - "NHibernate.Dialect.SQLiteDialect"); + "NHibernate.Dialect." + parts[0]); cfg.SetProperty(Environment.ConnectionDriver, - "NHibernate.Driver.SqliteClientDriver"); - cfg.SetProperty(Environment.ConnectionString, - "URI=file:" + dbfile + ",version=3"); + "NHibernate.Driver." + parts[1]); + cfg.SetProperty(Environment.ConnectionString, parts[2]); cfg.AddAssembly("OpenSim.Data.NHibernate"); HbmSerializer.Default.Validate = true; @@ -76,6 +72,10 @@ namespace OpenSim.Data.NHibernate HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly())) cfg.AddInputStream(stream); + // If uncommented this will auto create tables, but it + // does drops of the old tables, so we need a smarter way + // to acturally manage this. + // new SchemaExport(cfg).Create(true, true); factory = cfg.BuildSessionFactory(); diff --git a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs index 442ba390e5..2eb0ad593a 100644 --- a/OpenSim/Data/SQLite/SQLiteInventoryStore.cs +++ b/OpenSim/Data/SQLite/SQLiteInventoryStore.cs @@ -50,17 +50,13 @@ namespace OpenSim.Data.SQLite /// /// Initialises the interface /// - public void Initialise() + public void Initialise(string dbconnect) { - Initialise("inventoryStore.db", "inventoryDatabase"); - } - - public void Initialise(string dbfile, string dbname) - { - string connectionString = "URI=file:" + dbfile + ",version=3"; - - m_log.Info("[Inventory]: Sqlite - connecting: " + dbfile); - SqliteConnection conn = new SqliteConnection(connectionString); + if (dbconnect == string.Empty) { + dbconnect = "URI=file:inventoryStore.db,version=3"; + } + m_log.Info("[Inventory]: Sqlite - connecting: " + dbconnect); + SqliteConnection conn = new SqliteConnection(dbconnect); conn.Open(); diff --git a/OpenSim/Framework/Communications/InventoryServiceBase.cs b/OpenSim/Framework/Communications/InventoryServiceBase.cs index 769c53088f..5cbfcf935e 100644 --- a/OpenSim/Framework/Communications/InventoryServiceBase.cs +++ b/OpenSim/Framework/Communications/InventoryServiceBase.cs @@ -46,7 +46,7 @@ namespace OpenSim.Framework.Communications /// Adds a new user server plugin - plugins will be requested in the order they were loaded. /// /// The filename to the user server plugin DLL - public void AddPlugin(string FileName) + public void AddPlugin(string FileName, string connect) { if (!String.IsNullOrEmpty(FileName)) { @@ -63,7 +63,7 @@ namespace OpenSim.Framework.Communications { IInventoryData plug = (IInventoryData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - plug.Initialise(); + plug.Initialise(connect); m_plugins.Add(plug.getName(), plug); m_log.Info("[AGENTINVENTORY]: Added IInventoryData Interface"); } diff --git a/OpenSim/Framework/IInventoryData.cs b/OpenSim/Framework/IInventoryData.cs index d72231de70..508099e0b1 100644 --- a/OpenSim/Framework/IInventoryData.cs +++ b/OpenSim/Framework/IInventoryData.cs @@ -38,7 +38,7 @@ namespace OpenSim.Framework /// /// Initialises the interface /// - void Initialise(); + void Initialise(string connect); /// /// Closes the interface diff --git a/OpenSim/Framework/InventoryConfig.cs b/OpenSim/Framework/InventoryConfig.cs index 39a6930198..1e22fe80ee 100644 --- a/OpenSim/Framework/InventoryConfig.cs +++ b/OpenSim/Framework/InventoryConfig.cs @@ -40,6 +40,7 @@ namespace OpenSim.Framework public string UserRecvKey = String.Empty; public string DatabaseProvider = String.Empty; + public string DatabaseConnect = String.Empty; public static uint DefaultHttpPort = 8004; public uint HttpPort = DefaultHttpPort; @@ -68,6 +69,8 @@ namespace OpenSim.Framework "Key to expect from user server", "null", false); configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING, "DLL for database provider", "OpenSim.Data.SQLite.dll", false); + configMember.addConfigurationOption("database_connect", ConfigurationOption.ConfigurationTypes.TYPE_STRING, + "Database Connect String", "", false); configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32, "Http Listener port", DefaultHttpPort.ToString(), false); } @@ -76,24 +79,27 @@ namespace OpenSim.Framework { switch (configuration_key) { - case "default_startup_message": - DefaultStartupMsg = (string) configuration_result; - break; - case "default_user_server": - UserServerURL = (string) configuration_result; - break; - case "user_send_key": - UserSendKey = (string) configuration_result; - break; - case "user_recv_key": - UserRecvKey = (string) configuration_result; - break; - case "database_provider": - DatabaseProvider = (string) configuration_result; - break; - case "http_port": - HttpPort = (uint) configuration_result; - break; + case "default_startup_message": + DefaultStartupMsg = (string) configuration_result; + break; + case "default_user_server": + UserServerURL = (string) configuration_result; + break; + case "user_send_key": + UserSendKey = (string) configuration_result; + break; + case "user_recv_key": + UserRecvKey = (string) configuration_result; + break; + case "database_provider": + DatabaseProvider = (string) configuration_result; + break; + case "database_connect": + DatabaseConnect = (string) configuration_result; + break; + case "http_port": + HttpPort = (uint) configuration_result; + break; } return true; diff --git a/OpenSim/Grid/InventoryServer/InventoryManager.cs b/OpenSim/Grid/InventoryServer/InventoryManager.cs index b3c68915c3..1d4a4e3684 100644 --- a/OpenSim/Grid/InventoryServer/InventoryManager.cs +++ b/OpenSim/Grid/InventoryServer/InventoryManager.cs @@ -48,7 +48,7 @@ namespace OpenSim.Grid.InventoryServer /// Adds a new inventory server plugin - user servers will be requested in the order they were loaded. /// /// The filename to the inventory server plugin DLL - public void AddDatabasePlugin(string FileName) + public void AddDatabasePlugin(string FileName, string dbconnect) { m_log.Info("[" + OpenInventory_Main.LogName + "]: Invenstorage: Attempting to load " + FileName); Assembly pluginAssembly = Assembly.LoadFrom(FileName); @@ -65,7 +65,7 @@ namespace OpenSim.Grid.InventoryServer { IInventoryData plug = (IInventoryData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString())); - plug.Initialise(); + plug.Initialise(dbconnect); _databasePlugin = plug; m_log.Info("[" + OpenInventory_Main.LogName + "]: " + "Invenstorage: Added IInventoryData Interface"); diff --git a/OpenSim/Grid/InventoryServer/Main.cs b/OpenSim/Grid/InventoryServer/Main.cs index 2454650c3d..85d9ba5961 100644 --- a/OpenSim/Grid/InventoryServer/Main.cs +++ b/OpenSim/Grid/InventoryServer/Main.cs @@ -72,7 +72,7 @@ namespace OpenSim.Grid.InventoryServer m_inventoryService = new GridInventoryService(); // m_inventoryManager = new InventoryManager(); - m_inventoryService.AddPlugin(m_config.DatabaseProvider); + m_inventoryService.AddPlugin(m_config.DatabaseProvider, m_config.DatabaseConnect); m_log.Info("[" + LogName + "]: Starting HTTP server ..."); diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs index c01fc5a993..aaf2d7e29b 100644 --- a/OpenSim/Region/Application/OpenSimMain.cs +++ b/OpenSim/Region/Application/OpenSimMain.cs @@ -353,7 +353,7 @@ namespace OpenSim if (m_sandbox) { LocalInventoryService inventoryService = new LocalInventoryService(); - inventoryService.AddPlugin(m_standaloneInventoryPlugin); + inventoryService.AddPlugin(m_standaloneInventoryPlugin, m_standaloneInventorySource); LocalUserServices userService = new LocalUserServices(m_networkServersInfo, m_networkServersInfo.DefaultHomeLocX, diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index bced39189a..5a15c85a1b 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -104,13 +104,18 @@ welcome_message = "Welcome to OpenSim" ; Asset database provider asset_plugin = "OpenSim.Data.SQLite.dll" ; asset_plugin = "OpenSim.Data.MySQL.dll" + ; the Asset DB source. This only works for sqlite and nhibernate for now -asset_source = "URI=file:Asset.db,version=3" +; Asset Source SQLite Exampe +; asset_source = "URI=file:Asset.db,version=3" +; Asset Source NHibernate Example (DIALECT;DRIVER;CONNECTSTRING) +; asset_source = "SQLiteDialect;SqliteClientDriver;URI=file:Asset.db,version=3" ; Inventory database provider inventory_plugin = "OpenSim.Data.SQLite.dll" ; inventory_plugin = "OpenSim.Data.MySQL.dll" + ; User Data Database provider userDatabase_plugin = "OpenSim.Data.SQLite.dll" ; userDatabase_plugin = "OpenSim.Data.MySQL.dll"