point in time update of NHibernate Asset Mapping code
parent
2d33bf854f
commit
fe14d65f07
|
@ -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
|
||||
{
|
||||
/// <summary>
|
||||
/// A User storage interface for the DB4o database system
|
||||
/// </summary>
|
||||
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()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
|
||||
<class name="OpenSim.Framework.AssetBase, OpenSim.Framework" table="Assets">
|
||||
<id name="ID" column="UUID" type="String" length="36" >
|
||||
<generator class="assigned" />
|
||||
</id>
|
||||
<property name="Type" type="integer" />
|
||||
<property name="InvType" type="integer" />
|
||||
<property name="Name" type="String" length="50" />
|
||||
<property name="Description" type="String" length="50" />
|
||||
<property name="Local" type="boolean" />
|
||||
<property name="Temporary" type="boolean" />
|
||||
<property name="Data" type="binary" />
|
||||
|
||||
</class>
|
||||
</hibernate-mapping>
|
Loading…
Reference in New Issue