private IDirectoryProvider CreateDirectoryProvider(string directoryProviderName, IDictionary <string, string> indexProps, ISearchFactoryImplementor searchFactoryImplementor)
        {
            string className;

            indexProps.TryGetValue("directory_provider", out className);
            if (StringHelper.IsEmpty(className))
            {
                className = DEFAULT_DIRECTORY_PROVIDER;
            }

            IDirectoryProvider provider;

            try
            {
                System.Type directoryClass = ReflectHelper.ClassForName(className);
                provider = (IDirectoryProvider)Activator.CreateInstance(directoryClass);
            }
            catch (Exception e)
            {
                throw new HibernateException("Unable to instantiate directory provider: " + className, e);
            }

            try
            {
                provider.Initialize(directoryProviderName, indexProps, searchFactoryImplementor);
            }
            catch (Exception e)
            {
                throw new HibernateException("Unable to initialize: " + directoryProviderName, e);
            }

            int index = providers.IndexOf(provider);

            if (index != -1)
            {
                // Share the same Directory provider for the same underlying store
                return(providers[index]);
            }

            ConfigureOptimizerStrategy(searchFactoryImplementor, indexProps, provider);
            ConfigureIndexingParameters(searchFactoryImplementor, indexProps, provider);
            providers.Add(provider);
            if (!searchFactoryImplementor.GetLockableDirectoryProviders().ContainsKey(provider))
            {
                searchFactoryImplementor.GetLockableDirectoryProviders()[provider] = new object();
            }

            return(provider);
        }
Example #2
0
        public void Initialize(IDictionary <string, string> properties,
                               ISearchFactoryImplementor searchFactoryImplementor)
        {
            if (subReadersField == null)
            {
                // TODO: If we check for CacheableMultiReader we could avoid reflection here!
                // TODO: Need to account for Medium Trust - can't reflect on private members
                subReadersField = typeof(BaseCompositeReader <IndexReader>).GetField("subReaders",
                                                                                     BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.IgnoreCase);
            }

            HashSet <IDirectoryProvider> providers =
                new HashSet <IDirectoryProvider>(searchFactoryImplementor.GetLockableDirectoryProviders().Keys);

            perDirectoryProviderManipulationLocks = new Dictionary <IDirectoryProvider, object>();
            foreach (IDirectoryProvider dp in providers)
            {
                perDirectoryProviderManipulationLocks[dp] = new object();
            }
        }
        public void Initialize(IDictionary<string, string> properties,
            ISearchFactoryImplementor searchFactoryImplementor)
        {
            if (subReadersField == null)
            {
                // TODO: If we check for CacheableMultiReader we could avoid reflection here!
                // TODO: Need to account for Medium Trust - can't reflect on private members
                subReadersField = typeof(MultiReader).GetField("subReaders",
                                                               BindingFlags.NonPublic | BindingFlags.Instance |
                                                               BindingFlags.IgnoreCase);
            }

            HashedSet<IDirectoryProvider> providers =
                new HashedSet<IDirectoryProvider>(searchFactoryImplementor.GetLockableDirectoryProviders().Keys);
            perDirectoryProviderManipulationLocks = new Dictionary<IDirectoryProvider, object>();
            foreach (IDirectoryProvider dp in providers)
                perDirectoryProviderManipulationLocks[dp] = new object();
        }
        private IDirectoryProvider CreateDirectoryProvider(string directoryProviderName, IDictionary<string, string> indexProps, ISearchFactoryImplementor searchFactoryImplementor)
        {
            string className;
            indexProps.TryGetValue("directory_provider", out className);
            if (StringHelper.IsEmpty(className))
            {
                className = DEFAULT_DIRECTORY_PROVIDER;
            }

            IDirectoryProvider provider;
            try
            {
                System.Type directoryClass = ReflectHelper.ClassForName(className);
                provider = (IDirectoryProvider)Activator.CreateInstance(directoryClass);
            }
            catch (Exception e)
            {
                throw new HibernateException("Unable to instantiate directory provider: " + className, e);
            }

            try
            {
                provider.Initialize(directoryProviderName, indexProps, searchFactoryImplementor);
            }
            catch (Exception e)
            {
                throw new HibernateException("Unable to initialize: " + directoryProviderName, e);
            }

            int index = providers.IndexOf(provider);
            if (index != -1)
            {
                // Share the same Directory provider for the same underlying store
                return providers[index];
            }

            ConfigureOptimizerStrategy(searchFactoryImplementor, indexProps, provider);
            ConfigureIndexingParameters(searchFactoryImplementor, indexProps, provider);
            providers.Add(provider);
            if (!searchFactoryImplementor.GetLockableDirectoryProviders().ContainsKey(provider))
            {
                searchFactoryImplementor.GetLockableDirectoryProviders()[provider] = new object();
            }

            return provider;
        }