aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Data/NHibernate
diff options
context:
space:
mode:
authorCharles Krinke2009-01-10 16:31:00 +0000
committerCharles Krinke2009-01-10 16:31:00 +0000
commit16561bd5286a2c2f056ac61e15b63deaa486f8e1 (patch)
tree64365ee9c8d565e81cd1621c03e983835d324c41 /OpenSim/Data/NHibernate
parentRevert progressive texture patch from r8001 until issues can be addressed (diff)
downloadopensim-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.cs118
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}