* This patch gets NHibernate working
*** PLEASE NOTE: This patch now requires the libmono-oracle2.0-cil library to be installed on Ubuntu (to stop the System.Data.Oracle missing failure) ***
* Not sure what the dependency is on other distros.  Adding this info to http://opensimulator.org/wiki/Build_Instructions would be most welcome
* Adds Castle.* libraries that were missing last time (note, dlls have been added from http://downloads.sourceforge.net/nhibernate/NHibernate-2.0.1.GA-bin.zip)
0.6.1-post-fixes
Justin Clarke Casey 2008-12-02 15:22:58 +00:00
parent 26fd6c741f
commit dde32f1130
24 changed files with 516 additions and 386 deletions

View File

@ -82,6 +82,7 @@ namespace OpenSim.Data
// private static readonly string _migrations_init = "insert into migrations values('migrations', 1)"; // private static readonly string _migrations_init = "insert into migrations values('migrations', 1)";
// private static readonly string _migrations_find = "select version from migrations where name='migrations'"; // private static readonly string _migrations_find = "select version from migrations where name='migrations'";
public Migration(DbConnection conn, Assembly assem, string type) public Migration(DbConnection conn, Assembly assem, string type)
{ {
_type = type; _type = type;
@ -112,6 +113,7 @@ namespace OpenSim.Data
DbCommand cmd = _conn.CreateCommand(); DbCommand cmd = _conn.CreateCommand();
cmd.CommandText = _migrations_create; cmd.CommandText = _migrations_create;
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Dispose();
InsertVersion("migrations", 1); InsertVersion("migrations", 1);
} }
@ -135,7 +137,7 @@ namespace OpenSim.Data
int newversion = kvp.Key; int newversion = kvp.Key;
cmd.CommandText = kvp.Value; cmd.CommandText = kvp.Value;
// we need to up the command timeout to infinite as we might be doing long migrations. // we need to up the command timeout to infinite as we might be doing long migrations.
cmd.CommandTimeout = 0; //cmd.CommandTimeout = 0;
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
if (version == 0) if (version == 0)
@ -147,6 +149,7 @@ namespace OpenSim.Data
UpdateVersion(_type, newversion); UpdateVersion(_type, newversion);
} }
version = newversion; version = newversion;
cmd.Dispose();
} }
} }
@ -189,7 +192,7 @@ namespace OpenSim.Data
DbCommand cmd = conn.CreateCommand(); DbCommand cmd = conn.CreateCommand();
try try
{ {
cmd.CommandText = "select version from migrations where name='" + type + "' limit 1"; cmd.CommandText = "select version from migrations where name='" + type +"' order by version desc";
using (IDataReader reader = cmd.ExecuteReader()) using (IDataReader reader = cmd.ExecuteReader())
{ {
if (reader.Read()) if (reader.Read())
@ -203,6 +206,7 @@ namespace OpenSim.Data
{ {
// Something went wrong, so we're version 0 // Something went wrong, so we're version 0
} }
cmd.Dispose();
return version; return version;
} }
@ -212,6 +216,7 @@ namespace OpenSim.Data
cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")"; cmd.CommandText = "insert into migrations(name, version) values('" + type + "', " + version + ")";
m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version); m_log.InfoFormat("[MIGRATIONS]: Creating {0} at version {1}", type, version);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Dispose();
} }
private void UpdateVersion(string type, int version) private void UpdateVersion(string type, int version)
@ -220,6 +225,7 @@ namespace OpenSim.Data
cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'"; cmd.CommandText = "update migrations set version=" + version + " where name='" + type + "'";
m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version); m_log.InfoFormat("[MIGRATIONS]: Updating {0} to version {1}", type, version);
cmd.ExecuteNonQuery(); cmd.ExecuteNonQuery();
cmd.Dispose();
} }
// private SortedList<int, string> GetAllMigrations() // private SortedList<int, string> GetAllMigrations()

View File

@ -78,7 +78,11 @@ namespace OpenSim.Data.NHibernate
int w = rs.GetOrdinal(names[3]); int w = rs.GetOrdinal(names[3]);
if (!rs.IsDBNull(x)) if (!rs.IsDBNull(x))
{ {
quat = new Quaternion((Single)rs[x], (Single)rs[y], (Single)rs[z], (Single)rs[w]); float X = (Single)Convert.ToDouble(rs[x].ToString());
float Y = (Single)Convert.ToDouble(rs[y].ToString());
float Z = (Single)Convert.ToDouble(rs[z].ToString());
float W = (Single)Convert.ToDouble(rs[w].ToString());
quat = new Quaternion(X, Y, Z, W);
} }
return quat; return quat;
} }

View File

@ -74,9 +74,12 @@ namespace OpenSim.Data.NHibernate
int x = rs.GetOrdinal(names[0]); int x = rs.GetOrdinal(names[0]);
int y = rs.GetOrdinal(names[1]); int y = rs.GetOrdinal(names[1]);
int z = rs.GetOrdinal(names[2]); int z = rs.GetOrdinal(names[2]);
if (!rs.IsDBNull(x)) if (!rs.IsDBNull(x) && !rs.IsDBNull(y) && !rs.IsDBNull(z))
{ {
vector = new Vector3((Single)rs[x], (Single)rs[y], (Single)rs[z]); float X = (Single)Convert.ToDouble(rs[x].ToString());
float Y = (Single)Convert.ToDouble(rs[y].ToString());
float Z = (Single)Convert.ToDouble(rs[z].ToString());
vector = new Vector3(X, Y, Z);
} }
return vector; return vector;
} }

View File

