diff options
Diffstat (limited to 'OpenSim/Data/NHibernate/NHibernateAssetData.cs')
-rw-r--r-- | OpenSim/Data/NHibernate/NHibernateAssetData.cs | 77 |
1 files changed, 8 insertions, 69 deletions
diff --git a/OpenSim/Data/NHibernate/NHibernateAssetData.cs b/OpenSim/Data/NHibernate/NHibernateAssetData.cs index 6ee527e..90d41e3 100644 --- a/OpenSim/Data/NHibernate/NHibernateAssetData.cs +++ b/OpenSim/Data/NHibernate/NHibernateAssetData.cs | |||
@@ -33,10 +33,7 @@ using System.Text.RegularExpressions; | |||
33 | using OpenMetaverse; | 33 | using OpenMetaverse; |
34 | using log4net; | 34 | using log4net; |
35 | using NHibernate; | 35 | using NHibernate; |
36 | using NHibernate.Cfg; | ||
37 | using NHibernate.Expression; | ||
38 | using NHibernate.Mapping.Attributes; | 36 | using NHibernate.Mapping.Attributes; |
39 | using NHibernate.Tool.hbm2ddl; | ||
40 | using OpenSim.Framework; | 37 | using OpenSim.Framework; |
41 | using Environment=NHibernate.Cfg.Environment; | 38 | using Environment=NHibernate.Cfg.Environment; |
42 | 39 | ||
@@ -49,9 +46,7 @@ namespace OpenSim.Data.NHibernate | |||
49 | { | 46 | { |
50 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
51 | 48 | ||
52 | private Configuration cfg; | 49 | private NHibernateManager manager; |
53 | private ISessionFactory factory; | ||
54 | private ISession session; | ||
55 | 50 | ||
56 | override public void Dispose() { } | 51 | override public void Dispose() { } |
57 | 52 | ||
@@ -62,79 +57,23 @@ namespace OpenSim.Data.NHibernate | |||
62 | 57 | ||
63 | public override void Initialise(string connect) | 58 | public override void Initialise(string connect) |
64 | { | 59 | { |
65 | // Split out the dialect, driver, and connect string | ||
66 | char[] split = {';'}; | ||
67 | string[] parts = connect.Split(split, 3); | ||
68 | if (parts.Length != 3) | ||
69 | { | ||
70 | // TODO: make this a real exception type | ||
71 | throw new Exception("Malformed Inventory connection string '" + connect + "'"); | ||
72 | } | ||
73 | |||
74 | string dialect = parts[0]; | ||
75 | |||
76 | // NHibernate setup | ||
77 | cfg = new Configuration(); | ||
78 | cfg.SetProperty(Environment.ConnectionProvider, | ||
79 | "NHibernate.Connection.DriverConnectionProvider"); | ||
80 | cfg.SetProperty(Environment.Dialect, | ||
81 | "NHibernate.Dialect." + dialect); | ||
82 | cfg.SetProperty(Environment.ConnectionDriver, | ||
83 | "NHibernate.Driver." + parts[1]); | ||
84 | cfg.SetProperty(Environment.ConnectionString, parts[2]); | ||
85 | cfg.AddAssembly("OpenSim.Data.NHibernate"); | ||
86 | |||
87 | 60 | ||
88 | 61 | m_log.InfoFormat("[NHIBERNATE] Initializing NHibernateAssetData"); | |
89 | HbmSerializer.Default.Validate = true; | 62 | manager = new NHibernateManager(connect, "AssetStore"); |
90 | using (MemoryStream stream = | ||
91 | HbmSerializer.Default.Serialize(Assembly.GetExecutingAssembly())) | ||
92 | cfg.AddInputStream(stream); | ||
93 | |||
94 | factory = cfg.BuildSessionFactory(); | ||
95 | session = factory.OpenSession(); | ||
96 | |||
97 | // This actually does the roll forward assembly stuff | ||
98 | Assembly assem = GetType().Assembly; | ||
99 | Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, "AssetStore"); | ||
100 | m.Update(); | ||
101 | 63 | ||
102 | } | 64 | } |
103 | 65 | ||
104 | override public AssetBase FetchAsset(UUID uuid) | 66 | override public AssetBase FetchAsset(UUID uuid) |
105 | { | 67 | { |
106 | try | 68 | return (AssetBase)manager.Load(typeof(AssetBase), uuid); |
107 | { | ||
108 | return session.Load(typeof(AssetBase), uuid) as AssetBase; | ||
109 | } | ||
110 | catch (ObjectNotFoundException) | ||
111 | { | ||
112 | m_log.ErrorFormat("[NHIBERNATE] no such asset {0}", uuid); | ||
113 | return null; | ||
114 | } | ||
115 | catch (Exception e) | ||
116 | { | ||
117 | m_log.Error("[NHIBERNATE] unexpected exception: ", e); | ||
118 | return null; | ||
119 | } | ||
120 | } | 69 | } |
121 | 70 | ||
122 | private void Save(AssetBase asset) | 71 | private void Save(AssetBase asset) |
123 | { | 72 | { |
124 | try | 73 | AssetBase temp = (AssetBase)manager.Load(typeof(AssetBase), asset.FullID); |
74 | if (temp == null) | ||
125 | { | 75 | { |
126 | // a is not used anywhere? | 76 | manager.Save(asset); |
127 | // AssetBase a = session.Load(typeof(AssetBase), asset.FullID) as AssetBase; | ||
128 | session.Load(typeof(AssetBase), asset.FullID); | ||
129 | } | ||
130 | catch (ObjectNotFoundException) | ||
131 | { | ||
132 | session.Save(asset); | ||
133 | session.Flush(); | ||
134 | } | ||
135 | catch (Exception e) | ||
136 | { | ||
137 | m_log.Error("[NHIBERNATE] issue saving asset", e); | ||
138 | } | 77 | } |
139 | } | 78 | } |
140 | 79 | ||
@@ -147,7 +86,7 @@ namespace OpenSim.Data.NHibernate | |||
147 | override public void UpdateAsset(AssetBase asset) | 86 | override public void UpdateAsset(AssetBase asset) |
148 | { | 87 | { |
149 | m_log.InfoFormat("[NHIBERNATE] updating asset {0}", asset.FullID); | 88 | m_log.InfoFormat("[NHIBERNATE] updating asset {0}", asset.FullID); |
150 | Save(asset); | 89 | manager.Update(asset); |
151 | } | 90 | } |
152 | 91 | ||
153 | // private void LogAssetLoad(AssetBase asset) | 92 | // private void LogAssetLoad(AssetBase asset) |