public LuceneIndexingParameters(Properties sourceProps) { Properties indexingParameters = new MaskedProperty( sourceProps, PROP_GROUP ); indexParameters = new ParameterSet( indexingParameters ); }
public LuceneIndexingParameters(Properties sourceProps) { Properties indexingParameters = new MaskedProperty( sourceProps, PROP_GROUP ); indexParameters = new ParameterSet( indexingParameters ); }
IndexManager getOrCreateIndexManager(String shardName, Properties indexProperties, IndexedTypeIdentifier entityType, WorkerBuildContext context) { String indexName = indexNameBase; if ( shardName != null ) { indexName += INDEX_SHARD_ID_SEPARATOR + shardName; } IndexManager indexManager = indexManagersRegistry.get( indexName ); if ( indexManager != null ) { indexManager.addContainedEntity( entityType ); return indexManager; } synchronized (this) { indexManager = indexManagersRegistry.get( indexName ); if ( indexManager != null ) { indexManager.addContainedEntity( entityType ); return indexManager; } if ( shardName != null ) { indexProperties = new MaskedProperty( indexProperties, shardName, indexProperties ); } indexManager = doCreateIndexManager( indexName, entityType, indexProperties, context ); } return indexManager; }
IndexManager getOrCreateIndexManager(String shardName, Properties indexProperties, IndexedTypeIdentifier entityType, WorkerBuildContext context) { String indexName = indexNameBase; if ( shardName != null ) { indexName += INDEX_SHARD_ID_SEPARATOR + shardName; } IndexManager indexManager = indexManagersRegistry.get( indexName ); if ( indexManager != null ) { indexManager.addContainedEntity( entityType ); return indexManager; } synchronized (this) { indexManager = indexManagersRegistry.get( indexName ); if ( indexManager != null ) { indexManager.addContainedEntity( entityType ); return indexManager; } if ( shardName != null ) { indexProperties = new MaskedProperty( indexProperties, shardName, indexProperties ); } indexManager = doCreateIndexManager( indexName, entityType, indexProperties, context ); } return indexManager; }
@Test public void testConfigurationParsingPrecedence() { Properties cfg = new Properties(); cfg.put( "hibernate.search.Animals.transaction.indexwriter.max_merge_docs", "1" ); cfg.put( "hibernate.search.Animals.2.transaction.indexwriter.max_merge_docs", "2" ); cfg.put( "hibernate.search.Animals.2.transaction.max_merge_docs", "3" ); cfg.put( "hibernate.search.Animals.transaction.max_merge_docs", "5" ); cfg.put( "hibernate.search.default.transaction.max_merge_docs", "6" ); cfg.put( "hibernate.search.default.transaction.indexwriter.max_field_length", "7" ); cfg.put( "hibernate.notsearch.tests.default", "7" ); //this is more a "concept demo" than a test: Properties root = new MaskedProperty( cfg, "hibernate.search" ); //only keys starting as "hibernate.search.default" are exposed: Properties common = new MaskedProperty( root, "default" ); //now as "hibernate.search.Animals" or "hibernate.search.default" if first fails: Properties dirProvider = new MaskedProperty( root, "Animals", common ); //this narrows visibility to "hibernate.search.<providername|default>.transaction": Properties transaction = new MaskedProperty( dirProvider, "transaction" ); Properties shard2 = new MaskedProperty( dirProvider, "2", dirProvider ); Properties transactionInShard2 = new MaskedProperty( shard2, "transaction", transaction ); Properties newStyleTransaction = new MaskedProperty( transaction, "indexwriter", transaction ); Properties newStyleTransactionInShard2 = new MaskedProperty( transactionInShard2, "indexwriter", transactionInShard2 ); assertEquals( "7", newStyleTransaction.getProperty( "max_field_length" ) ); assertEquals( "7", newStyleTransactionInShard2.getProperty( "max_field_length" ) ); assertEquals( "5", transaction.getProperty( "max_merge_docs" ) ); }
private static void assertLegacyOptionsNotUsed(Properties props, String indexName) { MaskedProperty jgroupsCfg = new MaskedProperty( props, "worker.backend.jgroups" ); if ( jgroupsCfg.containsKey( "configurationFile" ) || jgroupsCfg.containsKey( "configurationXml" ) || jgroupsCfg.containsKey( "configurationString" ) || jgroupsCfg.containsKey( "clusterName" ) ) { throw log.legacyJGroupsConfigurationDefined( indexName ); } }
public static DirectoryBasedReaderProvider createDirectoryBasedReaderProvider(DirectoryBasedIndexManager indexManager, Properties properties, WorkerBuildContext buildContext) { Properties maskedProperties = new MaskedProperty( properties, Environment.READER_PREFIX ); String readerProviderImplName = maskedProperties.getProperty( "strategy" ); DirectoryBasedReaderProvider readerProvider; if ( StringHelper.isEmpty( readerProviderImplName ) ) { readerProvider = new SharingBufferReaderProvider(); } else if ( "not-shared".equalsIgnoreCase( readerProviderImplName ) ) { readerProvider = new NotSharedReaderProvider(); } else if ( "shared".equalsIgnoreCase( readerProviderImplName ) ) { readerProvider = new SharingBufferReaderProvider(); } else if ( "async".equalsIgnoreCase( readerProviderImplName ) ) { readerProvider = new PeriodicRefreshingReaderProvider(); } else { ServiceManager serviceManager = buildContext.getServiceManager(); readerProvider = ClassLoaderHelper.instanceFromName( DirectoryBasedReaderProvider.class, readerProviderImplName, "readerProvider", serviceManager ); } readerProvider.initialize( indexManager, maskedProperties ); return readerProvider; }
@Override public MutableEntityIndexBinding bind(IndexManagerGroupHolder holder, IndexedTypeIdentifier entityType, EntityIndexingInterceptor<?> interceptor, WorkerBuildContext buildContext) { Properties maskedProperties = new MaskedProperty( properties, IndexManagerHolder.SHARDING_STRATEGY ); ShardIdentifierProvider shardIdentifierProvider = createShardIdentifierProvider( buildContext, maskedProperties ); DynamicShardingIndexManagerSelector indexManagerSelector = new DynamicShardingIndexManagerSelector( shardIdentifierProvider, holder, properties, entityType ); /* * Ensure the backend is created even if there are no indexes yet: * this allows master/slave backends to set up message consumers * on the master node in case a slave initiates the creation * of an index, for instance. */ preInitializeBackend( holder, buildContext ); return new MutableEntityIndexBinding( holder, indexManagerSelector, shardIdentifierProvider, interceptor ); }
@Override public MutableEntityIndexBinding bind(IndexManagerGroupHolder holder, IndexedTypeIdentifier entityType, EntityIndexingInterceptor<?> interceptor, WorkerBuildContext buildContext) { Properties maskedProperties = new MaskedProperty( properties, IndexManagerHolder.SHARDING_STRATEGY ); ShardIdentifierProvider shardIdentifierProvider = createShardIdentifierProvider( buildContext, maskedProperties ); DynamicShardingIndexManagerSelector indexManagerSelector = new DynamicShardingIndexManagerSelector( shardIdentifierProvider, holder, properties, entityType ); /* * Ensure the backend is created even if there are no indexes yet: * this allows master/slave backends to set up message consumers * on the master node in case a slave initiates the creation * of an index, for instance. */ preInitializeBackend( holder, buildContext ); return new MutableEntityIndexBinding( holder, indexManagerSelector, shardIdentifierProvider, interceptor ); }
public static DirectoryBasedReaderProvider createDirectoryBasedReaderProvider(DirectoryBasedIndexManager indexManager, Properties properties, WorkerBuildContext buildContext) { Properties maskedProperties = new MaskedProperty( properties, Environment.READER_PREFIX ); String readerProviderImplName = maskedProperties.getProperty( "strategy" ); DirectoryBasedReaderProvider readerProvider; if ( StringHelper.isEmpty( readerProviderImplName ) ) { readerProvider = new SharingBufferReaderProvider(); } else if ( "not-shared".equalsIgnoreCase( readerProviderImplName ) ) { readerProvider = new NotSharedReaderProvider(); } else if ( "shared".equalsIgnoreCase( readerProviderImplName ) ) { readerProvider = new SharingBufferReaderProvider(); } else if ( "async".equalsIgnoreCase( readerProviderImplName ) ) { readerProvider = new PeriodicRefreshingReaderProvider(); } else { ServiceManager serviceManager = buildContext.getServiceManager(); readerProvider = ClassLoaderHelper.instanceFromName( DirectoryBasedReaderProvider.class, readerProviderImplName, "readerProvider", serviceManager ); } readerProvider.initialize( indexManager, maskedProperties ); return readerProvider; }
@Override public MutableEntityIndexBinding bind(IndexManagerGroupHolder holder, IndexedTypeIdentifier entityType, EntityIndexingInterceptor<?> interceptor, WorkerBuildContext buildContext) { IndexShardingStrategy shardingStrategy = ClassLoaderHelper.instanceFromClass( IndexShardingStrategy.class, shardingStrategyClass, "IndexShardingStrategy" ); IndexManager[] indexManagers = preInitializeIndexManagersAndBackends( holder, entityType, buildContext ); Properties maskedProperties = new MaskedProperty( properties[0], IndexManagerHolder.SHARDING_STRATEGY ); shardingStrategy.initialize( maskedProperties, indexManagers ); IndexShardingStrategyIndexManagerSelector selector = new IndexShardingStrategyIndexManagerSelector( shardingStrategy, indexManagers ); return new MutableEntityIndexBinding( holder, selector, null, interceptor ); }
@Test public void testListingKeys() { Properties defaultProp = new Properties(); defaultProp.put( "some.inherited.prop", "to test standard Properties fallback behaviour" ); Properties rootProp = new Properties( defaultProp ); rootProp.put( "some.long.dotted.prop1", "hello!" ); rootProp.put( "hidden.long.dotted.prop2", "hello again" ); Properties fallbackProp = new Properties(); fallbackProp.put( "default.long.dotted.prop3", "hello!" ); Properties masked = new MaskedProperty( rootProp, "some", fallbackProp ); assertTrue( masked.keySet().contains( "long.dotted.prop1" ) ); assertTrue( masked.keySet().contains( "default.long.dotted.prop3" ) ); assertTrue( masked.keySet().contains( "inherited.prop" ) ); assertFalse( masked.keySet().contains( "hidden.long.dotted.prop2" ) ); assertFalse( masked.keySet().contains( "long.dotted.prop2" ) ); Properties maskedAgain = new MaskedProperty( masked, "long.dotted", masked ); //falling back to same instance for ** assertTrue( maskedAgain.keySet().contains( "prop1" ) ); assertTrue( maskedAgain.keySet().contains( "long.dotted.prop1" ) ); //**: prop 1 should be visible in both ways assertTrue( maskedAgain.keySet().contains( "default.long.dotted.prop3" ) ); Properties maskingAll = new MaskedProperty( masked, "secured" ); assertTrue( maskingAll.keySet().isEmpty() ); assertTrue( maskingAll.isEmpty() ); }
@Override public MutableEntityIndexBinding bind(IndexManagerGroupHolder holder, IndexedTypeIdentifier entityType, EntityIndexingInterceptor<?> interceptor, WorkerBuildContext buildContext) { IndexShardingStrategy shardingStrategy = ClassLoaderHelper.instanceFromClass( IndexShardingStrategy.class, shardingStrategyClass, "IndexShardingStrategy" ); IndexManager[] indexManagers = preInitializeIndexManagersAndBackends( holder, entityType, buildContext ); Properties maskedProperties = new MaskedProperty( properties[0], IndexManagerHolder.SHARDING_STRATEGY ); shardingStrategy.initialize( maskedProperties, indexManagers ); IndexShardingStrategyIndexManagerSelector selector = new IndexShardingStrategyIndexManagerSelector( shardingStrategy, indexManagers ); return new MutableEntityIndexBinding( holder, selector, null, interceptor ); }
@Test public void testSerializability() throws IOException, ClassNotFoundException { Properties properties = new Properties(); properties.setProperty( "base.key", "value" ); MaskedProperty originalProps = new MaskedProperty( properties, "base" ); MaskedProperty theCopy = SerializationTestHelper.duplicateBySerialization( originalProps ); //this is also testing the logger (transient) has been restored: assertEquals( "value", theCopy.getProperty( "key" ) ); }
@Override protected void before() throws Throwable { SearchConfiguration configuration = new SearchConfigurationForTest(); // Includes default test properties Properties unkmaskedProperties = configuration.getProperties(); clientFactory.start( unkmaskedProperties, new BuildContextForTest( configuration ) ); Properties rootCfg = new MaskedProperty( unkmaskedProperties, "hibernate.search" ); // Use root as a fallback to support query options in particular Properties properties = new MaskedProperty( rootCfg, "default", rootCfg ); client = clientFactory.create( properties ); }
public static OptimizerStrategy getOptimizerStrategy(IndexManager callback, Properties indexProperties, WorkerBuildContext buildContext) { MaskedProperty maskedProperty = new MaskedProperty( indexProperties, "optimizer" ); String optimizerImplClassName = maskedProperty.getProperty( "implementation" ); if ( optimizerImplClassName != null && ( !"default".equalsIgnoreCase( optimizerImplClassName ) ) ) { ServiceManager serviceManager = buildContext.getServiceManager(); return ClassLoaderHelper.instanceFromName( OptimizerStrategy.class, optimizerImplClassName, "Optimizer Strategy", serviceManager ); } else { boolean incremental = maskedProperty.containsKey( "operation_limit.max" ) || maskedProperty.containsKey( "transaction_limit.max" ); OptimizerStrategy optimizerStrategy; if ( incremental ) { optimizerStrategy = new IncrementalOptimizerStrategy(); optimizerStrategy.initialize( callback, maskedProperty ); } else { optimizerStrategy = new ExplicitOnlyOptimizerStrategy(); } return optimizerStrategy; } }
public static OptimizerStrategy getOptimizerStrategy(IndexManager callback, Properties indexProperties, WorkerBuildContext buildContext) { MaskedProperty maskedProperty = new MaskedProperty( indexProperties, "optimizer" ); String optimizerImplClassName = maskedProperty.getProperty( "implementation" ); if ( optimizerImplClassName != null && ( !"default".equalsIgnoreCase( optimizerImplClassName ) ) ) { ServiceManager serviceManager = buildContext.getServiceManager(); return ClassLoaderHelper.instanceFromName( OptimizerStrategy.class, optimizerImplClassName, "Optimizer Strategy", serviceManager ); } else { boolean incremental = maskedProperty.containsKey( "operation_limit.max" ) || maskedProperty.containsKey( "transaction_limit.max" ); OptimizerStrategy optimizerStrategy; if ( incremental ) { optimizerStrategy = new IncrementalOptimizerStrategy(); optimizerStrategy.initialize( callback, maskedProperty ); } else { optimizerStrategy = new ExplicitOnlyOptimizerStrategy(); } return optimizerStrategy; } }
@Override public void initialize(Properties properties, WorkerBuildContext context) { this.properties = properties; serviceManager = context.getServiceManager(); /* * This service in particular must be started eagerly, because it sets up * the message consumers, allowing slaves to send messages to the master. * Note that slaves may create index managers before the master, * in particular when dynamic sharding is used. */ messageSender = serviceManager.requestService( MessageSenderService.class ); luceneWorkSerializer = serviceManager.requestService( LuceneWorkSerializer.class ); masterNodeSelector = serviceManager.requestService( NodeSelectorService.class ); sync = BackendFactory.isConfiguredAsSync( properties ); Properties jgroupsProperties = new MaskedProperty( properties, JGROUPS_CONFIGURATION_SPACE ); block = ConfigurationParseHelper.getBooleanValue( jgroupsProperties, BLOCK_WAITING_ACK, sync ); messageTimeout = ConfigurationParseHelper.getLongValue( jgroupsProperties, MESSAGE_TIMEOUT_MS, DEFAULT_MESSAGE_TIMEOUT ); delegateBackendName = ConfigurationParseHelper.getString( jgroupsProperties, DELEGATE_BACKEND, "local" ); }
private ElasticsearchClient createClient(SearchConfiguration configuration) { clientFactory.start( configuration.getProperties(), new BuildContextForTest( configuration ) ); Properties maskedProperties = new MaskedProperty( configuration.getProperties(), "hibernate.search.default" ); return clientFactory.create( maskedProperties ); }
@Override public void start(Properties unkmaskedProperties, BuildContext context) { Properties rootCfg = new MaskedProperty( unkmaskedProperties, "hibernate.search" ); Properties properties = new MaskedProperty( rootCfg, "default", rootCfg );