@ -33,10 +33,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse; using OpenMetaverse;
using log4net; using log4net;
using NHibernate; using NHibernate;
using NHibernate.Cfg;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes; using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using OpenSim.Framework; using OpenSim.Framework;
using Environment=NHibernate.Cfg.Environment; using Environment=NHibernate.Cfg.Environment;
@ -49,9 +46,7 @@ namespace OpenSim.Data.NHibernate
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg; private NHibernateManager manager;
private ISessionFactory factory;
private ISession session;
override public void Dispose() { } override public void Dispose() { }
@ -62,79 +57,23 @@ namespace OpenSim.Data.NHibernate
public override void Initialise(string connect) public override 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]; m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateAssetData");
manager = new NHibernateManager(connect, "AssetStore");
// NHibernate setup
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + dialect);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
HbmSerializer.Default.Validate = true;
using (MemoryStream stream =
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
cfg.AddInputStream(stream);
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, "AssetStore");
m.Update();
} }
override public AssetBase FetchAsset(UUID uuid) override public AssetBase FetchAsset(UUID uuid)
{ {
try return (AssetBase)manager.Load(typeof(AssetBase), uuid);
{
return session.Load(typeof(AssetBase), uuid) as AssetBase;
}
catch (ObjectNotFoundException)
{
m_log.ErrorFormat("[NHIBERNATE] no such asset {0}", uuid);
return null;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] unexpected exception: ", e);
return null;
}
} }
private void Save(AssetBase asset) private void Save(AssetBase asset)
{ {
try AssetBase temp = (AssetBase)manager.Load(typeof(AssetBase), asset.FullID);
if (temp == null)
{ {
// a is not used anywhere? manager.Save(asset);
// AssetBase a = session.Load(typeof(AssetBase), asset.FullID) as AssetBase;
session.Load(typeof(AssetBase), asset.FullID);
}
catch (ObjectNotFoundException)
{
session.Save(asset);
session.Flush();
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue saving asset", e);
} }
} }
@ -147,7 +86,7 @@ namespace OpenSim.Data.NHibernate
override public void UpdateAsset(AssetBase asset) override public void UpdateAsset(AssetBase asset)
{ {
m_log.InfoFormat("[NHIBERNATE] updating asset {0}", asset.FullID); m_log.InfoFormat("[NHIBERNATE] updating asset {0}", asset.FullID);
Save(asset); manager.Update(asset);
} }
// private void LogAssetLoad(AssetBase asset) // private void LogAssetLoad(AssetBase asset)

View File

@ -33,10 +33,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse; using OpenMetaverse;
using log4net; using log4net;
using NHibernate; using NHibernate;
using NHibernate.Cfg; using NHibernate.Criterion;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using OpenSim.Framework; using OpenSim.Framework;
using Environment=NHibernate.Cfg.Environment; 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 static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg; private NHibernateManager manager;
private ISessionFactory factory;
private ISession session;
public void Initialise() public void Initialise()
{ {
@ -61,35 +56,8 @@ namespace OpenSim.Data.NHibernate
/// </summary> /// </summary>
public void Initialise(string connect) public void Initialise(string connect)
{ {
// Split out the dialect, driver, and connect string m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateInventoryData");
char[] split = {';'}; manager = new NHibernateManager(connect, "InventoryStore");
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();
} }
/***************************************************************** /*****************************************************************
@ -109,7 +77,8 @@ namespace OpenSim.Data.NHibernate
{ {
try try
{ {
return session.Load(typeof(InventoryItemBase), item) as InventoryItemBase; m_log.InfoFormat("[NHIBERNATE] getInventoryItem {0}", item);
return (InventoryItemBase)manager.Load(typeof(InventoryItemBase), item);
} }
catch catch
{ {
@ -126,15 +95,11 @@ namespace OpenSim.Data.NHibernate
{ {
if (!ExistsItem(item.ID)) if (!ExistsItem(item.ID))
{ {
using (ITransaction transaction = session.BeginTransaction()) manager.Save(item);
{
session.Save(item);
transaction.Commit();
}
} }
else 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); updateInventoryItem(item);
} }
} }
@ -147,15 +112,11 @@ namespace OpenSim.Data.NHibernate
{ {
if (ExistsItem(item.ID)) if (ExistsItem(item.ID))
{ {
using (ITransaction transaction = session.BeginTransaction()) manager.Update(item);
{
session.Update(item);
transaction.Commit();
}
} }
else 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
/// <param name="item"></param> /// <param name="item"></param>
public void deleteInventoryItem(UUID itemID) public void deleteInventoryItem(UUID itemID)
{ {
using (ITransaction transaction = session.BeginTransaction()) InventoryItemBase item = (InventoryItemBase)manager.Load(typeof(InventoryItemBase), itemID);
if (item != null)
{ {
session.Delete(itemID); manager.Delete(item);
transaction.Commit();
} }
else
{
m_log.ErrorFormat("[NHIBERNATE] Error deleting InventoryItemBase {0}", itemID);
}
} }
/// <summary> /// <summary>
@ -181,11 +147,11 @@ namespace OpenSim.Data.NHibernate
{ {
try try
{ {
return session.Load(typeof(InventoryFolderBase), folder) as InventoryFolderBase; return (InventoryFolderBase)manager.Load(typeof(InventoryFolderBase), folder);
} }
catch catch
{ {
m_log.ErrorFormat("Couldn't find inventory item: {0}", folder); m_log.ErrorFormat("[NHIBERNATE] Couldn't find inventory item: {0}", folder);
return null; return null;
} }
} }
@ -198,15 +164,11 @@ namespace OpenSim.Data.NHibernate
{ {
if (!ExistsFolder(folder.ID)) if (!ExistsFolder(folder.ID))
{ {
using (ITransaction transaction = session.BeginTransaction()) manager.Save(folder);
{
session.Save(folder);
transaction.Commit();
}
} }
else 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); updateInventoryFolder(folder);
} }
} }
@ -219,15 +181,11 @@ namespace OpenSim.Data.NHibernate
{ {
if (ExistsFolder(folder.ID)) if (ExistsFolder(folder.ID))
{ {
using (ITransaction transaction = session.BeginTransaction()) manager.Update(folder);
{
session.Update(folder);
transaction.Commit();
}
} }
else 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
/// <param name="folder"></param> /// <param name="folder"></param>
public void deleteInventoryFolder(UUID folderID) public void deleteInventoryFolder(UUID folderID)
{ {
using (ITransaction transaction = session.BeginTransaction()) InventoryFolderBase item = (InventoryFolderBase)manager.Load(typeof(InventoryFolderBase), folderID);
if (item != null)
{ {
session.Delete(folderID.ToString()); manager.Delete(item);
transaction.Commit();
} }
else
{
m_log.ErrorFormat("[NHIBERNATE] Error deleting InventoryFolderBase {0}", folderID);
}
manager.Delete(folderID);
} }
// useful private methods // useful private methods
@ -317,7 +280,7 @@ namespace OpenSim.Data.NHibernate
public List<InventoryItemBase> getInventoryInFolder(UUID folderID) public List<InventoryItemBase> getInventoryInFolder(UUID folderID)
{ {
// try { // try {
ICriteria criteria = session.CreateCriteria(typeof(InventoryItemBase)); ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryItemBase));
criteria.Add(Expression.Eq("Folder", folderID)); criteria.Add(Expression.Eq("Folder", folderID));
List<InventoryItemBase> list = new List<InventoryItemBase>(); List<InventoryItemBase> list = new List<InventoryItemBase>();
foreach (InventoryItemBase item in criteria.List()) foreach (InventoryItemBase item in criteria.List())
@ -340,7 +303,7 @@ namespace OpenSim.Data.NHibernate
// see InventoryItemBase.getUserRootFolder // see InventoryItemBase.getUserRootFolder
public InventoryFolderBase getUserRootFolder(UUID user) 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("ParentID", UUID.Zero));
criteria.Add(Expression.Eq("Owner", user)); criteria.Add(Expression.Eq("Owner", user));
foreach (InventoryFolderBase folder in criteria.List()) foreach (InventoryFolderBase folder in criteria.List())
@ -358,7 +321,7 @@ namespace OpenSim.Data.NHibernate
/// <param name="parentID">ID of parent</param> /// <param name="parentID">ID of parent</param>
private void getInventoryFolders(ref List<InventoryFolderBase> folders, UUID parentID) private void getInventoryFolders(ref List<InventoryFolderBase> folders, UUID parentID)
{ {
ICriteria criteria = session.CreateCriteria(typeof(InventoryFolderBase)); ICriteria criteria = manager.GetSession().CreateCriteria(typeof(InventoryFolderBase));
criteria.Add(Expression.Eq("ParentID", parentID)); criteria.Add(Expression.Eq("ParentID", parentID));
foreach (InventoryFolderBase item in criteria.List()) foreach (InventoryFolderBase item in criteria.List())
{ {

View File

@ -25,35 +25,141 @@
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ */
using System;
using System.Reflection; using System.Reflection;
using System.IO;
using log4net; using log4net;
using NHibernate; using NHibernate;
using NHibernate.Cfg;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using OpenMetaverse;
using Environment = NHibernate.Cfg.Environment;
namespace OpenSim.Data.NHibernate namespace OpenSim.Data.NHibernate
{ {
internal class NHibernateManager public class NHibernateManager
{ {
// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
// private ISessionFactory factory; private string dialect;
// private ISession session; private Configuration cfg;
// private ITransaction transaction; private ISessionFactory factory;
private ISession session;
public NHibernateManager() public NHibernateManager(string connect, string store)
{ {
// This is stubbing for now, it will become dynamic later and support different db backends
// NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionProvider] =
// "NHibernate.Connection.DriverConnectionProvider";
// cfg.Properties[NHibernate.Cfg.Environment.Dialect] =
// "NHibernate.Dialect.SQLite";
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionDriver] =
// "NHibernate.Driver.SqliteClientDriver";
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionString] =
// "URI=file:opensim-nh.db,version=3";
// factory = cfg.BuildSessionFactory(); // 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 + "'");
} }
dialect = parts[0];
// NHibernate setup
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + dialect);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
//To create sql file uncomment code below and write the name of the file
//SchemaExport exp = new SchemaExport(cfg);
//exp.SetOutputFile("nameofthefile.sql");
//exp.Create(false, true);
HbmSerializer.Default.Validate = true;
using (MemoryStream stream =
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
cfg.AddInputStream(stream);
factory = cfg.BuildSessionFactory();
session = factory.OpenSession();
Assembly assem = GetType().Assembly;
Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, store);
m.Update();
}
public object Load(Type type, UUID uuid)
{
object obj = null;
try
{
obj = session.Load(type, uuid);
}
catch (Exception)
{
m_log.ErrorFormat("[NHIBERNATE] {0} not found with ID {1} ", type.Name, uuid);
}
return obj;
}
public bool Save(object obj)
{
try
{
session.BeginTransaction();
session.Save(obj);
session.Transaction.Commit();
session.Flush();
return true;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue saving object ", e);
}
return false;
}
public bool Update(object obj)
{
try
{
session.BeginTransaction();
session.Update(obj);
session.Transaction.Commit();
session.Flush();
return true;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue updating object ", e);
}
return false;
}
public bool Delete(object obj)
{
try
{
session.BeginTransaction();
session.Delete(obj);
session.Transaction.Commit();
session.Flush();
return true;
}
catch (Exception e)
{
m_log.Error("[NHIBERNATE] issue deleting object ", e);
}
return false;
}
public ISession GetSession()
{
return session;
}
} }
} }

