From 1b7f1c956c86458bc0cee341ea95ee593be76703 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Fri, 2 May 2008 18:59:12 +0000
Subject: plumb in connection string to the user database paths. mysql and
mssql just ignore this for now, but it lets us get connect strings to sqlite
and nhibernate.
---
OpenSim/Data/MSSQL/MSSQLUserData.cs | 7 ++++---
OpenSim/Data/MySQL/MySQLUserData.cs | 6 +++---
OpenSim/Data/NHibernate/NHibernateUserData.cs | 18 ++++++++++++------
OpenSim/Data/SQLite/SQLiteUserData.cs | 8 ++++++--
OpenSim/Data/UserDataBase.cs | 2 +-
OpenSim/Framework/Communications/UserManagerBase.cs | 8 ++++----
OpenSim/Framework/IUserData.cs | 2 +-
OpenSim/Framework/UserConfig.cs | 6 ++++++
OpenSim/Grid/UserServer/Main.cs | 2 +-
OpenSim/Region/Application/OpenSimMain.cs | 2 +-
10 files changed, 39 insertions(+), 22 deletions(-)
(limited to 'OpenSim')
diff --git a/OpenSim/Data/MSSQL/MSSQLUserData.cs b/OpenSim/Data/MSSQL/MSSQLUserData.cs
index a4c5068..d54af82 100644
--- a/OpenSim/Data/MSSQL/MSSQLUserData.cs
+++ b/OpenSim/Data/MSSQL/MSSQLUserData.cs
@@ -55,10 +55,11 @@ namespace OpenSim.Data.MSSQL
///
/// Loads and initialises the MySQL storage plugin
///
- override public void Initialise()
+ override public void Initialise(string connect)
{
- // Load from an INI file connection details
- // TODO: move this to XML?
+ // TODO: do something with the connect string instead of
+ // ignoring it.
+
IniFile iniFile = new IniFile("mssql_connection.ini");
string settingDataSource = iniFile.ParseFileReadValue("data_source");
string settingInitialCatalog = iniFile.ParseFileReadValue("initial_catalog");
diff --git a/OpenSim/Data/MySQL/MySQLUserData.cs b/OpenSim/Data/MySQL/MySQLUserData.cs
index c374bf2..b448715 100644
--- a/OpenSim/Data/MySQL/MySQLUserData.cs
+++ b/OpenSim/Data/MySQL/MySQLUserData.cs
@@ -55,10 +55,10 @@ namespace OpenSim.Data.MySQL
///
/// Loads and initialises the MySQL storage plugin
///
- override public void Initialise()
+ override public void Initialise(string connect)
{
- // Load from an INI file connection details
- // TODO: move this to XML? Yes, PLEASE!
+ // TODO: actually do something with our connect string
+ // instead of loading the second config
IniFile iniFile = new IniFile("mysql_connection.ini");
string settingHostname = iniFile.ParseFileReadValue("hostname");
diff --git a/OpenSim/Data/NHibernate/NHibernateUserData.cs b/OpenSim/Data/NHibernate/NHibernateUserData.cs
index 2e55e03..6a830f6 100644
--- a/OpenSim/Data/NHibernate/NHibernateUserData.cs
+++ b/OpenSim/Data/NHibernate/NHibernateUserData.cs
@@ -25,6 +25,7 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
@@ -35,6 +36,7 @@ using NHibernate.Cfg;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using OpenSim.Framework;
+using Environment=NHibernate.Cfg.Environment;
namespace OpenSim.Data.NHibernate
{
@@ -48,20 +50,24 @@ namespace OpenSim.Data.NHibernate
private Configuration cfg;
private ISessionFactory factory;
- public override void Initialise()
+ public override void Initialise(string connect)
{
- // TODO: hard coding for sqlite based stuff to begin with, just making it easier to test
+ char[] split = {';'};
+ string[] parts = connect.Split(split, 3);
+ if (parts.Length != 3) {
+ // TODO: make this a real exception type
+ throw new Exception("Malformed Inventory connection string '" + connect + "'");
+ }
// This is stubbing for now, it will become dynamic later and support different db backends
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:User.db,version=3");
+ "NHibernate.Driver." + parts[1]);
+ cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
HbmSerializer.Default.Validate = true;
diff --git a/OpenSim/Data/SQLite/SQLiteUserData.cs b/OpenSim/Data/SQLite/SQLiteUserData.cs
index bca5401..aa7a849 100644
--- a/OpenSim/Data/SQLite/SQLiteUserData.cs
+++ b/OpenSim/Data/SQLite/SQLiteUserData.cs
@@ -64,9 +64,13 @@ namespace OpenSim.Data.SQLite
private SqliteDataAdapter daf;
SqliteConnection g_conn;
- override public void Initialise()
+ override public void Initialise(string connect)
{
- SqliteConnection conn = new SqliteConnection("URI=file:userprofiles.db,version=3");
+ // default to something sensible
+ if (connect == "")
+ connect = "URI=file:userprofiles.db,version=3";
+
+ SqliteConnection conn = new SqliteConnection(connect);
TestTables(conn);
// This sucks, but It doesn't seem to work with the dataset Syncing :P
diff --git a/OpenSim/Data/UserDataBase.cs b/OpenSim/Data/UserDataBase.cs
index fc33376..2ddeccf 100644
--- a/OpenSim/Data/UserDataBase.cs
+++ b/OpenSim/Data/UserDataBase.cs
@@ -51,7 +51,7 @@ namespace OpenSim.Data
public abstract bool InventoryTransferRequest(LLUUID from, LLUUID to, LLUUID inventory);
public abstract string Version {get;}
public abstract string Name {get;}
- public abstract void Initialise();
+ public abstract void Initialise(string connect);
public abstract List GeneratePickerResults(LLUUID queryID, string query);
public abstract UserAppearance GetUserAppearance(LLUUID user);
public abstract void UpdateUserAppearance(LLUUID user, UserAppearance appearance);
diff --git a/OpenSim/Framework/Communications/UserManagerBase.cs b/OpenSim/Framework/Communications/UserManagerBase.cs
index 29bfe22..51a5036 100644
--- a/OpenSim/Framework/Communications/UserManagerBase.cs
+++ b/OpenSim/Framework/Communications/UserManagerBase.cs
@@ -53,7 +53,7 @@ namespace OpenSim.Framework.Communications
/// Adds a new user server plugin - user servers 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))
{
@@ -71,16 +71,16 @@ namespace OpenSim.Framework.Communications
{
IUserData plug =
(IUserData) Activator.CreateInstance(pluginAssembly.GetType(pluginType.ToString()));
- AddPlugin(plug);
+ AddPlugin(plug, connect);
}
}
}
}
}
- public void AddPlugin(IUserData plug)
+ public void AddPlugin(IUserData plug, string connect)
{
- plug.Initialise();
+ plug.Initialise(connect);
_plugins.Add(plug.Name, plug);
m_log.Info("[USERSTORAGE]: Added IUserData Interface");
}
diff --git a/OpenSim/Framework/IUserData.cs b/OpenSim/Framework/IUserData.cs
index b75a229..1e557d3 100644
--- a/OpenSim/Framework/IUserData.cs
+++ b/OpenSim/Framework/IUserData.cs
@@ -173,7 +173,7 @@ namespace OpenSim.Framework
///
/// Initialises the plugin (artificial constructor)
///
- void Initialise();
+ void Initialise(string connect);
///
/// Gets the user appearance
diff --git a/OpenSim/Framework/UserConfig.cs b/OpenSim/Framework/UserConfig.cs
index c176bbf..3c0bdfa 100644
--- a/OpenSim/Framework/UserConfig.cs
+++ b/OpenSim/Framework/UserConfig.cs
@@ -38,6 +38,7 @@ namespace OpenSim.Framework
public static bool DefaultHttpSSL = false;
private ConfigurationMember configMember;
public string DatabaseProvider = String.Empty;
+ public string DatabaseConnect = String.Empty;
public string DefaultStartupMsg = String.Empty;
public uint DefaultX = 1000;
public uint DefaultY = 1000;
@@ -77,6 +78,8 @@ namespace OpenSim.Framework
false);
configMember.addConfigurationOption("database_provider", ConfigurationOption.ConfigurationTypes.TYPE_STRING,
"DLL for database provider", "OpenSim.Data.MySQL.dll", false);
+ configMember.addConfigurationOption("database_connect", ConfigurationOption.ConfigurationTypes.TYPE_STRING,
+ "Connection String for Database", "", false);
configMember.addConfigurationOption("http_port", ConfigurationOption.ConfigurationTypes.TYPE_UINT32,
"Http Listener port", DefaultHttpPort.ToString(), false);
@@ -110,6 +113,9 @@ namespace OpenSim.Framework
case "database_provider":
DatabaseProvider = (string) configuration_result;
break;
+ case "database_connect":
+ DatabaseConnect = (string) configuration_result;
+ break;
case "http_port":
HttpPort = (uint) configuration_result;
break;
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
index 0534e3b..8e6559c 100644
--- a/OpenSim/Grid/UserServer/Main.cs
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -93,7 +93,7 @@ namespace OpenSim.Grid.UserServer
m_log.Info("[REGION]: Establishing data connection");
m_userManager = new UserManager();
m_userManager._config = Cfg;
- m_userManager.AddPlugin(Cfg.DatabaseProvider);
+ m_userManager.AddPlugin(Cfg.DatabaseProvider, Cfg.DatabaseConnect);
m_loginService = new UserLoginService(
m_userManager, new LibraryRootFolder(), Cfg, Cfg.DefaultStartupMsg);
diff --git a/OpenSim/Region/Application/OpenSimMain.cs b/OpenSim/Region/Application/OpenSimMain.cs
index 5b44813..43f7375 100644
--- a/OpenSim/Region/Application/OpenSimMain.cs
+++ b/OpenSim/Region/Application/OpenSimMain.cs
@@ -362,7 +362,7 @@ namespace OpenSim
LocalUserServices userService =
new LocalUserServices(m_networkServersInfo, m_networkServersInfo.DefaultHomeLocX,
m_networkServersInfo.DefaultHomeLocY, inventoryService);
- userService.AddPlugin(m_standaloneUserPlugin);
+ userService.AddPlugin(m_standaloneUserPlugin, m_standaloneUserSource);
LocalBackEndServices backendService = new LocalBackEndServices();
--
cgit v1.1