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();
        }
Example #3
0
        /// <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);
            }
        }
Example #8
0
        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));
        }
Example #11
0
 public static void SetBytecodeProvider(IBytecodeProvider bytecodeProvider) {
     NHibernate.Cfg.Environment.BytecodeProvider = bytecodeProvider;
 }