Update of /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data.NHibernate12/Data/NHibernate
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv9032
Modified Files:
LocalSessionFactoryObject.cs
Log Message:
SPRNET-879 - LocalSessionFactoryObject can configure ISessionFactory to use Spring's IDbProvider as a NHibernate ConnectionProvider
Index: LocalSessionFactoryObject.cs
===================================================================
RCS file: /cvsroot/springnet/Spring.Net/src/Spring/Spring.Data.NHibernate12/Data/NHibernate/LocalSessionFactoryObject.cs,v
retrieving revision 1.9
retrieving revision 1.10
diff -C2 -d -r1.9 -r1.10
*** LocalSessionFactoryObject.cs 29 Jan 2008 19:48:40 -0000 1.9
--- LocalSessionFactoryObject.cs 25 Feb 2008 20:39:12 -0000 1.10
***************
*** 22,28 ****
--- 22,30 ----
using System.Collections;
+ using System.Data;
using Common.Logging;
using NHibernate;
using NHibernate.Cfg;
+ using NHibernate.Connection;
using Spring.Core.IO;
using Spring.Data.Common;
***************
*** 248,251 ****
--- 250,255 ----
config.SetProperty(Environment.ConnectionString,
dbProvider.ConnectionString);
+ config.SetProperty(Environment.ConnectionProvider, typeof(DbProviderWrapper).AssemblyQualifiedName);
+
}
***************
*** 261,264 ****
--- 265,280 ----
if (this.hibernateProperties != null)
{
+ if (config.GetProperty(Environment.ConnectionProvider) !=null &&
+ hibernateProperties.Contains(Environment.ConnectionProvider))
+ {
+ #region Logging
+ if (log.IsWarnEnabled)
+ {
+ log.Warn("Overriding use of Spring's Hibernate Connection Provider with [" +
+ hibernateProperties[Environment.ConnectionProvider] + "]");
+ }
+ #endregion
+ config.Properties.Remove(Environment.ConnectionProvider);
+ }
config.AddProperties(hibernateProperties);
}
***************
*** 360,366 ****
protected virtual ISessionFactory NewSessionFactory(Configuration config)
{
! return config.BuildSessionFactory();
}
}
}
--- 376,419 ----
protected virtual ISessionFactory NewSessionFactory(Configuration config)
{
! ISessionFactory sf = config.BuildSessionFactory();
! DbProviderWrapper dbProviderWrapper = sf.ConnectionProvider as DbProviderWrapper;
! if (dbProviderWrapper != null)
! {
! dbProviderWrapper.DbProvider = dbProvider;
! }
! return sf;
}
+ #region DbProviderWrapper Helper class
+
+ internal class DbProviderWrapper : ConnectionProvider
+ {
+ private IDbProvider _dbProvider;
+
+ public DbProviderWrapper()
+ {
+ }
+
+ public IDbProvider DbProvider
+ {
+ get { return _dbProvider; }
+ set { _dbProvider = value; }
+ }
+
+ public override void CloseConnection(IDbConnection conn)
+ {
+ base.CloseConnection(conn);
+ conn.Dispose();
+ }
+
+ public override IDbConnection GetConnection()
+ {
+ IDbConnection dbCon = _dbProvider.CreateConnection();
+ dbCon.Open();
+ return dbCon;
+ }
+ }
+
+ #endregion // DbProviderWrapper Helper class
}
}
|