diff options
author | Charles Krinke | 2009-01-10 16:31:00 +0000 |
---|---|---|
committer | Charles Krinke | 2009-01-10 16:31:00 +0000 |
commit | 16561bd5286a2c2f056ac61e15b63deaa486f8e1 (patch) | |
tree | 64365ee9c8d565e81cd1621c03e983835d324c41 /OpenSim/Data/NHibernate | |
parent | Revert progressive texture patch from r8001 until issues can be addressed (diff) | |
download | opensim-SC-16561bd5286a2c2f056ac61e15b63deaa486f8e1.zip opensim-SC-16561bd5286a2c2f056ac61e15b63deaa486f8e1.tar.gz opensim-SC-16561bd5286a2c2f056ac61e15b63deaa486f8e1.tar.bz2 opensim-SC-16561bd5286a2c2f056ac61e15b63deaa486f8e1.tar.xz |
Thank you kindly, Tlaukkan (Tommil) for a patch that:
NHibernate MySQL migration was not working as mysql dialect is
MySQL5Dialect now instead of MySQLDialect which is the migration
sub folder name. Fixed this by adding simple dialect to migration
sub type mapping to manager initialization to avoid need of renaming
migration script folder each time MySQL version changes. Removed
shared session and changed session to be constructed per call as
NHibernate session is not thread safe. Refactored manager member
names to be according to the naming convention (full words in camel case).
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Data/NHibernate/NHibernateManager.cs | 118 |
1 files changed, 73 insertions, 45 deletions
diff --git a/OpenSim/Data/NHibernate/NHibernateManager.cs b/OpenSim/Data/NHibernate/NHibernateManager.cs index 12d8959..0692f26 100644 --- a/OpenSim/Data/NHibernate/NHibernateManager.cs +++ b/OpenSim/Data/NHibernate/NHibernateManager.cs | |||
@@ -42,9 +42,8 @@ namespace OpenSim.Data.NHibernate | |||
42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 42 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
43 | 43 | ||
44 | private string dialect; | 44 | private string dialect; |
45 | private Configuration cfg; | 45 | private Configuration configuration; |
46 | private ISessionFactory factory; | 46 | private ISessionFactory sessionFactory; |
47 | private ISession session; | ||
48 | 47 | ||
49 | public NHibernateManager(string connect, string store) | 48 | public NHibernateManager(string connect, string store) |
50 | { | 49 | { |
@@ -61,41 +60,53 @@ namespace OpenSim.Data.NHibernate | |||
61 | dialect = parts[0]; | 60 | dialect = parts[0]; |
62 | 61 | ||
63 | // NHibernate setup | 62 | // NHibernate setup |
64 | cfg = new Configuration(); | 63 | configuration = new Configuration(); |
65 | cfg.SetProperty(Environment.ConnectionProvider, | 64 | configuration.SetProperty(Environment.ConnectionProvider, |
66 | "NHibernate.Connection.DriverConnectionProvider"); | 65 | "NHibernate.Connection.DriverConnectionProvider"); |
67 | cfg.SetProperty(Environment.Dialect, | 66 | configuration.SetProperty(Environment.Dialect, |
68 | "NHibernate.Dialect." + dialect); | 67 | "NHibernate.Dialect." + dialect); |
69 | cfg.SetProperty(Environment.ConnectionDriver, | 68 | configuration.SetProperty(Environment.ConnectionDriver, |
70 | "NHibernate.Driver." + parts[1]); | 69 | "NHibernate.Driver." + parts[1]); |
71 | cfg.SetProperty(Environment.ConnectionString, parts[2]); | 70 | configuration.SetProperty(Environment.ConnectionString, parts[2]); |
72 | cfg.AddAssembly("OpenSim.Data.NHibernate"); | 71 | configuration.AddAssembly("OpenSim.Data.NHibernate"); |
73 | 72 | ||
74 | //To create sql file uncomment code below and write the name of the file | 73 | //To create sql file uncomment code below and write the name of the file |
75 | //SchemaExport exp = new SchemaExport(cfg); | 74 | //SchemaExport exp = new SchemaExport(cfg); |
76 | //exp.SetOutputFile("nameofthefile.sql"); | 75 | //exp.SetOutputFile("nameofthefile.sql"); |
77 | //exp.Create(false, true); | 76 | //exp.Create(false, true); |
78 | 77 | ||
79 | factory = cfg.BuildSessionFactory(); | 78 | sessionFactory = configuration.BuildSessionFactory(); |
80 | session = factory.OpenSession(); | ||
81 | 79 | ||
82 | Assembly assem = GetType().Assembly; | 80 | Assembly assembly = GetType().Assembly; |
83 | Migration m = new Migration((System.Data.Common.DbConnection)factory.ConnectionProvider.GetConnection(), assem, dialect, store); | 81 | |
84 | m.Update(); | 82 | // Migration subtype is the folder name under which migrations are stored. For mysql this folder is |
83 | // MySQLDialect instead of MySQL5Dialect which is the dialect currently in use. To avoid renaming | ||
84 | // this folder each time the mysql version changes creating simple mapping: | ||
85 | String migrationSubType = dialect; | ||
86 | if (dialect.StartsWith("MySQL")) | ||
87 | { | ||
88 | migrationSubType="MySQLDialect"; | ||
89 | } | ||
90 | |||
91 | Migration migration = new Migration((System.Data.Common.DbConnection)sessionFactory.ConnectionProvider.GetConnection(), assembly, migrationSubType, store); | ||
92 | migration.Update(); | ||
85 | } | 93 | } |
86 | 94 | ||
87 | public object Load(Type type, UUID uuid) | 95 | public object Load(Type type, UUID uuid) |
88 | { | 96 | { |
89 | object obj = null; | 97 | using (IStatelessSession session = sessionFactory.OpenStatelessSession()) |
90 | try | ||
91 | { | 98 | { |
92 | obj = session.Load(type, uuid); | 99 | object obj = null; |
100 | try | ||
101 | { | ||
102 | obj = session.Get(type.FullName, uuid); | ||
103 | } | ||
104 | catch (Exception) | ||
105 | { | ||
106 | m_log.ErrorFormat("[NHIBERNATE] {0} not found with ID {1} ", type.Name, uuid); | ||
107 | } | ||
108 | return obj; | ||
93 | } | 109 | } |
94 | catch (Exception) | ||
95 | { | ||
96 | m_log.ErrorFormat("[NHIBERNATE] {0} not found with ID {1} ", type.Name, uuid); | ||
97 | } | ||
98 | return obj; | ||
99 | 110 | ||
100 | } | 111 | } |
101 | 112 | ||
@@ -103,63 +114,80 @@ namespace OpenSim.Data.NHibernate | |||
103 | { | 114 | { |
104 | try | 115 | try |
105 | { | 116 | { |
106 | session.BeginTransaction(); | 117 | using (IStatelessSession session = sessionFactory.OpenStatelessSession()) |
107 | session.Save(obj); | 118 | { |
108 | session.Transaction.Commit(); | 119 | using (ITransaction transaction=session.BeginTransaction()) |
109 | session.Flush(); | 120 | { |
110 | return true; | 121 | session.Insert(obj); |
122 | transaction.Commit(); | ||
123 | return true; | ||
124 | } | ||
125 | } | ||
111 | } | 126 | } |
112 | catch (Exception e) | 127 | catch (Exception e) |
113 | { | 128 | { |
114 | m_log.Error("[NHIBERNATE] issue saving object ", e); | 129 | m_log.Error("[NHIBERNATE] issue inserting object ", e); |
130 | return false; | ||
115 | } | 131 | } |
116 | return false; | ||
117 | } | 132 | } |
118 | 133 | ||
119 | public bool Update(object obj) | 134 | public bool Update(object obj) |
120 | { | 135 | { |
121 | try | 136 | try |
122 | { | 137 | { |
123 | session.BeginTransaction(); | 138 | using (IStatelessSession session = sessionFactory.OpenStatelessSession()) |
124 | session.Update(obj); | 139 | { |
125 | session.Transaction.Commit(); | 140 | using (ITransaction transaction = session.BeginTransaction()) |
126 | session.Flush(); | 141 | { |
127 | return true; | 142 | session.Update(obj); |
143 | transaction.Commit(); | ||
144 | return true; | ||
145 | } | ||
146 | } | ||
128 | } | 147 | } |
129 | catch (Exception e) | 148 | catch (Exception e) |
130 | { | 149 | { |
131 | m_log.Error("[NHIBERNATE] issue updating object ", e); | 150 | m_log.Error("[NHIBERNATE] issue updating object ", e); |
151 | return false; | ||
132 | } | 152 | } |
133 | return false; | ||
134 | } | 153 | } |
135 | 154 | ||
136 | public bool Delete(object obj) | 155 | public bool Delete(object obj) |
137 | { | 156 | { |
138 | try | 157 | try |
139 | { | 158 | { |
140 | session.BeginTransaction(); | 159 | using (IStatelessSession session = sessionFactory.OpenStatelessSession()) |
141 | session.Delete(obj); | 160 | { |
142 | session.Transaction.Commit(); | 161 | using (ITransaction transaction = session.BeginTransaction()) |
143 | session.Flush(); | 162 | { |
144 | return true; | 163 | session.Delete(obj); |
164 | transaction.Commit(); | ||
165 | return true; | ||
166 | } | ||
167 | } | ||
145 | } | 168 | } |
146 | catch (Exception e) | 169 | catch (Exception e) |
147 | { | 170 | { |
148 | |||
149 | m_log.Error("[NHIBERNATE] issue deleting object ", e); | 171 | m_log.Error("[NHIBERNATE] issue deleting object ", e); |
172 | return false; | ||
150 | } | 173 | } |
151 | return false; | ||
152 | } | 174 | } |
153 | 175 | ||
154 | public void DropSchema() | 176 | public void DropSchema() |
155 | { | 177 | { |
156 | SchemaExport export = new SchemaExport(this.cfg); | 178 | SchemaExport export = new SchemaExport(this.configuration); |
157 | export.Drop(true, true); | 179 | export.Drop(true, true); |
180 | |||
181 | using (ISession session = sessionFactory.OpenSession()) | ||
182 | { | ||
183 | ISQLQuery sqlQuery=session.CreateSQLQuery("drop table migrations"); | ||
184 | sqlQuery.ExecuteUpdate(); | ||
185 | } | ||
158 | } | 186 | } |
159 | 187 | ||
160 | public ISession GetSession() | 188 | public ISession GetSession() |
161 | { | 189 | { |
162 | return session; | 190 | return sessionFactory.OpenSession(); |
163 | } | 191 | } |
164 | } | 192 | } |
165 | } | 193 | } |