public static void InitializeGlobalProperties(IHibernateConfiguration config) { GlobalProperties.Clear(); if (config != null) { HibernateConfiguration = config; GlobalProperties[PropertyBytecodeProvider] = config.ByteCodeProviderType; GlobalProperties[PropertyUseReflectionOptimizer] = config.UseReflectionOptimizer.ToString(); if (config.SessionFactory != null) { foreach (var kvp in config.SessionFactory.Properties) { GlobalProperties[kvp.Key] = kvp.Value; } } } else { GlobalProperties[PropertyUseReflectionOptimizer] = bool.TrueString; } VerifyProperties(GlobalProperties); BytecodeProviderInstance = BuildBytecodeProvider(GlobalProperties); EnableReflectionOptimizer = PropertiesHelper.GetBoolean(PropertyUseReflectionOptimizer, GlobalProperties); if (EnableReflectionOptimizer) { log.Info("Using reflection optimizer"); } }
protected override void OnSetUp() { _backupByteCodeProvider = Environment.BytecodeProvider; if (!Environment.UseReflectionOptimizer) { Assert.Ignore("Test only works with reflection optimization enabled"); } using (ISession session = OpenSession()) using (ITransaction transaction = session.BeginTransaction()) { var e1 = new Entity { Name = "Name", Component = new Component { Value = "Value" } }; session.Save(e1); session.Flush(); transaction.Commit(); } // Change refelection optimizer and recreate the configuration and factory Environment.BytecodeProvider = new TestBytecodeProviderImpl(); Configure(); RebuildSessionFactory(); }
/// <summary> /// Retrieve the <see cref="IReflectionOptimizer" /> delegate for this provider /// capable of generating reflection optimization components. /// </summary> /// <param name="bytecodeProvider">The bytecode provider.</param> /// <param name="clazz">The class to be reflected upon.</param> /// <param name="getters">All property getters to be accessed via reflection.</param> /// <param name="setters">All property setters to be accessed via reflection.</param> /// <param name="specializedGetter">The specialized getter for the given type.</param> /// <param name="specializedSetter">The specialized setter for the given type.</param> /// <returns>The reflection optimization delegate.</returns> //6.0 TODO: Merge into IBytecodeProvider. public static IReflectionOptimizer GetReflectionOptimizer( this IBytecodeProvider bytecodeProvider, System.Type clazz, IGetter[] getters, ISetter[] setters, IGetter specializedGetter, ISetter specializedSetter) { if (bytecodeProvider is BytecodeProviderImpl bytecodeProviderImpl) { return(bytecodeProviderImpl.GetReflectionOptimizer(clazz, getters, setters, specializedGetter, specializedSetter)); } #pragma warning disable 618 return(bytecodeProvider.GetReflectionOptimizer(clazz, getters, setters)); #pragma warning restore 618 }
static Environment() { // Computing the version string is a bit expensive, so do it only if logging is enabled. if (log.IsInfoEnabled()) { log.Info("NHibernate {0}", Version); } GlobalProperties = new Dictionary <string, string>(); GlobalProperties[PropertyUseReflectionOptimizer] = bool.TrueString; LoadGlobalPropertiesFromAppConfig(); VerifyProperties(GlobalProperties); BytecodeProviderInstance = BuildBytecodeProvider(GlobalProperties); EnableReflectionOptimizer = PropertiesHelper.GetBoolean(PropertyUseReflectionOptimizer, GlobalProperties); if (EnableReflectionOptimizer) { log.Info("Using reflection optimizer"); } }
static Environment() { // Computing the version string is a bit expensive, so do it only if logging is enabled. if (log.IsInfoEnabled) { log.Info("NHibernate " + Version); } GlobalProperties = new Dictionary<string, string>(); GlobalProperties[PropertyUseReflectionOptimizer] = bool.TrueString; LoadGlobalPropertiesFromAppConfig(); VerifyProperties(GlobalProperties); BytecodeProviderInstance = BuildBytecodeProvider(GlobalProperties); EnableReflectionOptimizer = PropertiesHelper.GetBoolean(PropertyUseReflectionOptimizer, GlobalProperties); if (EnableReflectionOptimizer) { log.Info("Using reflection optimizer"); } }
public static void SetBytecodeProvider(IBytecodeProvider bytecodeProvider) { NHibernate.Cfg.Environment.BytecodeProvider = bytecodeProvider; }
public object ReadData(AMFReader reader) { int handle = reader.ReadAMF3IntegerData(); bool inline = ((handle & 1) != 0); handle = handle >> 1; if (!inline) { //An object reference return(reader.ReadAMF3ObjectReference(handle)); } else { ClassDefinition classDefinition = reader.ReadClassDefinition(handle); object instance = null; IReflectionOptimizer reflectionOptimizer = _optimizedReaders[classDefinition.ClassName] as IReflectionOptimizer; if (reflectionOptimizer == null) { lock (_optimizedReaders) { if (classDefinition.IsTypedObject) { if (!_optimizedReaders.Contains(classDefinition.ClassName)) { //Temporary reader _optimizedReaders[classDefinition.ClassName] = new AMF3TempObjectReader(); Type type = ObjectFactory.Locate(classDefinition.ClassName); if (type != null) { instance = ObjectFactory.CreateInstance(type); if (classDefinition.IsExternalizable) { reflectionOptimizer = new AMF3ExternalizableReader(); _optimizedReaders[classDefinition.ClassName] = reflectionOptimizer; instance = reflectionOptimizer.ReadData(reader, classDefinition); } else { reader.AddAMF3ObjectReference(instance); IBytecodeProvider bytecodeProvider = null; #if NET_1_1 //codedom only if (FluorineConfiguration.Instance.OptimizerSettings != null) { bytecodeProvider = new FluorineFx.IO.Bytecode.CodeDom.BytecodeProvider(); } #else if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "codedom") { bytecodeProvider = new FluorineFx.IO.Bytecode.CodeDom.BytecodeProvider(); } if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "il") { bytecodeProvider = new FluorineFx.IO.Bytecode.Lightweight.BytecodeProvider(); } #endif reflectionOptimizer = bytecodeProvider.GetReflectionOptimizer(type, classDefinition, reader, instance); //Fixup if (reflectionOptimizer != null) { _optimizedReaders[classDefinition.ClassName] = reflectionOptimizer; } else { _optimizedReaders[classDefinition.ClassName] = new AMF3TempObjectReader(); } } } else { reflectionOptimizer = new AMF3TypedASObjectReader(classDefinition.ClassName); _optimizedReaders[classDefinition.ClassName] = reflectionOptimizer; instance = reflectionOptimizer.ReadData(reader, classDefinition); } } else { reflectionOptimizer = _optimizedReaders[classDefinition.ClassName] as IReflectionOptimizer; instance = reflectionOptimizer.ReadData(reader, classDefinition); } } else { reflectionOptimizer = new AMF3TypedASObjectReader(classDefinition.ClassName); _optimizedReaders[classDefinition.ClassName] = reflectionOptimizer; instance = reflectionOptimizer.ReadData(reader, classDefinition); } } } else { instance = reflectionOptimizer.ReadData(reader, classDefinition); } return(instance); } }
public object ReadData(AMFReader reader) { object instance = null; string typeIdentifier = reader.ReadString(); #if LOGGING if (log.IsDebugEnabled) { string msg = string.Format("Attempt to read custom object {0}", typeIdentifier); log.Debug(msg); } #endif IReflectionOptimizer reflectionOptimizer = _optimizedReaders[typeIdentifier] as IReflectionOptimizer; if (reflectionOptimizer == null) { lock (_optimizedReaders) { if (!_optimizedReaders.Contains(typeIdentifier)) { #if LOGGING if (log.IsDebugEnabled) { string msg = string.Format("Generating optimizer for type {0}", typeIdentifier); log.Debug(msg); } #endif //Temporary reader _optimizedReaders[typeIdentifier] = new AMF0TempObjectReader(); Type type = ObjectFactory.Locate(typeIdentifier); if (type != null) { instance = ObjectFactory.CreateInstance(type); reader.AddReference(instance); if (type != null) { IBytecodeProvider bytecodeProvider = null; #if NET_1_1 //codedom only if (FluorineConfiguration.Instance.OptimizerSettings != null) { bytecodeProvider = new FluorineFx.IO.Bytecode.CodeDom.BytecodeProvider(); } #else if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "codedom") { bytecodeProvider = new FluorineFx.IO.Bytecode.CodeDom.BytecodeProvider(); } if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "il") { bytecodeProvider = new FluorineFx.IO.Bytecode.Lightweight.BytecodeProvider(); } #endif reflectionOptimizer = bytecodeProvider.GetReflectionOptimizer(type, null, reader, instance); //Fixup if (reflectionOptimizer != null) { _optimizedReaders[typeIdentifier] = reflectionOptimizer; } else { _optimizedReaders[typeIdentifier] = new AMF0TempObjectReader(); } } } else { #if LOGGING if (log.IsWarnEnabled) { log.Warn("Custom object " + typeIdentifier + " could not be loaded. An ActionScript typed object (ASObject) will be created"); } #endif reflectionOptimizer = new AMF0TypedASObjectReader(typeIdentifier); _optimizedReaders[typeIdentifier] = reflectionOptimizer; instance = reflectionOptimizer.ReadData(reader, null); } } else { reflectionOptimizer = _optimizedReaders[typeIdentifier] as IReflectionOptimizer; instance = reflectionOptimizer.ReadData(reader, null); } } } else { instance = reflectionOptimizer.ReadData(reader, null); } return(instance); }
public object ReadData(AMFReader reader) { object instance = null; string str2; string str = reader.ReadString(); if (log.get_IsDebugEnabled()) { str2 = string.Format("Attempt to read custom object {0}", str); log.Debug(str2); } IReflectionOptimizer optimizer = this._optimizedReaders[str] as IReflectionOptimizer; if (optimizer == null) { lock (this._optimizedReaders) { if (!this._optimizedReaders.Contains(str)) { if (log.get_IsDebugEnabled()) { str2 = string.Format("Generating optimizer for type {0}", str); log.Debug(str2); } this._optimizedReaders[str] = new AMF0TempObjectReader(); Type type = ObjectFactory.Locate(str); if (type != null) { instance = ObjectFactory.CreateInstance(type); reader.AddReference(instance); if (type != null) { IBytecodeProvider provider = null; if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "codedom") { provider = new BytecodeProvider(); } if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "il") { provider = new BytecodeProvider(); } optimizer = provider.GetReflectionOptimizer(type, null, reader, instance); if (optimizer != null) { this._optimizedReaders[str] = optimizer; return(instance); } this._optimizedReaders[str] = new AMF0TempObjectReader(); } return(instance); } if (log.get_IsWarnEnabled()) { log.Warn("Custom object " + str + " could not be loaded. An ActionScript typed object (ASObject) will be created"); } optimizer = new AMF0TypedASObjectReader(str); this._optimizedReaders[str] = optimizer; return(optimizer.ReadData(reader, null)); } optimizer = this._optimizedReaders[str] as IReflectionOptimizer; return(optimizer.ReadData(reader, null)); } return(instance); } return(optimizer.ReadData(reader, null)); }
public object ReadData(AMFReader reader) { int index = reader.ReadAMF3IntegerData(); bool flag = (index & 1) != 0; index = index >> 1; if (!flag) { return(reader.ReadAMF3ObjectReference(index)); } ClassDefinition classDefinition = reader.ReadClassDefinition(index); object instance = null; IReflectionOptimizer optimizer = this._optimizedReaders[classDefinition.ClassName] as IReflectionOptimizer; if (optimizer == null) { lock (this._optimizedReaders) { if (classDefinition.IsTypedObject) { if (!this._optimizedReaders.Contains(classDefinition.ClassName)) { this._optimizedReaders[classDefinition.ClassName] = new AMF3TempObjectReader(); Type type = ObjectFactory.Locate(classDefinition.ClassName); if (type != null) { instance = ObjectFactory.CreateInstance(type); if (classDefinition.IsExternalizable) { optimizer = new AMF3ExternalizableReader(); this._optimizedReaders[classDefinition.ClassName] = optimizer; instance = optimizer.ReadData(reader, classDefinition); } else { reader.AddAMF3ObjectReference(instance); IBytecodeProvider provider = null; if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "codedom") { provider = new BytecodeProvider(); } if (FluorineConfiguration.Instance.OptimizerSettings.Provider == "il") { provider = new BytecodeProvider(); } optimizer = provider.GetReflectionOptimizer(type, classDefinition, reader, instance); if (optimizer != null) { this._optimizedReaders[classDefinition.ClassName] = optimizer; } else { this._optimizedReaders[classDefinition.ClassName] = new AMF3TempObjectReader(); } } return(instance); } optimizer = new AMF3TypedASObjectReader(classDefinition.ClassName); this._optimizedReaders[classDefinition.ClassName] = optimizer; return(optimizer.ReadData(reader, classDefinition)); } optimizer = this._optimizedReaders[classDefinition.ClassName] as IReflectionOptimizer; return(optimizer.ReadData(reader, classDefinition)); } optimizer = new AMF3TypedASObjectReader(classDefinition.ClassName); this._optimizedReaders[classDefinition.ClassName] = optimizer; return(optimizer.ReadData(reader, classDefinition)); } } return(optimizer.ReadData(reader, classDefinition)); }