From 4ed7ca62b153817a142ded621cc5c5c1b1c055c5 Mon Sep 17 00:00:00 2001 From: Adam Frisby Date: Mon, 1 Dec 2008 07:50:38 +0000 Subject: * From Mantis#2701 - Implements NHibernate data adapter, adds support for MsSql2005 to NHibernate. * Patch courtesy of Adminotech and realXtend. Thanks! --- OpenSim/Data/NHibernate/NHibernateInventoryData.cs | 107 +++++++-------------- 1 file changed, 35 insertions(+), 72 deletions(-) (limited to 'OpenSim/Data/NHibernate/NHibernateInventoryData.cs') diff --git a/OpenSim/Data/NHibernate/NHibernateInventoryData.cs b/OpenSim/Data/NHibernate/NHibernateInventoryData.cs index bceb5d5..f7de8eb 100644 --- a/OpenSim/Data/NHibernate/NHibernateInventoryData.cs +++ b/OpenSim/Data/NHibernate/NHibernateInventoryData.cs @@ -33,10 +33,7 @@ using System.Text.RegularExpressions; using OpenMetaverse; using log4net; using NHibernate; -using NHibernate.Cfg; -using NHibernate.Expression; -using NHibernate.Mapping.Attributes; -using NHibernate.Tool.hbm2ddl; +using NHibernate.Criterion; using OpenSim.Framework; using Environment=NHibernate.Cfg.Environment; @@ -46,9 +43,7 @@ namespace OpenSim.Data.NHibernate { private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - private Configuration cfg; - private ISessionFactory factory; - private ISession session; + private NHibernateManager manager; public void Initialise() { @@ -61,35 +56,8 @@ namespace OpenSim.Data.NHibernate /// public void Initialise(string connect) { - // Split out the dialect, driver, and connect string - 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 + "'"); - } - string dialect = parts[0]; - - // Establish NHibernate Connection - cfg = new Configuration(); - cfg.SetProperty(Environment.ConnectionProvider, - "NHibernate.Connection.DriverConnectionProvider"); - cfg.SetProperty(Environment.Dialect, - "NHibernate.Dialect." + parts[0]); - cfg.SetProperty(Environment.ConnectionDriver, - "NHibernate.Driver." + parts[1]); - cfg.SetProperty(Environment.ConnectionString, parts[2]); - cfg.AddAssembly("OpenSim.Data.NHibernate"); - - factory = cfg.BuildSessionFactory(); - session = factory.OpenSession(); - - // This actually does the roll forward assembly stuff - Assembly assem = GetType().Assembly; - Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, "InventoryStore"); - m.Update(); - + m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateInventoryData"); + manager = new NHibernateManager(connect, "InventoryStore"); } /***************************************************************** @@ -109,7 +77,8 @@ namespace OpenSim.Data.NHibernate { try { - return session.Load(typeof(InventoryItemBase), item) as InventoryItemBase; + m_log.InfoFormat("[NHIBERNATE] getInventoryItem {0}", item); + return (InventoryItemBase)manager.Load(typeof(InventoryItemBase), item); } catch { @@ -126,15 +95,11 @@ namespace OpenSim.Data.NHibernate { if (!ExistsItem(item.ID)) { - using (ITransaction transaction = session.BeginTransaction()) - { - session.Save(item); - transaction.Commit(); - } + manager.Save(item); } else { - m_log.ErrorFormat("Attempted to add Inventory Item {0} that already exists, updating instead", item.ID); + m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Item {0} that already exists, updating instead", item.ID); updateInventoryItem(item); } } @@ -147,15 +112,11 @@ namespace OpenSim.Data.NHibernate { if (ExistsItem(item.ID)) { - using (ITransaction transaction = session.BeginTransaction()) - { - session.Update(item); - transaction.Commit(); - } + manager.Update(item); } else { - m_log.ErrorFormat("Attempted to add Inventory Item {0} that already exists", item.ID); + m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Item {0} that already exists", item.ID); } } @@ -165,11 +126,16 @@ namespace OpenSim.Data.NHibernate /// public void deleteInventoryItem(UUID itemID) { - using (ITransaction transaction = session.BeginTransaction()) + InventoryItemBase item = (InventoryItemBase)manager.Load(typeof(InventoryItemBase), itemID); + if (item != null) { - session.Delete(itemID); - transaction.Commit(); + manager.Delete(item); } + else + { + m_log.ErrorFormat("[NHIBERNATE] Error deleting InventoryItemBase {0}", itemID); + } + } /// @@ -181,11 +147,11 @@ namespace OpenSim.Data.NHibernate { try { - return session.Load(typeof(InventoryFolderBase), folder) as InventoryFolderBase; + return (InventoryFolderBase)manager.Load(typeof(InventoryFolderBase), folder); } catch { - m_log.ErrorFormat("Couldn't find inventory item: {0}", folder); + m_log.ErrorFormat("[NHIBERNATE] Couldn't find inventory item: {0}", folder); return null; } } @@ -198,15 +164,11 @@ namespace OpenSim.Data.NHibernate { if (!ExistsFolder(folder.ID)) { - using (ITransaction transaction = session.BeginTransaction()) - { - session.Save(folder); - transaction.Commit(); - } + manager.Save(folder); } else { - m_log.ErrorFormat("Attempted to add Inventory Folder {0} that already exists, updating instead", folder.ID); + m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Folder {0} that already exists, updating instead", folder.ID); updateInventoryFolder(folder); } } @@ -219,15 +181,11 @@ namespace OpenSim.Data.NHibernate { if (ExistsFolder(folder.ID)) { - using (ITransaction transaction = session.BeginTransaction()) - { - session.Update(folder); - transaction.Commit(); - } + manager.Update(folder); } else { - m_log.ErrorFormat("Attempted to add Inventory Folder {0} that already exists", folder.ID); + m_log.ErrorFormat("[NHIBERNATE] Attempted to add Inventory Folder {0} that already exists", folder.ID); } } @@ -237,11 +195,16 @@ namespace OpenSim.Data.NHibernate /// public void deleteInventoryFolder(UUID folderID) { - using (ITransaction transaction = session.BeginTransaction()) + InventoryFolderBase item = (InventoryFolderBase)manager.Load(typeof(InventoryFolderBase), folderID); + if (item != null) + { + manager.Delete(item); + } + else { - session.Delete(folderID.ToString()); - transaction.Commit(); + m_log.ErrorFormat("[NHIBERNATE] Error deleting InventoryFolderBase {0}", folderID); } + manager.Delete(folderID); } // useful private methods @@ -317,7 +280,7 @@ namespace OpenSim.Data.NHibernate public List getInventoryInFolder(UUID folderID) { // try { - ICriteria criteria = session.CreateCriteria(typeof(InventoryItemBase)); + ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryItemBase)); criteria.Add(Expression.Eq("Folder", folderID)); List list = new List(); foreach (InventoryItemBase item in criteria.List()) @@ -340,7 +303,7 @@ namespace OpenSim.Data.NHibernate // see InventoryItemBase.getUserRootFolder public InventoryFolderBase getUserRootFolder(UUID user) { - ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase)); + ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryFolderBase)); criteria.Add(Expression.Eq("ParentID", UUID.Zero)); criteria.Add(Expression.Eq("Owner", user)); foreach (InventoryFolderBase folder in criteria.List()) @@ -358,7 +321,7 @@ namespace OpenSim.Data.NHibernate /// ID of parent private void getInventoryFolders(ref List folders, UUID parentID) { - ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase)); + ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryFolderBase)); criteria.Add(Expression.Eq("ParentID", parentID)); foreach (InventoryFolderBase item in criteria.List()) { -- cgit v1.1