From 027e7b0301375036ad69242f22f893b0c3a0fc3d Mon Sep 17 00:00:00 2001 From: Sebastien Ros Date: Thu, 12 Jul 2012 11:18:27 -0700 Subject: [PATCH] Enabling EntityCache and QueryCache --HG-- branch : NH3 --- .../NHibernate.Caches.SysCache2.dll | Bin 0 -> 36864 bytes src/Orchard.Tests/DataUtility.cs | 2 +- src/Orchard.Web/Web.config | 5 ++ .../ContentManagement/DefaultContentQuery.cs | 2 +- .../Data/Conventions/CacheConvention.cs | 25 +++++++ .../Generator/SchemaCommandGenerator.cs | 2 +- .../Providers/AbstractDataServicesProvider.cs | 70 +++++++++++++++--- src/Orchard/Orchard.Framework.csproj | 4 + 8 files changed, 98 insertions(+), 12 deletions(-) create mode 100644 lib/nhibernate/NHibernate.Caches.SysCache2.dll create mode 100644 src/Orchard/Data/Conventions/CacheConvention.cs diff --git a/lib/nhibernate/NHibernate.Caches.SysCache2.dll b/lib/nhibernate/NHibernate.Caches.SysCache2.dll new file mode 100644 index 0000000000000000000000000000000000000000..d2a268f3aa1039cf0f4b1568605a01a4235be180 GIT binary patch literal 36864 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 XK+yw54-`F6^gz)AMGyS%_rU)IS;XXX literal 0 HcmV?d00001 diff --git a/src/Orchard.Tests/DataUtility.cs b/src/Orchard.Tests/DataUtility.cs index df06078d5..6b61a46b2 100644 --- a/src/Orchard.Tests/DataUtility.cs +++ b/src/Orchard.Tests/DataUtility.cs @@ -21,7 +21,7 @@ namespace Orchard.Tests { //var persistenceModel = AutoMap.Source(new Types(types)) // .Alterations(alt => AddAlterations(alt, types)) // .Conventions.AddFromAssemblyOf(); - var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name, Type = t })); + var persistenceModel = AbstractDataServicesProvider.CreatePersistenceModel(types.Select(t => new RecordBlueprint { TableName = "Test_" + t.Name, Type = t }).ToList()); var persistenceConfigurer = new SqlCeDataServicesProvider(fileName).GetPersistenceConfigurer(true/*createDatabase*/); ((MsSqlCeConfiguration)persistenceConfigurer).ShowSql(); diff --git a/src/Orchard.Web/Web.config b/src/Orchard.Web/Web.config index 1b9750a89..a5e37cfad 100644 --- a/src/Orchard.Web/Web.config +++ b/src/Orchard.Web/Web.config @@ -158,6 +158,11 @@ + + + + + diff --git a/src/Orchard/ContentManagement/DefaultContentQuery.cs b/src/Orchard/ContentManagement/DefaultContentQuery.cs index dac4f4fe7..176cbef43 100644 --- a/src/Orchard/ContentManagement/DefaultContentQuery.cs +++ b/src/Orchard/ContentManagement/DefaultContentQuery.cs @@ -76,7 +76,7 @@ namespace Orchard.ContentManagement { IQueryOver BindItemVersionQueryOver() { if (_itemVersionQueryOver == null) { _itemVersionQueryOver = BindSession().QueryOver(); - //_itemVersionQueryOver.Cacheable(); + _itemVersionQueryOver.Cacheable(); } return _itemVersionQueryOver; } diff --git a/src/Orchard/Data/Conventions/CacheConvention.cs b/src/Orchard/Data/Conventions/CacheConvention.cs new file mode 100644 index 000000000..5c995aa13 --- /dev/null +++ b/src/Orchard/Data/Conventions/CacheConvention.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Linq; +using FluentNHibernate.Conventions; +using FluentNHibernate.Conventions.AcceptanceCriteria; +using FluentNHibernate.Conventions.Inspections; +using FluentNHibernate.Conventions.Instances; +using Orchard.Environment.ShellBuilders.Models; + +namespace Orchard.Data.Conventions { + public class CacheConvention : IClassConvention, IConventionAcceptance { + private readonly IEnumerable _descriptors; + + public CacheConvention(IEnumerable descriptors) { + _descriptors = descriptors; + } + + public void Apply(IClassInstance instance) { + instance.Cache.ReadWrite(); + } + + public void Accept(IAcceptanceCriteria criteria) { + criteria.Expect(x => _descriptors.Any(d => d.Type.Name == x.EntityType.Name)); + } + } +} \ No newline at end of file diff --git a/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs b/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs index a80635d3d..3d7e15179 100644 --- a/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs +++ b/src/Orchard/Data/Migration/Generator/SchemaCommandGenerator.cs @@ -59,7 +59,7 @@ namespace Orchard.Data.Migration.Generator { //var features = dependencies.Select(name => new ShellFeature {Name = name}).Union(new[] {new ShellFeature {Name = feature}, new ShellFeature {Name = "Orchard.Framework"}}); var parameters = _sessionFactoryHolder.GetSessionFactoryParameters(); - parameters.RecordDescriptors = shellBlueprint.Records; + parameters.RecordDescriptors = shellBlueprint.Records.ToList(); var configuration = _dataServicesProviderFactory .CreateProvider(parameters) diff --git a/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs b/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs index 053eb5b9d..c54bba2e3 100644 --- a/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs +++ b/src/Orchard/Data/Providers/AbstractDataServicesProvider.cs @@ -8,8 +8,12 @@ using FluentNHibernate.Cfg; using FluentNHibernate.Cfg.Db; using FluentNHibernate.Conventions.Helpers; using FluentNHibernate.Diagnostics; -using NHibernate.Cache; +using NHibernate; using NHibernate.Cfg; +using NHibernate.Engine; +using NHibernate.Event; +using NHibernate.Event.Default; +using NHibernate.Persister.Entity; using Orchard.ContentManagement.Records; using Orchard.Data.Conventions; using Orchard.Environment.ShellBuilders.Models; @@ -21,28 +25,32 @@ namespace Orchard.Data.Providers { public Configuration BuildConfiguration(SessionFactoryParameters parameters) { var database = GetPersistenceConfigurer(parameters.CreateDatabase); - var persistenceModel = CreatePersistenceModel(parameters.RecordDescriptors); + var persistenceModel = CreatePersistenceModel(parameters.RecordDescriptors.ToList()); return Fluently.Configure() .Database(database) .Mappings(m => m.AutoMappings.Add(persistenceModel)) + .ExposeConfiguration(cfg => cfg.EventListeners.LoadEventListeners = new ILoadEventListener[] { new OrchardLoadEventListener() }) .BuildConfiguration() - //.Cache(c => { - // c.UseQueryCache = true; - // c.Provider(); - // }) - //.EntityCache(x => x.Strategy = EntityCacheUsage.ReadWrite) - //.EntityCache(x => x.Strategy = EntityCacheUsage.ReadWrite) + .Cache(c => { + c.Provider(); + c.UseQueryCache = true; + }) ; } - public static AutoPersistenceModel CreatePersistenceModel(IEnumerable recordDescriptors) { + public static AutoPersistenceModel CreatePersistenceModel(ICollection recordDescriptors) { + if(recordDescriptors == null) { + throw new ArgumentNullException("recordDescriptors"); + } + return AutoMap.Source(new TypeSource(recordDescriptors)) // Ensure that namespaces of types are never auto-imported, so that // identical type names from different namespaces can be mapped without ambiguity .Conventions.Setup(x => x.Add(AutoImport.Never())) .Conventions.Add(new RecordTableNameConvention(recordDescriptors)) + .Conventions.Add(new CacheConvention(recordDescriptors)) .Alterations(alt => { foreach (var recordAssembly in recordDescriptors.Select(x => x.Type.Assembly).Distinct()) { alt.Add(new AutoMappingOverrideAlteration(recordAssembly)); @@ -68,5 +76,49 @@ namespace Orchard.Data.Providers { throw new NotImplementedException(); } } + + class OrchardLoadEventListener : DefaultLoadEventListener, ILoadEventListener { + + public new void OnLoad(LoadEvent @event, LoadType loadType) { + var source = (ISessionImplementor)@event.Session; + IEntityPersister entityPersister; + if (@event.InstanceToLoad != null) { + entityPersister = source.GetEntityPersister(null, @event.InstanceToLoad); + @event.EntityClassName = @event.InstanceToLoad.GetType().FullName; + } + else + entityPersister = source.Factory.GetEntityPersister(@event.EntityClassName); + if (entityPersister == null) + throw new HibernateException("Unable to locate persister: " + @event.EntityClassName); + + //a hack to handle unused ContentPartRecord proxies on ContentItemRecord or ContentItemVersionRecord. + //I don't know why it actually works, or how to do it right + + //if (!entityPersister.IdentifierType.IsComponentType) + //{ + // Type returnedClass = entityPersister.IdentifierType.ReturnedClass; + // if (returnedClass != null && !returnedClass.IsInstanceOfType(@event.EntityId)) + // throw new TypeMismatchException(string.Concat(new object[4] + // { + // (object) "Provided id of the wrong type. Expected: ", + // (object) returnedClass, + // (object) ", got ", + // (object) @event.EntityId.GetType() + // })); + //} + + var keyToLoad = new EntityKey(@event.EntityId, entityPersister, source.EntityMode); + + if (loadType.IsNakedEntityReturned) { + @event.Result = Load(@event, entityPersister, keyToLoad, loadType); + } + else if (@event.LockMode == LockMode.None) { + @event.Result = ProxyOrLoad(@event, entityPersister, keyToLoad, loadType); + } + else { + @event.Result = LockAndLoad(@event, entityPersister, keyToLoad, loadType, source); + } + } + } } } \ No newline at end of file diff --git a/src/Orchard/Orchard.Framework.csproj b/src/Orchard/Orchard.Framework.csproj index 696daf594..fc4d50db1 100644 --- a/src/Orchard/Orchard.Framework.csproj +++ b/src/Orchard/Orchard.Framework.csproj @@ -93,6 +93,9 @@ False ..\..\lib\nhibernate\NHibernate.dll + + ..\..\lib\nhibernate\NHibernate.Caches.SysCache2.dll + 3.5 @@ -161,6 +164,7 @@ +