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