View File

@ -34,10 +34,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse; using OpenMetaverse;
using log4net; using log4net;
using NHibernate; using NHibernate;
using NHibernate.Cfg; using NHibernate.Criterion;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using OpenSim.Framework; using OpenSim.Framework;
using OpenSim.Region.Environment.Interfaces; using OpenSim.Region.Environment.Interfaces;
using OpenSim.Region.Environment.Scenes; using OpenSim.Region.Environment.Scenes;
@ -52,51 +49,12 @@ namespace OpenSim.Data.NHibernate
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg; private NHibernateManager manager;
private ISessionFactory factory;
private ISession session;
// public void Initialise()
// {
// Initialise("SQLiteDialect;SqliteClientDriver;URI=file:OpenSim.db,version=3", true);
// }
public void Initialise(string connect) public void Initialise(string connect)
{ {
// Split out the dialect, driver, and connect string m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateRegionData");
char[] split = {';'}; manager = new NHibernateManager(connect, "RegionStore");
string[] parts = connect.Split(split, 3);
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Region connection string '" + connect + "'");
}
string dialect = parts[0];
// NHibernate setup
cfg = new Configuration();
cfg.SetProperty(Environment.ConnectionProvider,
"NHibernate.Connection.DriverConnectionProvider");
cfg.SetProperty(Environment.Dialect,
"NHibernate.Dialect." + dialect);
cfg.SetProperty(Environment.ConnectionDriver,
"NHibernate.Driver." + parts[1]);
cfg.SetProperty(Environment.ConnectionString, parts[2]);
cfg.AddAssembly("OpenSim.Data.NHibernate");
HbmSerializer.Default.Validate = true;
using (MemoryStream stream =
HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly()))
cfg.AddInputStream(stream);
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, "RegionStore");
m.Update();
} }
/*********************************************************************** /***********************************************************************
@ -122,15 +80,18 @@ namespace OpenSim.Data.NHibernate
{ {
try try
{ {
SceneObjectPart old = session.Load(typeof(SceneObjectPart), p.UUID) as SceneObjectPart; SceneObjectPart old = (SceneObjectPart)manager.Load(typeof(SceneObjectPart), p.UUID);
session.Evict(old); if (old != null)
session.Update(p); {
m_log.InfoFormat("[NHIBERNATE] updating object {0}", p.UUID); m_log.InfoFormat("[NHIBERNATE] updating object {0}", p.UUID);
manager.Update(old);
} }
catch (ObjectNotFoundException) else
{ {
m_log.InfoFormat("[NHIBERNATE] saving object {0}", p.UUID); m_log.InfoFormat("[NHIBERNATE] saving object {0}", p.UUID);
session.Save(p); manager.Save(p);
}
} }
catch (Exception e) catch (Exception e)
{ {
@ -142,15 +103,19 @@ namespace OpenSim.Data.NHibernate
{ {
try try
{ {
Terrain old = session.Load(typeof(Terrain), t.RegionID) as Terrain;
session.Evict(old); Terrain old = (Terrain)manager.Load(typeof(Terrain), t.RegionID);
session.Update(t); if (old != null)
session.Flush();
}
catch (ObjectNotFoundException)
{ {
session.Save(t); m_log.InfoFormat("[NHIBERNATE] updating terrain {0}", t.RegionID);
session.Flush(); manager.Update(old);
}
else
{
m_log.InfoFormat("[NHIBERNATE] saving terrain {0}", t.RegionID);
manager.Save(t);
}
} }
catch (Exception e) catch (Exception e)
{ {
@ -173,7 +138,6 @@ namespace OpenSim.Data.NHibernate
m_log.InfoFormat("Storing part {0}", part.UUID); m_log.InfoFormat("Storing part {0}", part.UUID);
SaveOrUpdate(part); SaveOrUpdate(part);
} }
session.Flush();
} }
catch (Exception e) catch (Exception e)
{ {
@ -185,7 +149,7 @@ namespace OpenSim.Data.NHibernate
{ {
SceneObjectGroup group = new SceneObjectGroup(); SceneObjectGroup group = new SceneObjectGroup();
ICriteria criteria = session.CreateCriteria(typeof(SceneObjectPart)); ICriteria criteria = manager.GetSession().CreateCriteria(typeof(SceneObjectPart));
criteria.Add(Expression.Eq("RegionID", region)); criteria.Add(Expression.Eq("RegionID", region));
criteria.Add(Expression.Eq("ParentUUID", uuid)); criteria.Add(Expression.Eq("ParentUUID", uuid));
criteria.AddOrder( Order.Asc("ParentID") ); criteria.AddOrder( Order.Asc("ParentID") );
@ -216,9 +180,8 @@ namespace OpenSim.Data.NHibernate
SceneObjectGroup g = LoadObject(obj, regionUUID); SceneObjectGroup g = LoadObject(obj, regionUUID);
foreach (SceneObjectPart p in g.Children.Values) foreach (SceneObjectPart p in g.Children.Values)
{ {
session.Delete(p); manager.Delete(p);
} }
session.Flush();
m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID); m_log.InfoFormat("[REGION DB]: Removing obj: {0} from region: {1}", obj.Guid, regionUUID);
@ -234,7 +197,7 @@ namespace OpenSim.Data.NHibernate
Dictionary<UUID, SceneObjectGroup> SOG = new Dictionary<UUID, SceneObjectGroup>(); Dictionary<UUID, SceneObjectGroup> SOG = new Dictionary<UUID, SceneObjectGroup>();
List<SceneObjectGroup> ret = new List<SceneObjectGroup>(); List<SceneObjectGroup> ret = new List<SceneObjectGroup>();
ICriteria criteria = session.CreateCriteria(typeof(SceneObjectPart)); ICriteria criteria = manager.GetSession().CreateCriteria(typeof(SceneObjectPart));
criteria.Add(Expression.Eq("RegionID", regionUUID)); criteria.Add(Expression.Eq("RegionID", regionUUID));
criteria.AddOrder( Order.Asc("ParentID") ); criteria.AddOrder( Order.Asc("ParentID") );
foreach (SceneObjectPart p in criteria.List()) foreach (SceneObjectPart p in criteria.List())
@ -252,7 +215,7 @@ namespace OpenSim.Data.NHibernate
} }
// get the inventory // get the inventory
ICriteria InvCriteria = session.CreateCriteria(typeof(TaskInventoryItem)); ICriteria InvCriteria = manager.GetSession().CreateCriteria(typeof(TaskInventoryItem));
InvCriteria.Add(Expression.Eq("ParentPartID", p.UUID)); InvCriteria.Add(Expression.Eq("ParentPartID", p.UUID));
IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>(); IList<TaskInventoryItem> inventory = new List<TaskInventoryItem>();
foreach (TaskInventoryItem i in InvCriteria.List()) foreach (TaskInventoryItem i in InvCriteria.List())
@ -291,17 +254,15 @@ namespace OpenSim.Data.NHibernate
/// <returns>Heightfield data</returns> /// <returns>Heightfield data</returns>
public double[,] LoadTerrain(UUID regionID) public double[,] LoadTerrain(UUID regionID)
{ {
try Terrain t = (Terrain)manager.Load(typeof(Terrain), regionID);
if (t != null)
{ {
Terrain t = session.Load(typeof(Terrain), regionID) as Terrain;
return t.Doubles; return t.Doubles;
} }
catch (ObjectNotFoundException)
{
m_log.Info("No terrain yet"); m_log.Info("No terrain yet");
return null; return null;
} }
}
/// <summary> /// <summary>
/// ///
@ -339,7 +300,7 @@ namespace OpenSim.Data.NHibernate
/// </summary> /// </summary>
public void Shutdown() public void Shutdown()
{ {
session.Flush(); //session.Flush();
} }
/// <summary> /// <summary>
@ -397,21 +358,20 @@ namespace OpenSim.Data.NHibernate
/// <param name="items"></param> /// <param name="items"></param>
public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items) public void StorePrimInventory(UUID primID, ICollection<TaskInventoryItem> items)
{ {
ICriteria criteria = session.CreateCriteria(typeof(TaskInventoryItem)); ICriteria criteria = manager.GetSession().CreateCriteria(typeof(TaskInventoryItem));
criteria.Add(Expression.Eq("ParentPartID", primID)); criteria.Add(Expression.Eq("ParentPartID", primID));
try try
{ {
foreach (TaskInventoryItem i in criteria.List()) foreach (TaskInventoryItem i in criteria.List())
{ {
session.Delete(i); manager.Delete(i);
} }
foreach (TaskInventoryItem i in items) foreach (TaskInventoryItem i in items)
{ {
session.Save(i); manager.Save(i);
} }
session.Flush();
} }
catch (Exception e) catch (Exception e)
{ {

View File

@ -33,10 +33,7 @@ using System.Text.RegularExpressions;
using OpenMetaverse; using OpenMetaverse;
using log4net; using log4net;
using NHibernate; using NHibernate;
using NHibernate.Cfg; using NHibernate.Criterion;
using NHibernate.Expression;
using NHibernate.Mapping.Attributes;
using NHibernate.Tool.hbm2ddl;
using OpenSim.Framework; using OpenSim.Framework;
using Environment=NHibernate.Cfg.Environment; using Environment=NHibernate.Cfg.Environment;
@ -49,9 +46,7 @@ namespace OpenSim.Data.NHibernate
{ {
private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
private Configuration cfg; private NHibernateManager manager;
private ISessionFactory factory;
private ISession session;
public override void Initialise() public override void Initialise()
{ {
@ -61,62 +56,40 @@ namespace OpenSim.Data.NHibernate
public override void Initialise(string connect) public override void Initialise(string connect)
{ {
char[] split = {';'}; m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateUserData");
string[] parts = connect.Split(split, 3); manager = new NHibernateManager(connect, "UserStore");
if (parts.Length != 3)
{
// TODO: make this a real exception type
throw new Exception("Malformed Inventory connection string '" + connect + "'");
}
string dialect = parts[0];
// 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." + 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, "UserStore");
m.Update();
} }
private bool ExistsUser(UUID uuid) private bool ExistsUser(UUID uuid)
{ {
UserProfileData user = null; UserProfileData user = null;
try
m_log.InfoFormat("[NHIBERNATE] ExistsUser; {0}", uuid);
user = (UserProfileData)manager.Load(typeof(UserProfileData), uuid);
if (user == null)
{ {
user = session.Load(typeof(UserProfileData), uuid) as UserProfileData; m_log.InfoFormat("[NHIBERNATE] User with given UUID does not exist {0} ", uuid);
} return false;
catch (ObjectNotFoundException)
{
user = null;
} }
return (user != null); return true;
} }
override public UserProfileData GetUserByUUID(UUID uuid) override public UserProfileData GetUserByUUID(UUID uuid)
{ {
UserProfileData user; UserProfileData user;
// TODO: I'm sure I'll have to do something silly here m_log.InfoFormat("[NHIBERNATE] GetUserByUUID: {0} ", uuid);
try
user = (UserProfileData)manager.Load(typeof(UserProfileData), uuid);
if (user != null)
{ {
user = session.Load(typeof(UserProfileData), uuid) as UserProfileData; UserAgentData agent = GetAgentByUUID(uuid);
user.CurrentAgent = GetAgentByUUID(uuid); if (agent != null)
{
user.CurrentAgent = agent;
} }
catch (ObjectNotFoundException)
{
user = null;
} }
return user; return user;
@ -126,33 +99,30 @@ namespace OpenSim.Data.NHibernate
{ {
if (!ExistsUser(profile.ID)) if (!ExistsUser(profile.ID))
{ {
session.Save(profile); m_log.InfoFormat("[NHIBERNATE] AddNewUserProfile {0}", profile.ID);
manager.Save(profile);
SetAgentData(profile.ID, profile.CurrentAgent); SetAgentData(profile.ID, profile.CurrentAgent);
} }
else else
{ {
m_log.ErrorFormat("Attempted to add User {0} {1} that already exists, updating instead", profile.FirstName, profile.SurName); m_log.ErrorFormat("[NHIBERNATE] Attempted to add User {0} {1} that already exists, updating instead", profile.FirstName, profile.SurName);
UpdateUserProfile(profile); UpdateUserProfile(profile);
} }
} }
private void SetAgentData(UUID uuid, UserAgentData agent) private void SetAgentData(UUID uuid, UserAgentData agent)
{ {
if (agent == null) UserAgentData old = (UserAgentData)manager.Load(typeof(UserAgentData), uuid);
if (old != null)
{ {
// TODO: got to figure out how to do a delete right m_log.InfoFormat("[NHIBERNATE] SetAgentData deleting old: {0} ",uuid);
manager.Delete(old);
} }
else if (agent != null)
{ {
try m_log.InfoFormat("[NHIBERNATE] SetAgentData: {0} ", agent.ProfileID);
{ manager.Save(agent);
UserAgentData old = session.Load(typeof(UserAgentData), uuid) as UserAgentData;
session.Delete(old);
}
catch (ObjectNotFoundException)
{
}
session.Save(agent);
} }
} }
@ -160,13 +130,13 @@ namespace OpenSim.Data.NHibernate
{ {
if (ExistsUser(profile.ID)) if (ExistsUser(profile.ID))
{ {
session.Update(profile); manager.Update(profile);
SetAgentData(profile.ID, profile.CurrentAgent); SetAgentData(profile.ID, profile.CurrentAgent);
return true; return true;
} }
else else
{ {
m_log.ErrorFormat("Attempted to update User {0} {1} that doesn't exist, updating instead", profile.FirstName, profile.SurName); m_log.ErrorFormat("[NHIBERNATE] Attempted to update User {0} {1} that doesn't exist, updating instead", profile.FirstName, profile.SurName);
AddNewUserProfile(profile); AddNewUserProfile(profile);
return true; return true;
} }
@ -174,37 +144,32 @@ namespace OpenSim.Data.NHibernate
override public void AddNewUserAgent(UserAgentData agent) override public void AddNewUserAgent(UserAgentData agent)
{ {
try UserAgentData old = (UserAgentData)manager.Load(typeof(UserAgentData), agent.ProfileID);
if (old != null)
{ {
UserAgentData old = session.Load(typeof(UserAgentData), agent.ProfileID) as UserAgentData; manager.Delete(old);
session.Delete(old);
} }
catch (ObjectNotFoundException)
{ manager.Save(agent);
}
session.Save(agent);
} }
public void UpdateUserAgent(UserAgentData agent) public void UpdateUserAgent(UserAgentData agent)
{ {
session.Update(agent); m_log.InfoFormat("[NHIBERNATE] UpdateUserAgent: {0} ", agent.ProfileID);
manager.Update(agent);
} }
override public UserAgentData GetAgentByUUID(UUID uuid) override public UserAgentData GetAgentByUUID(UUID uuid)
{ {
try m_log.InfoFormat("[NHIBERNATE] GetAgentByUUID: {0} ", uuid);
{ return (UserAgentData)manager.Load(typeof(UserAgentData), uuid);
return session.Load(typeof(UserAgentData), uuid) as UserAgentData;
}
catch
{
return null;
}
} }
override public UserProfileData GetUserByName(string fname, string lname) override public UserProfileData GetUserByName(string fname, string lname)
{ {
ICriteria criteria = session.CreateCriteria(typeof(UserProfileData)); m_log.InfoFormat("[NHIBERNATE] GetUserByName: {0} {1} ", fname, lname);
ICriteria criteria = manager.GetSession().CreateCriteria(typeof(UserProfileData));
criteria.Add(Expression.Eq("FirstName", fname)); criteria.Add(Expression.Eq("FirstName", fname));
criteria.Add(Expression.Eq("SurName", lname)); criteria.Add(Expression.Eq("SurName", lname));
foreach (UserProfileData profile in criteria.List()) foreach (UserProfileData profile in criteria.List())
@ -233,7 +198,7 @@ namespace OpenSim.Data.NHibernate
if (querysplit.Length == 2) if (querysplit.Length == 2)
{ {
ICriteria criteria = session.CreateCriteria(typeof(UserProfileData)); ICriteria criteria = manager.GetSession().CreateCriteria(typeof(UserProfileData));
criteria.Add(Expression.Like("FirstName", querysplit[0])); criteria.Add(Expression.Like("FirstName", querysplit[0]));
criteria.Add(Expression.Like("SurName", querysplit[1])); criteria.Add(Expression.Like("SurName", querysplit[1]));
foreach (UserProfileData profile in criteria.List()) foreach (UserProfileData profile in criteria.List())
@ -262,26 +227,18 @@ namespace OpenSim.Data.NHibernate
/// TODO: stubs for now to get us to a compiling state gently /// TODO: stubs for now to get us to a compiling state gently
public override AvatarAppearance GetUserAppearance(UUID user) public override AvatarAppearance GetUserAppearance(UUID user)
{ {
AvatarAppearance appearance; return (AvatarAppearance)manager.Load(typeof(AvatarAppearance), user);
// TODO: I'm sure I'll have to do something silly here
try {
appearance = session.Load(typeof(AvatarAppearance), user) as AvatarAppearance;
} catch (ObjectNotFoundException) {
appearance = null;
}
return appearance;
} }
private bool ExistsAppearance(UUID uuid) private bool ExistsAppearance(UUID uuid)
{ {
AvatarAppearance appearance; AvatarAppearance appearance = (AvatarAppearance)manager.Load(typeof(AvatarAppearance), uuid);
try { if (appearance == null)
appearance = session.Load(typeof(AvatarAppearance), uuid) as AvatarAppearance; {
} catch (ObjectNotFoundException) { return false;
appearance = null;
} }
return (appearance == null) ? false : true; return true;
} }
@ -295,11 +252,11 @@ namespace OpenSim.Data.NHibernate
bool exists = ExistsAppearance(user); bool exists = ExistsAppearance(user);
if (exists) if (exists)
{ {
session.Update(appearance); manager.Update(appearance);
} }
else else
{ {
session.Save(appearance); manager.Save(appearance);
} }
} }

View File

@ -4,7 +4,7 @@
<id name="FullID" column="ID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"> <id name="FullID" column="ID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" /> <generator class="assigned" />
</id> </id>
<property name="Type" type="System.SByte" /> <property name="Type" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="64" /> <property name="Name" type="String" length="64" />
<property name="Description" type="String" length="64" /> <property name="Description" type="String" length="64" />
<property name="Local" type="boolean" /> <property name="Local" type="boolean" />

View File

@ -5,7 +5,7 @@
<generator class="assigned" /> <generator class="assigned" />
</id> </id>
<property name="Type" type="Int16" /> <property name="Type" type="Int16" />
<property name="Version" type="System.UInt16" /> <property name="Version" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="ParentID" index="folder_parent_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="ParentID" index="folder_parent_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="Owner" index="folder_owner_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="Owner" index="folder_owner_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="64" /> <property name="Name" type="String" length="64" />

View File

@ -12,15 +12,15 @@
<property name="Creator" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="Creator" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="64" /> <property name="Name" type="String" length="64" />
<property name="Description" type="String" length="64" /> <property name="Description" type="String" length="64" />
<property name="NextPermissions" type="System.UInt32" /> <property name="NextPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="CurrentPermissions" type="System.UInt32" /> <property name="CurrentPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="BasePermissions" type="System.UInt32" /> <property name="BasePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EveryOnePermissions" type="System.UInt32" /> <property name="EveryOnePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="GroupID" index="item_group_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="GroupID" index="item_group_id" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="GroupOwned" type="boolean" /> <property name="GroupOwned" type="boolean" />
<property name="SalePrice" type="System.Int32" /> <property name="SalePrice" type="System.Int32" />
<property name="SaleType" type="System.Byte" /> <property name="SaleType" type="System.Byte" />
<property name="Flags" type="System.UInt32" /> <property name="Flags" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="CreationDate" type="System.Int32" /> <property name="CreationDate" type="System.Int32" />
</class> </class>
</hibernate-mapping> </hibernate-mapping>

View File

@ -2,7 +2,7 @@ BEGIN;
CREATE TABLE `Terrain` ( CREATE TABLE `Terrain` (
`RegionID` char(36) not null, `RegionID` char(36) not null,
`Map` longblob, `MapData` longblob,
PRIMARY KEY (`RegionID`) PRIMARY KEY (`RegionID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

View File

@ -4,7 +4,7 @@
<id name="UUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"> <id name="UUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" /> <generator class="assigned" />
</id> </id>
<property name="ParentID" type="System.UInt32"/> <property name="ParentID" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate"/>
<property name="ParentUUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="ParentUUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="RegionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="RegionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="CreationDate" type="System.Int32" /> <property name="CreationDate" type="System.Int32" />
@ -14,17 +14,17 @@
<property name="SitName" type="String" length="255" /> <property name="SitName" type="String" length="255" />
<property name="TouchName" type="String" length="255" /> <property name="TouchName" type="String" length="255" />
<property name="ObjectFlags" type="System.UInt32" /> <property name="ObjectFlags" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="CreatorID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="CreatorID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="OwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="OwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="GroupID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="GroupID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="LastOwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="LastOwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="OwnerMask" type="System.UInt32" /> <property name="OwnerMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="NextOwnerMask" type="System.UInt32" /> <property name="NextOwnerMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="GroupMask" type="System.UInt32" /> <property name="GroupMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EveryoneMask" type="System.UInt32" /> <property name="EveryoneMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="BaseMask" type="System.UInt32" /> <property name="BaseMask" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="OffsetPosition" type="OpenSim.Data.NHibernate.Vector3UserType, OpenSim.Data.NHibernate" > <property name="OffsetPosition" type="OpenSim.Data.NHibernate.Vector3UserType, OpenSim.Data.NHibernate" >
<column name="PositionX" /> <column name="PositionX" />
@ -83,24 +83,24 @@
<column name="ScaleZ" /> <column name="ScaleZ" />
</property> </property>
<property name="PCode" type="System.Byte" /> <property name="PCode" type="System.Byte" />
<property name="PathBegin" type="System.UInt16" /> <property name="PathBegin" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="PathEnd" type="System.UInt16" /> <property name="PathEnd" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="PathScaleX" type="System.Byte" /> <property name="PathScaleX" type="System.Byte" />
<property name="PathScaleY" type="System.Byte" /> <property name="PathScaleY" type="System.Byte" />
<property name="PathShearX" type="System.Byte" /> <property name="PathShearX" type="System.Byte" />
<property name="PathShearY" type="System.Byte" /> <property name="PathShearY" type="System.Byte" />
<property name="PathSkew" type="System.SByte" /> <property name="PathSkew" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="PathCurve" type="System.Byte" /> <property name="PathCurve" type="System.Byte" />
<property name="PathRadiusOffset" type="System.SByte" /> <property name="PathRadiusOffset" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="PathRevolutions" type="System.Byte" /> <property name="PathRevolutions" type="System.Byte" />
<property name="PathTaperX" type="System.SByte" /> <property name="PathTaperX" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="PathTwist" type="System.SByte" /> <property name="PathTwist" type="OpenSim.Data.NHibernate.SByteType, OpenSim.Data.NHibernate" />
<property name="ProfileBegin" type="System.UInt16" /> <property name="ProfileBegin" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="ProfileEnd" type="System.UInt16" /> <property name="ProfileEnd" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="ProfileCurve" type="System.Byte" /> <property name="ProfileCurve" type="System.Byte" />
<property name="ProfileHollow" type="System.UInt16" /> <property name="ProfileHollow" type="OpenSim.Data.NHibernate.UInt16Type, OpenSim.Data.NHibernate" />
<property name="TextureEntry" column="Texture" type="System.Byte[]" /> <property name="TextureEntry" column="Texture" type="binary" />
<property name="ExtraParams" type="System.Byte[]" /> <property name="ExtraParams" type="binary" />
<property name="State" type="System.Byte" /> <property name="State" type="System.Byte" />
</component> </component>
</class> </class>
@ -108,7 +108,8 @@
<id name="RegionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"> <id name="RegionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" /> <generator class="assigned" />
</id> </id>
<property name="Map" type="System.Byte[]" /> <!-- <property name="MapData" type="OpenSim.Data.NHibernate.BlobType, OpenSim.Data.NHibernate" /> -->
<property name="MapData" type="binary" />
</class> </class>
<class name="OpenSim.Framework.TaskInventoryItem, OpenSim.Framework" table="PrimItems" lazy="false"> <class name="OpenSim.Framework.TaskInventoryItem, OpenSim.Framework" table="PrimItems" lazy="false">
<id name="ItemID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"> <id name="ItemID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
@ -121,15 +122,47 @@
<property name="OwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/> <property name="OwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="GroupID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/> <property name="GroupID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="LastOwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/> <property name="LastOwnerID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="CurrentPermissions" type="System.UInt32" /> <property name="CurrentPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="BasePermissions" type="System.UInt32" /> <property name="BasePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EveryonePermissions" type="System.UInt32" /> <property name="EveryonePermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="GroupPermissions" type="System.UInt32" /> <property name="GroupPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="NextPermissions" type="System.UInt32" /> <property name="NextPermissions" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="Name" type="String" length="255" /> <property name="Name" type="String" length="255" />
<property name="Description" type="String" length="255" /> <property name="Description" type="String" length="255" />
<property name="CreationDate" type="System.UInt32" /> <property name="CreationDate" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="Flags" type="System.UInt32" /> <property name="Flags" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="InvType" type="System.Int32" /> <property name="InvType" type="System.Int32" />
</class> </class>
<class name="OpenSim.Data.RegionProfileData, OpenSim.Data" table="Regions" lazy="false">
<id name="Uuid" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate">
<generator class="assigned" />
</id>
<property name="RegionHandle" index="region_handle" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="RegionName" index="region_name" type="String" length="32"/>
<property name="RegionRecvKey" type="String" length="128"/>
<property name="RegionSendKey" type="String" length="128"/>
<property name="RegionSecret" type="String" length="128"/>
<property name="RegionDataURI" type="String" length="255"/>
<property name="ServerIP" type="String" length="64"/>
<property name="ServerPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="ServerURI" type="String" length="255"/>
<property name="RegionLocX" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="RegionLocY" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="RegionLocZ" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="EastOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="WestOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="SouthOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="NorthOverrideHandle" index="overrideHandles" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="RegionAssetURI" type="String" length="255"/>
<property name="RegionAssetRecvKey" type="String" length="128"/>
<property name="RegionAssetSendKey" type="String" length="128"/>
<property name="RegionUserURI" type="String" length="255"/>
<property name="RegionUserRecvKey" type="String" length="128"/>
<property name="RegionUserSendKey" type="String" length="128"/>
<property name="ServerHttpPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="ServerRemotingPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="RegionMapTextureID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="Owner_uuid" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
<property name="OriginUUID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate"/>
</class>
</hibernate-mapping> </hibernate-mapping>

View File

@ -5,7 +5,7 @@
<generator class="assigned" /> <generator class="assigned" />
</id> </id>
<property name="AgentIP" type="String" length="24" /> <property name="AgentIP" type="String" length="24" />
<property name="AgentPort" type="Int32" /> <property name="AgentPort" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="AgentOnline" type="boolean" /> <property name="AgentOnline" type="boolean" />
<property name="SessionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="SessionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="SecureSessionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="SecureSessionID" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
@ -13,9 +13,9 @@
<property name="Region" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="Region" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="LoginTime" type="Int32" /> <property name="LoginTime" type="Int32" />
<property name="LogoutTime" type="Int32" /> <property name="LogoutTime" type="Int32" />
<property name="Handle" type="Int64" /> <property name="Handle" type="OpenSim.Data.NHibernate.UInt64Type, OpenSim.Data.NHibernate" />
<property name="PositionX" type="Single" /> <!-- <property name="PositionX" type="Single" />
<property name="PositionY" type="Single" /> <property name="PositionY" type="Single" />
<property name="PositionZ" type="Single" /> <property name="PositionZ" type="Single" /> -->
</class> </class>
</hibernate-mapping> </hibernate-mapping>

View File

@ -9,8 +9,8 @@
<property name="PasswordHash" type="String" length="32" /> <property name="PasswordHash" type="String" length="32" />
<property name="PasswordSalt" type="String" length="32" /> <property name="PasswordSalt" type="String" length="32" />
<property name="WebLoginKey" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" /> <property name="WebLoginKey" type="OpenSim.Data.NHibernate.UUIDUserType, OpenSim.Data.NHibernate" />
<property name="HomeRegionX" type="System.UInt32" /> <property name="HomeRegionX" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="HomeRegionY" type="System.UInt32" /> <property name="HomeRegionY" type="OpenSim.Data.NHibernate.UInt32Type, OpenSim.Data.NHibernate" />
<property name="HomeLocationX" type="Single" /> <property name="HomeLocationX" type="Single" />
<property name="HomeLocationY" type="Single" /> <property name="HomeLocationY" type="Single" />
<property name="HomeLocationZ" type="Single" /> <property name="HomeLocationZ" type="Single" />

View File

@ -60,7 +60,7 @@ namespace OpenSim.Data.NHibernate
set { regionID = value; } set { regionID = value; }
} }
public byte[] Map public byte[] MapData
{ {
get { return serializeTerrain(map); } get { return serializeTerrain(map); }
set { map = parseTerrain(value); } set { map = parseTerrain(value); }

View File

@ -36,6 +36,7 @@ namespace OpenSim.Data
/// <summary> /// <summary>
/// A class which contains information known to the grid server about a region /// A class which contains information known to the grid server about a region
/// </summary> /// </summary>
[Serializable]
public class RegionProfileData public class RegionProfileData
{ {
/// <summary> /// <summary>
@ -210,5 +211,155 @@ namespace OpenSim.Data
{ {
return RequestSimData(gridserver_url, gridserver_sendkey, "region_name_search", regionName ); return RequestSimData(gridserver_url, gridserver_sendkey, "region_name_search", regionName );
} }
//Data Wrappers
public string RegionName
{
get { return regionName; }
set { regionName = value; }
}
public ulong RegionHandle
{
get { return regionHandle; }
set { regionHandle = value; }
}
public UUID Uuid
{
get { return UUID; }
set { UUID = value; }
}
public uint RegionLocX
{
get { return regionLocX; }
set { regionLocX = value; }
}
public uint RegionLocY
{
get { return regionLocY; }
set { regionLocY = value; }
}
public uint RegionLocZ
{
get { return regionLocZ; }
set { regionLocZ = value; }
}
public string RegionSendKey
{
get { return regionSendKey; }
set { regionSendKey = value; }
}
public string RegionRecvKey
{
get { return regionRecvKey; }
set { regionRecvKey = value; }
}
public string RegionSecret
{
get { return regionSecret; }
set { regionSecret = value; }
}
public bool RegionOnline
{
get { return regionOnline; }
set { regionOnline = value; }
}
public string ServerIP
{
get { return serverIP; }
set { serverIP = value; }
}
public uint ServerPort
{
get { return serverPort; }
set { serverPort = value; }
}
public string ServerURI
{
get { return serverURI; }
set { serverURI = value; }
}
public uint ServerHttpPort
{
get { return httpPort; }
set { httpPort = value; }
}
public uint ServerRemotingPort
{
get { return remotingPort; }
set { remotingPort = value; }
}
public ulong NorthOverrideHandle
{
get { return regionNorthOverrideHandle; }
set { regionNorthOverrideHandle = value; }
}
public ulong SouthOverrideHandle
{
get { return regionSouthOverrideHandle; }
set { regionSouthOverrideHandle = value; }
}
public ulong EastOverrideHandle
{
get { return regionEastOverrideHandle; }
set { regionEastOverrideHandle = value; }
}
public ulong WestOverrideHandle
{
get { return regionWestOverrideHandle; }
set { regionWestOverrideHandle = value; }
}
public string RegionDataURI
{
get { return regionDataURI; }
set { regionDataURI = value; }
}
public string RegionAssetURI
{
get { return regionAssetURI; }
set { regionAssetURI = value; }
}
public string RegionAssetSendKey
{
get { return regionAssetSendKey; }
set { regionAssetSendKey = value; }
}
public string RegionAssetRecvKey
{
get { return regionAssetRecvKey; }
set { regionAssetRecvKey = value; }
}
public string RegionUserURI
{
get { return regionUserURI; }
set { regionUserURI = value; }
}
public string RegionUserSendKey
{
get { return regionUserSendKey; }
set { regionUserSendKey = value; }
}
public string RegionUserRecvKey
{
get { return regionUserRecvKey; }
set { regionUserRecvKey = value; }
}
public UUID RegionMapTextureID
{
get { return regionMapTextureID; }
set { regionMapTextureID = value; }
}
public UUID Owner_uuid
{
get { return owner_uuid; }
set { owner_uuid = value; }
}
public UUID OriginUUID
{
get { return originUUID; }
set { originUUID = value; }
}
} }
} }

BIN
bin/Castle.Core.dll Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -19,6 +19,12 @@
</layout> </layout>
</appender> </appender>
<!-- if you'd like to know what NHibernate is doing more set value="DEBUG" -->
<logger name="NHibernate" additivity="false">
<level value="INFO"/>
<appender-ref ref="NHibernateFileLog"/>
</logger>
<root> <root>
<level value="DEBUG" /> <level value="DEBUG" />
<appender-ref ref="Console" /> <appender-ref ref="Console" />

View File

@ -1867,9 +1867,11 @@
<Files> <Files>
<Match pattern="*.cs" recurse="true"/> <Match pattern="*.cs" recurse="true"/>
<Match path="Resources" pattern="*.xml" buildAction="EmbeddedResource"/> <Match path="Resources" pattern="*.xml" buildAction="EmbeddedResource"/>
<Match pattern="*.addin.xml" path="Resources" buildAction="EmbeddedResource" recurse="true"/>
<!-- add more as you go --> <!-- add more as you go -->
<Match path="Resources/SQLiteDialect" pattern="*.sql" buildAction="EmbeddedResource"/> <Match path="Resources/SQLiteDialect" pattern="*.sql" buildAction="EmbeddedResource"/>
<Match path="Resources/MySQLDialect" pattern="*.sql" buildAction="EmbeddedResource"/> <Match path="Resources/MySQLDialect" pattern="*.sql" buildAction="EmbeddedResource"/>
<Match path="Resources/MsSql2005Dialect" pattern="*.sql" buildAction="EmbeddedResource"/>
</Files> </Files>
</Project> </Project>