From: <fab...@us...> - 2009-06-25 03:50:33
|
Revision: 4528 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4528&view=rev Author: fabiomaulo Date: 2009-06-25 03:50:31 +0000 (Thu, 25 Jun 2009) Log Message: ----------- Proof of concept of Loquacious session-factory configuration. Modified Paths: -------------- trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IBatcherConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICacheConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICollectionFactoryConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICommandsConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IConnectionConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbIntegrationConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbSchemaIntegrationConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IMappingsConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IProxyConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IQueryCacheConfiguration.cs trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ITransactionConfiguration.cs trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/ trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IBatcherConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IBatcherConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IBatcherConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,9 @@ +using NHibernate.AdoNet; +namespace NHibernate.Cfg.Loquacious +{ + public interface IBatcherConfiguration + { + IBatcherConfiguration Trough<TBatcher>() where TBatcher : IBatcherFactory; + IDbIntegrationConfiguration Each(short batchSize); + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICacheConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICacheConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICacheConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,12 @@ +using NHibernate.Cache; +namespace NHibernate.Cfg.Loquacious +{ + public interface ICacheConfiguration + { + ICacheConfiguration Trough<TProvider>() where TProvider : ICacheProvider; + ICacheConfiguration PrefixingRegionsWith(string regionPrefix); + ICacheConfiguration UsingMinimalPuts(); + IFluentSessionFactoryConfiguration WithDefaultExpiration(byte seconds); + IQueryCacheConfiguration Queries { get; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICollectionFactoryConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICollectionFactoryConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICollectionFactoryConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,8 @@ +using NHibernate.Bytecode; +namespace NHibernate.Cfg.Loquacious +{ + public interface ICollectionFactoryConfiguration + { + IFluentSessionFactoryConfiguration Trough<TCollecionsFactory>() where TCollecionsFactory : ICollectionTypeFactory; + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICommandsConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICommandsConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ICommandsConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,21 @@ +using NHibernate.Exceptions; +namespace NHibernate.Cfg.Loquacious +{ + public interface ICommandsConfiguration + { + ICommandsConfiguration Preparing(); + ICommandsConfiguration WithTimeout(int seconds); + ICommandsConfiguration ConvertingExpetionsTrough<TExceptionConverter>() where TExceptionConverter : ISQLExceptionConverter; + ICommandsConfiguration AutoCommentingSql(); + IDbIntegrationConfiguration WithHqlToSqlSubstitutions(string csvQuerySubstitutions); + IDbIntegrationConfiguration WithDefaultHqlToSqlSubstitutions(); + + /// <summary> + /// Maximum depth of outer join fetching + /// </summary> + /// <remarks> + /// 0 (zero) disable the usage of OuterJoinFetching + /// </remarks> + ICommandsConfiguration WithMaximumDepthOfOuterJoinFetching(byte maxFetchDepth); + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IConnectionConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IConnectionConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IConnectionConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,18 @@ +using System.Data; +using System.Data.Common; +using NHibernate.Driver; +using NHibernate.Connection; + +namespace NHibernate.Cfg.Loquacious +{ + public interface IConnectionConfiguration + { + IConnectionConfiguration Trough<TProvider>() where TProvider : IConnectionProvider; + IConnectionConfiguration Through<TDriver>() where TDriver : IDriver; + IConnectionConfiguration With(IsolationLevel level); + IConnectionConfiguration Releasing(ConnectionReleaseMode releaseMode); + IDbIntegrationConfiguration Using(string connectionString); + IDbIntegrationConfiguration Using(DbConnectionStringBuilder connectionStringBuilder); + IDbIntegrationConfiguration ByAppConfing(string connectionStringName); + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbIntegrationConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbIntegrationConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbIntegrationConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,27 @@ +namespace NHibernate.Cfg.Loquacious +{ + public interface IDbIntegrationConfiguration + { + /// <summary> + /// Define the dialect to use. + /// </summary> + /// <typeparam name="TDialect">The dialect implementation inherited from <see cref="Dialect.Dialect"/>. </typeparam> + /// <returns>The fluent configuration itself.</returns> + IDbIntegrationConfiguration Using<TDialect>() where TDialect : Dialect.Dialect; + IDbIntegrationConfiguration DisableKeywordsAutoImport(); + IDbIntegrationConfiguration AutoQuoteKeywords(); + IDbIntegrationConfiguration LogSqlInConsole(); + IDbIntegrationConfiguration DisableLogFormatedSql(); + + IConnectionConfiguration Connected { get; } + + IBatcherConfiguration BatchingQueries { get; } + + ITransactionConfiguration Transactions { get; } + + ICommandsConfiguration CreateCommands { get; } + + IDbSchemaIntegrationConfiguration Schema { get; } + + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbSchemaIntegrationConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbSchemaIntegrationConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IDbSchemaIntegrationConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,10 @@ +namespace NHibernate.Cfg.Loquacious +{ + public interface IDbSchemaIntegrationConfiguration + { + IDbIntegrationConfiguration Recreating(); + IDbIntegrationConfiguration Creating(); + IDbIntegrationConfiguration Updating(); + IDbIntegrationConfiguration Validating(); + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IFluentSessionFactoryConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,36 @@ +using NHibernate.Hql; +namespace NHibernate.Cfg.Loquacious +{ + public interface IFluentSessionFactoryConfiguration + { + /// <summary> + /// Set the SessionFactory mnemonic name. + /// </summary> + /// <param name="sessionFactoryName">The mnemonic name.</param> + /// <returns>The fluent configuration itself.</returns> + /// <remarks> + /// The SessionFactory mnemonic name can be used as a surrogate key in a multi-DB application. + /// </remarks> + IFluentSessionFactoryConfiguration Named(string sessionFactoryName); + + /// <summary> + /// DataBase integration configuration. + /// </summary> + IDbIntegrationConfiguration Integrate { get; } + + /// <summary> + /// Cache configuration. + /// </summary> + ICacheConfiguration Caching { get; } + + IFluentSessionFactoryConfiguration GenerateStatistics(); + IFluentSessionFactoryConfiguration Using(EntityMode entityMode); + IFluentSessionFactoryConfiguration ParsingHqlThrough<TQueryTranslator>() where TQueryTranslator : IQueryTranslatorFactory; + + IProxyConfiguration Proxy { get; } + + ICollectionFactoryConfiguration GeneratingCollections { get; } + + IMappingsConfiguration Mapping { get; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IMappingsConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IMappingsConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IMappingsConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,8 @@ +namespace NHibernate.Cfg.Loquacious +{ + public interface IMappingsConfiguration + { + IMappingsConfiguration UsingDefaultSchema(string defaultSchemaName); + IMappingsConfiguration UsingDefaultCatalog(string defaultCatalogName); + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IProxyConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IProxyConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IProxyConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,9 @@ +using NHibernate.Bytecode; +namespace NHibernate.Cfg.Loquacious +{ + public interface IProxyConfiguration + { + IProxyConfiguration DisableValidation(); + IFluentSessionFactoryConfiguration Trough<TProxyFactoryFactory>() where TProxyFactoryFactory : IProxyFactoryFactory; + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IQueryCacheConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IQueryCacheConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/IQueryCacheConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,9 @@ +using NHibernate.Cache; + +namespace NHibernate.Cfg.Loquacious +{ + public interface IQueryCacheConfiguration + { + ICacheConfiguration Trough<TFactory>() where TFactory : IQueryCache; + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ITransactionConfiguration.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ITransactionConfiguration.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Cfg/Loquacious/ITransactionConfiguration.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,8 @@ +using NHibernate.Transaction; +namespace NHibernate.Cfg.Loquacious +{ + public interface ITransactionConfiguration + { + IDbIntegrationConfiguration Trough<TFactory>() where TFactory : ITransactionFactory; + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-06-24 20:48:32 UTC (rev 4527) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-06-25 03:50:31 UTC (rev 4528) @@ -459,6 +459,18 @@ <Compile Include="Bytecode\ProxyFactoryFactoryNotConfiguredException.cs" /> <Compile Include="Bytecode\UnableToLoadProxyFactoryFactoryException.cs" /> <Compile Include="Cache\FakeCache.cs" /> + <Compile Include="Cfg\Loquacious\IBatcherConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\ICacheConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\ICollectionFactoryConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\ICommandsConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IConnectionConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IDbIntegrationConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IDbSchemaIntegrationConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IFluentSessionFactoryConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IMappingsConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IProxyConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\IQueryCacheConfiguration.cs" /> + <Compile Include="Cfg\Loquacious\ITransactionConfiguration.cs" /> <Compile Include="Cfg\SessionFactoryConfigurationBase.cs" /> <Compile Include="Cfg\ISessionFactoryConfiguration.cs" /> <Compile Include="Cfg\MappingSchema\AbstractDecoratable.cs" /> Added: trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/CfgTest/Loquacious/ConfigurationFixture.cs 2009-06-25 03:50:31 UTC (rev 4528) @@ -0,0 +1,74 @@ +using System.Data; +using NHibernate.AdoNet; +using NHibernate.ByteCode.LinFu; +using NHibernate.Cache; +using NHibernate.Cfg.Loquacious; +using NHibernate.Dialect; +using NHibernate.Driver; +using NHibernate.Exceptions; +using NHibernate.Hql.Classic; +using NHibernate.Type; + +namespace NHibernate.Test.CfgTest.Loquacious +{ + public class ConfigurationFixture + { + public void ProofOfConcept() + { + // Here I'm configuring near all properties outside the scope of Configuration class + // Using the Configuration class the user can add mappings and configure listeners + IFluentSessionFactoryConfiguration sfc= null; + sfc.Named("SomeName") + .Integrate + .Using<MsSql2000Dialect>() + .AutoQuoteKeywords() + .BatchingQueries + .Trough<SqlClientBatchingBatcherFactory>() + .Each(10) + .Connected + .Trough<DebugConnectionProvider>() + .Through<SqlClientDriver>() + .Releasing(ConnectionReleaseMode.AfterTransaction) + .With(IsolationLevel.ReadCommitted) + .Using("The connection string but it has some overload") + .CreateCommands + .AutoCommentingSql() + .ConvertingExpetionsTrough<SQLStateConverter>() + .Preparing() + .WithTimeout(10) + .WithMaximumDepthOfOuterJoinFetching(10) + .WithHqlToSqlSubstitutions("true 1, false 0, yes 'Y', no 'N'") + .Schema + .Validating() + ; + sfc.Caching + .Trough<HashtableCacheProvider>() + .PrefixingRegionsWith("xyz") + .Queries + .Trough<StandardQueryCache>() + .UsingMinimalPuts() + .WithDefaultExpiration(15) + .GeneratingCollections + .Trough<DefaultCollectionTypeFactory>() + .Proxy + .DisableValidation() + .Trough<ProxyFactoryFactory>() + .ParsingHqlThrough<ClassicQueryTranslatorFactory>() + .Mapping + .UsingDefaultCatalog("MyCatalog") + .UsingDefaultSchema("MySche") + ; + } + + public void ProofOfConceptMinimalConfiguration() + { + // This is a possible minimal configuration + // in this case we must define best default properties for each dialect + // The place where put default properties values is the Dialect itself. + IFluentSessionFactoryConfiguration sfc = null; + sfc + .Proxy.Trough<ProxyFactoryFactory>() + .Integrate.Using<MsSql2005Dialect>(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-24 20:48:32 UTC (rev 4527) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-06-25 03:50:31 UTC (rev 4528) @@ -107,6 +107,7 @@ <Compile Include="CfgTest\HbmBinderFixture.cs" /> <Compile Include="CfgTest\HbmOrderingFixture.cs" /> <Compile Include="CfgTest\LocatedInTestAssembly.cs" /> + <Compile Include="CfgTest\Loquacious\ConfigurationFixture.cs" /> <Compile Include="CfgTest\MappingDocumentAggregatorTests.cs" /> <Compile Include="CfgTest\MappingDocumentParserTests.cs" /> <Compile Include="CfgTest\SettingsFactoryFixture.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |