From fe14d65f07b453b079aee1fe5ae17cfe7d6cb855 Mon Sep 17 00:00:00 2001
From: Sean Dague
Date: Thu, 3 Apr 2008 12:29:25 +0000
Subject: point in time update of NHibernate Asset Mapping code
---
OpenSim/Data/NHibernate/NHibernateAssetData.cs | 154 +++++++++++++++++++++
OpenSim/Data/NHibernate/NHibernateManager.cs | 20 +--
.../Data/NHibernate/Resources/AssetBase.hbm.xml | 16 +++
3 files changed, 180 insertions(+), 10 deletions(-)
create mode 100644 OpenSim/Data/NHibernate/NHibernateAssetData.cs
create mode 100644 OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml
diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs
new file mode 100644
index 0000000..cdb93df
--- /dev/null
+++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs
@@ -0,0 +1,154 @@
+/*
+ * Copyright (c) Contributors, http://opensimulator.org/
+ * See CONTRIBUTORS.TXT for a full list of copyright holders.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * * Neither the name of the OpenSim Project nor the
+ * names of its contributors may be used to endorse or promote products
+ * derived from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+using System;
+using System.Data;
+using System.Reflection;
+using libsecondlife;
+using NHibernate;
+using NHibernate.Cfg;
+using NHibernate.Tool.hbm2ddl;
+using NHibernate.Mapping.Attributes;
+using OpenSim.Data;
+using OpenSim.Framework;
+using OpenSim.Framework.Console;
+using Environment = NHibernate.Cfg.Environment;
+
+namespace OpenSim.Data.NHibernate
+{
+ ///
+ /// A User storage interface for the DB4o database system
+ ///
+ public class NHibernateAssetData : AssetDataBase, IDisposable
+ {
+ private static readonly log4net.ILog m_log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
+
+ private ISessionFactory factory;
+
+ public override void Initialise()
+ {
+ // 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
+ Configuration cfg = new Configuration();
+ cfg.SetProperty(Environment.ConnectionProvider,
+ "NHibernate.Connection.DriverConnectionProvider");
+ cfg.SetProperty(Environment.Dialect,
+ "NHibernate.Dialect.SQLiteDialect");
+ cfg.SetProperty(Environment.ConnectionDriver,
+ "NHibernate.Driver.SqliteClientDriver");
+ cfg.SetProperty(Environment.ConnectionString,
+ "URI=file:Asset.db,version=3");
+ cfg.AddAssembly("OpenSim.Data.NHibernate");
+
+ // HbmSerializer.Default.Validate = true;
+// using ( System.IO.MemoryStream stream =
+// HbmSerializer.Default.Serialize(System.Reflection.Assembly.GetExecutingAssembly()))
+// cfg.AddInputStream(stream);
+
+// new SchemaExport(cfg).Create(true, true);
+
+ factory = cfg.BuildSessionFactory();
+
+ }
+
+ override public AssetBase FetchAsset(LLUUID uuid)
+ {
+ return null;
+ }
+
+ override public void CreateAsset(AssetBase asset)
+ {
+ ISession session = null;
+ ITransaction transaction = null;
+ try {
+ session = factory.OpenSession();
+ transaction = session.BeginTransaction();
+
+ session.SaveOrUpdate(asset);
+ // CRUD operations here (with the session)
+ transaction.Commit();
+ }
+ catch {
+ if(transaction != null)
+ transaction.Rollback();
+ throw; // Don't trap the exception
+ }
+ finally {
+ if(session != null)
+ session.Close();
+ }
+ }
+
+ override public void UpdateAsset(AssetBase asset)
+ {
+
+ }
+
+ private void LogAssetLoad(AssetBase asset)
+ {
+ string temporary = asset.Temporary ? "Temporary" : "Stored";
+ string local = asset.Local ? "Local" : "Remote";
+
+ int assetLength = (asset.Data != null) ? asset.Data.Length : 0;
+
+ m_log.Info("[SQLITE]: " +
+ string.Format("Loaded {6} {5} Asset: [{0}][{3}/{4}] \"{1}\":{2} ({7} bytes)",
+ asset.FullID, asset.Name, asset.Description, asset.Type,
+ asset.InvType, temporary, local, assetLength));
+ }
+
+ override public bool ExistsAsset(LLUUID uuid)
+ {
+ return false;
+ }
+
+ public void DeleteAsset(LLUUID uuid)
+ {
+
+ }
+
+ override public void CommitAssets() // force a sync to the database
+ {
+ m_log.Info("[SQLITE]: Attempting commit");
+ }
+
+
+ public override string Name {
+ get { return "NHibernate"; }
+ }
+
+ public override string Version {
+ get { return "0.1"; }
+ }
+
+ public void Dispose()
+ {
+
+ }
+ }
+}
diff --git a/OpenSim/Data/NHibernate/NHibernateManager.cs b/OpenSim/Data/NHibernate/NHibernateManager.cs
index f9405b4..edef8ad 100644
--- a/OpenSim/Data/NHibernate/NHibernateManager.cs
+++ b/OpenSim/Data/NHibernate/NHibernateManager.cs
@@ -45,17 +45,17 @@ namespace OpenSim.Data.NHibernate
public NHibernateManager()
{
// 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";
+// 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();
+// factory = cfg.BuildSessionFactory();
}
}
diff --git a/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml
new file mode 100644
index 0000000..82c30fe
--- /dev/null
+++ b/OpenSim/Data/NHibernate/Resources/AssetBase.hbm.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
--
cgit v1.1