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()
|
public NHibernateManager()
|
||||||
{
|
{
|
||||||
// This is stubbing for now, it will become dynamic later and support different db backends
|
// This is stubbing for now, it will become dynamic later and support different db backends
|
||||||
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
|
// NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
|
||||||
cfg.Properties[NHibernate.Cfg.Environment.ConnectionProvider] =
|
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionProvider] =
|
||||||
"NHibernate.Connection.DriverConnectionProvider";
|
// "NHibernate.Connection.DriverConnectionProvider";
|
||||||
cfg.Properties[NHibernate.Cfg.Environment.Dialect] =
|
// cfg.Properties[NHibernate.Cfg.Environment.Dialect] =
|
||||||
"NHibernate.Dialect.SQLite";
|
// "NHibernate.Dialect.SQLite";
|
||||||
cfg.Properties[NHibernate.Cfg.Environment.ConnectionDriver] =
|
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionDriver] =
|
||||||
"NHibernate.Driver.SqliteClientDriver";
|
// "NHibernate.Driver.SqliteClientDriver";
|
||||||
cfg.Properties[NHibernate.Cfg.Environment.ConnectionString] =
|
// cfg.Properties[NHibernate.Cfg.Environment.ConnectionString] =
|
||||||
"URI=file:opensim-nh.db,version=3";
|
// "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