Skip to content

Commit

Permalink
HSEARCH-4034 Provide OrmSetupHelper.SetupContext#tenants option
Browse files Browse the repository at this point in the history
  • Loading branch information
fax4ever committed Oct 6, 2020
1 parent 3a97db7 commit b8c827e
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 23 deletions.
Expand Up @@ -13,10 +13,12 @@
import org.hibernate.SessionFactory;
import org.hibernate.search.mapper.orm.cfg.HibernateOrmMapperSettings;
import org.hibernate.search.mapper.orm.schema.management.SchemaManagementStrategyName;
import org.hibernate.search.util.common.impl.Closer;
import org.hibernate.search.util.impl.integrationtest.common.rule.BackendConfiguration;
import org.hibernate.search.util.impl.integrationtest.common.rule.BackendMock;
import org.hibernate.search.util.impl.integrationtest.common.rule.BackendSetupStrategy;
import org.hibernate.search.util.impl.integrationtest.common.rule.MappingSetupHelper;
import org.hibernate.search.util.impl.integrationtest.mapper.orm.multitenancy.impl.MultitenancyTestHelper;

public final class OrmSetupHelper
extends MappingSetupHelper<OrmSetupHelper.SetupContext, SimpleSessionFactoryBuilder, SessionFactory> {
Expand Down Expand Up @@ -57,6 +59,8 @@ public static OrmSetupHelper withMultipleBackends(BackendConfiguration defaultBa

private final SchemaManagementStrategyName schemaManagementStrategyName;

private MultitenancyTestHelper multitenancyTestHelper;

private OrmSetupHelper(BackendSetupStrategy backendSetupStrategy,
SchemaManagementStrategyName schemaManagementStrategyName) {
super( backendSetupStrategy );
Expand All @@ -70,7 +74,10 @@ protected SetupContext createSetupContext() {

@Override
protected void close(SessionFactory toClose) {
toClose.close();
try ( Closer<RuntimeException> closer = new Closer<>() ) {
closer.push( SessionFactory::close, toClose );
closer.push( MultitenancyTestHelper::close, multitenancyTestHelper );
}
}

public final class SetupContext
Expand All @@ -97,6 +104,14 @@ public SetupContext withProperty(String key, Object value) {
return thisAsC();
}

public SetupContext tenants(String ... tenants) {
multitenancyTestHelper = new MultitenancyTestHelper( tenants );
multitenancyTestHelper.forceConfigurationSettings( overriddenProperties );
withConfiguration( b -> b.onServiceRegistryBuilder( multitenancyTestHelper::enable ) );
withConfiguration( b -> b.onMetadata( multitenancyTestHelper::exportSchema ) );
return thisAsC();
}

public SessionFactory setup(Class<?> ... annotatedTypes) {
return withConfiguration( builder -> builder.addAnnotatedClasses( Arrays.asList( annotatedTypes ) ) )
.setup();
Expand Down
Expand Up @@ -10,7 +10,6 @@
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import org.hibernate.HibernateException;
import org.hibernate.MultiTenancyStrategy;
Expand Down Expand Up @@ -39,26 +38,16 @@
*/
public class MultitenancyTestHelper implements Closeable {

private final Set<String> tenantIds;
private final boolean multitenancyEnabled;
private final String[] tenantIds;
private final AbstractMultiTenantConnectionProvider multiTenantConnectionProvider;
private final Map<String,DriverManagerConnectionProviderImpl> tenantSpecificConnectionProviders = new HashMap<>();

public MultitenancyTestHelper(Set<String> tenantIds) {
public MultitenancyTestHelper(String[] tenantIds) {
this.tenantIds = tenantIds;
this.multitenancyEnabled = tenantIds != null && tenantIds.size() != 0;
if ( multitenancyEnabled ) {
multiTenantConnectionProvider = buildMultiTenantConnectionProvider();
}
else {
multiTenantConnectionProvider = null;
}
this.multiTenantConnectionProvider = buildMultiTenantConnectionProvider();
}

public void enableIfNeeded(StandardServiceRegistryBuilder registryBuilder) {
if ( !multitenancyEnabled ) {
return;
}
public void enable(StandardServiceRegistryBuilder registryBuilder) {
registryBuilder.addService( MultiTenantConnectionProvider.class, multiTenantConnectionProvider );
}

Expand Down Expand Up @@ -93,9 +82,6 @@ public void close() {
}

public void exportSchema(MetadataImplementor metadata) {
if ( !multitenancyEnabled ) {
return;
}
ServiceRegistryImplementor serviceRegistry = (ServiceRegistryImplementor) metadata.getMetadataBuildingOptions()
.getServiceRegistry();
HibernateSchemaManagementTool tool = new HibernateSchemaManagementTool();
Expand Down Expand Up @@ -127,10 +113,7 @@ private GenerationTargetToDatabase[] createSchemaTargets(ServiceRegistryImplemen
}

public void forceConfigurationSettings(Map<String, Object> settings) {
if ( !multitenancyEnabled ) {
return;
}
settings.remove( org.hibernate.cfg.Environment.HBM2DDL_AUTO );
settings.put( org.hibernate.cfg.Environment.HBM2DDL_AUTO, org.hibernate.tool.schema.Action.NONE );
settings.put( AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.DATABASE.name() );
// any required backend-multi-tenancy property (e.g.:*.backend.multi_tenancy.strategy = discriminator)
// should be set by the client test
Expand Down

0 comments on commit b8c827e

Please sign in to comment.