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); }
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; }