Skip to content

Commit

Permalink
HSEARCH-4615 Add multi-tenancy config property
Browse files Browse the repository at this point in the history
  • Loading branch information
marko-bekhta authored and yrodiere committed Dec 22, 2022
1 parent d4b2405 commit 66f1b3d
Show file tree
Hide file tree
Showing 7 changed files with 31 additions and 35 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ public void configure(StandalonePojoMappingConfigurationContext context) {
context.addEntityTypes( Book.class, Associate.class, Manager.class );// <1>

context.defaultReindexOnUpdate( ReindexOnUpdate.SHALLOW ); // <2>
context.multiTenancyEnabled( true );
}
}
// end::configurer[]
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ public void setup() {
.property(
"hibernate.search.backend.hosts", // <3>
"elasticsearch.mycompany.com"
)
).property( "hibernate.search.mapping.multi_tenancy.enabled", true )
// end::setup[]
.properties( TestConfiguration.standalonePojoMapperProperties(
configurationProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public void setup() {
// tag::setup[]
CloseableSearchMapping searchMapping = SearchMapping.builder() // <1>
.addEntityType( Book.class )
.multiTenancyEnabled( true ) // <2>
.property( "hibernate.search.mapping.multi_tenancy.enabled", true ) // <2>
// end::setup[]
.properties( TestConfiguration.standalonePojoMapperProperties( configurationProvider,
BackendConfigurations.simple() ) )
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
*/
package org.hibernate.search.mapper.pojo.standalone.cfg;

import org.hibernate.search.mapper.pojo.standalone.mapping.SearchMapping;
import org.hibernate.search.mapper.pojo.standalone.mapping.StandalonePojoMappingConfigurer;
import org.hibernate.search.mapper.pojo.standalone.schema.management.SchemaManagementStrategyName;
import org.hibernate.search.util.common.annotation.Incubating;
Expand Down Expand Up @@ -42,6 +43,17 @@ private StandalonePojoMapperSettings() {
*/
public static final String MAPPING_CONFIGURER = PREFIX + Radicals.MAPPING_CONFIGURER;

/**
* Enables or disables multi-tenancy.
* <p>
* If multi-tenancy is enabled, every {@link SearchMapping#createSession() session} will need to be assigned a tenant identifier.
* <p>
* Expects a boolean value.
* <p>
* Defaults to {@link Defaults#MULTI_TENANCY_ENABLED}.
*/
public static final String MULTI_TENANCY_ENABLED = PREFIX + Radicals.MULTI_TENANCY_ENABLED;


public static class Radicals {

Expand All @@ -50,6 +62,7 @@ private Radicals() {

public static final String SCHEMA_MANAGEMENT_STRATEGY = "schema_management.strategy";
public static final String MAPPING_CONFIGURER = "mapping.configurer";
public static final String MULTI_TENANCY_ENABLED = "mapping.multi_tenancy.enabled";
}

/**
Expand All @@ -61,6 +74,7 @@ private Defaults() {
}

public static final SchemaManagementStrategyName SCHEMA_MANAGEMENT_STRATEGY = SchemaManagementStrategyName.CREATE_OR_VALIDATE;
public static final Boolean MULTI_TENANCY_ENABLED = Boolean.FALSE;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,9 @@
import org.hibernate.search.engine.mapper.mapping.building.spi.MappingBuildContext;
import org.hibernate.search.engine.mapper.mapping.building.spi.MappingConfigurationCollector;
import org.hibernate.search.engine.tenancy.spi.TenancyMode;
import org.hibernate.search.mapper.pojo.mapping.building.spi.PojoMapperDelegate;
import org.hibernate.search.mapper.pojo.mapping.building.spi.PojoTypeMetadataContributor;
import org.hibernate.search.mapper.pojo.mapping.spi.AbstractPojoMappingInitiator;
import org.hibernate.search.mapper.pojo.standalone.cfg.StandalonePojoMapperSettings;
import org.hibernate.search.mapper.pojo.standalone.mapping.StandalonePojoMappingConfigurationContext;
import org.hibernate.search.mapper.pojo.standalone.mapping.StandalonePojoMappingConfigurer;
Expand All @@ -25,9 +28,6 @@
import org.hibernate.search.mapper.pojo.standalone.model.impl.StandalonePojoBootstrapIntrospector;
import org.hibernate.search.mapper.pojo.standalone.schema.management.SchemaManagementStrategyName;
import org.hibernate.search.mapper.pojo.standalone.schema.management.impl.SchemaManagementListener;
import org.hibernate.search.mapper.pojo.mapping.building.spi.PojoMapperDelegate;
import org.hibernate.search.mapper.pojo.mapping.building.spi.PojoTypeMetadataContributor;
import org.hibernate.search.mapper.pojo.mapping.spi.AbstractPojoMappingInitiator;

public class StandalonePojoMappingInitiator extends AbstractPojoMappingInitiator<StandalonePojoMappingPartialBuildState>
implements StandalonePojoMappingConfigurationContext {
Expand All @@ -44,6 +44,12 @@ public class StandalonePojoMappingInitiator extends AbstractPojoMappingInitiator
.multivalued()
.build();

private static final ConfigurationProperty<Boolean> MULTI_TENANCY_ENABLED =
ConfigurationProperty.forKey( StandalonePojoMapperSettings.Radicals.MULTI_TENANCY_ENABLED )
.asBoolean()
.withDefault( StandalonePojoMapperSettings.Defaults.MULTI_TENANCY_ENABLED )
.build();

private final StandalonePojoEntityTypeMetadataProvider.Builder entityTypeMetadataProviderBuilder;

private StandalonePojoEntityTypeMetadataProvider entityTypeMetadataProvider;
Expand All @@ -54,7 +60,8 @@ public StandalonePojoMappingInitiator(StandalonePojoBootstrapIntrospector intros
entityTypeMetadataProviderBuilder = new StandalonePojoEntityTypeMetadataProvider.Builder( introspector );
}

public <E> StandalonePojoMappingInitiator addEntityType(Class<E> clazz, String entityName, EntityConfigurer<E> configurerOrNull) {
public <E> StandalonePojoMappingInitiator addEntityType(Class<E> clazz, String entityName,
EntityConfigurer<E> configurerOrNull) {
entityTypeMetadataProviderBuilder.addEntityType( clazz, entityName, configurerOrNull );

return this;
Expand All @@ -63,6 +70,10 @@ public <E> StandalonePojoMappingInitiator addEntityType(Class<E> clazz, String e
@Override
public void configure(MappingBuildContext buildContext,
MappingConfigurationCollector<PojoTypeMetadataContributor> configurationCollector) {
this.tenancyMode(
MULTI_TENANCY_ENABLED.get( buildContext.configurationPropertySource() ) ?
TenancyMode.MULTI_TENANCY : TenancyMode.SINGLE_TENANCY
);
// Apply the user-provided mapping configurer if necessary.
// Has to happen before building entityTypeMetadataProvider as configurers can add more entities.
MAPPING_CONFIGURER.getAndMap( buildContext.configurationPropertySource(), buildContext.beanResolver()::resolve )
Expand All @@ -89,9 +100,4 @@ public void configure(MappingBuildContext buildContext,
protected PojoMapperDelegate<StandalonePojoMappingPartialBuildState> createMapperDelegate() {
return new StandalonePojoMapperDelegate( entityTypeMetadataProvider, schemaManagementListener );
}

@Override
public void multiTenancyEnabled(boolean multiTenancyEnabled) {
this.tenancyMode( multiTenancyEnabled ? TenancyMode.MULTI_TENANCY : TenancyMode.SINGLE_TENANCY );
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
import org.hibernate.search.engine.common.spi.SearchIntegrationPartialBuildState;
import org.hibernate.search.engine.environment.bean.BeanReference;
import org.hibernate.search.engine.environment.bean.spi.BeanProvider;
import org.hibernate.search.engine.tenancy.spi.TenancyMode;
import org.hibernate.search.mapper.pojo.route.DocumentRoutesDescriptor;
import org.hibernate.search.mapper.pojo.standalone.cfg.spi.StandalonePojoMapperSpiSettings;
import org.hibernate.search.mapper.pojo.standalone.impl.StandalonePojoMappingInitiator;
Expand Down Expand Up @@ -172,19 +171,6 @@ public <E> SearchMappingBuilder addEntityType(Class<E> type, String entityName,
return this;
}

/**
* Enables or disables multi-tenancy.
* <p>
* If multi-tenancy is enabled, every {@link SearchMapping#createSession() session} will need to be assigned a tenant identifier.
*
* @param multiTenancyEnabled {@code true} to enable multi-tenancy, {@code false} to disable it (the default).
* @return {@code this}, for call chaining.
*/
public SearchMappingBuilder multiTenancyEnabled(boolean multiTenancyEnabled) {
mappingInitiator.tenancyMode( multiTenancyEnabled ? TenancyMode.MULTI_TENANCY : TenancyMode.SINGLE_TENANCY );
return this;
}

/**
* Defines the default depth of automatic reindexing.
* <p>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -119,15 +119,6 @@ default <E> StandalonePojoMappingConfigurationContext addEntityType(Class<E> typ
*/
<E> StandalonePojoMappingConfigurationContext addEntityType(Class<E> type, String entityName, EntityConfigurer<E> configurer);

/**
* Enables or disables multi-tenancy.
* <p>
* If multi-tenancy is enabled, every {@link SearchMapping#createSession() session} will need to be assigned a tenant identifier.
*
* @param multiTenancyEnabled {@code true} to enable multi-tenancy, {@code false} to disable it (the default).
*/
void multiTenancyEnabled(boolean multiTenancyEnabled);

/**
* Defines the default depth of automatic reindexing.
* <p>
Expand Down

0 comments on commit 66f1b3d

Please sign in to comment.