@Override public void configure(Map configValues) { this.jdbcEnvironment = serviceRegistry.getService( JdbcEnvironment.class ); assert jdbcEnvironment != null : "JdbcEnvironment was not found!"; this.multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configValues ); final boolean showSQL = ConfigurationHelper.getBoolean( Environment.SHOW_SQL, configValues, false ); final boolean formatSQL = ConfigurationHelper.getBoolean( Environment.FORMAT_SQL, configValues, false ); this.sqlStatementLogger = new SqlStatementLogger( showSQL, formatSQL ); resultSetWrapper = new ResultSetWrapperImpl( serviceRegistry ); }
/** * Extract the MultiTenancyStrategy from the setting map. * * @param properties The map of settings. * * @return The selected strategy. {@link #NONE} is always the default. */ public static MultiTenancyStrategy determineMultiTenancyStrategy(Map properties) { final Object strategy = properties.get( Environment.MULTI_TENANT ); if ( strategy == null ) { return MultiTenancyStrategy.NONE; } if ( MultiTenancyStrategy.class.isInstance( strategy ) ) { return (MultiTenancyStrategy) strategy; } final String strategyName = strategy.toString(); try { return MultiTenancyStrategy.valueOf( strategyName.toUpperCase(Locale.ROOT) ); } catch ( RuntimeException e ) { LOG.warn( "Unknown multi tenancy strategy [ " +strategyName +" ], using MultiTenancyStrategy.NONE." ); return MultiTenancyStrategy.NONE; } } }
private JdbcConnectionAccess buildJdbcConnectionAccess(Map configValues, ServiceRegistryImplementor registry) { final MultiTenancyStrategy multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configValues ); if ( !multiTenancyStrategy.requiresMultiTenantConnectionProvider() ) { ConnectionProvider connectionProvider = registry.getService( ConnectionProvider.class ); return new ConnectionProviderJdbcConnectionAccess( connectionProvider ); } else { final MultiTenantConnectionProvider multiTenantConnectionProvider = registry.getService( MultiTenantConnectionProvider.class ); return new MultiTenantConnectionProviderJdbcConnectionAccess( multiTenantConnectionProvider ); } }
public void forceConfigurationSettings(Map<String, Object> settings) { if ( multitenancyEnabled ) { settings.remove( org.hibernate.cfg.Environment.HBM2DDL_AUTO ); settings.put( AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.DATABASE.name() ); } }
public static JdbcConnectionAccess buildBootstrapJdbcConnectionAccess( MultiTenancyStrategy multiTenancyStrategy, ServiceRegistryImplementor registry) { if ( !multiTenancyStrategy.requiresMultiTenantConnectionProvider() ) { ConnectionProvider connectionProvider = registry.getService( ConnectionProvider.class ); return new ConnectionProviderJdbcConnectionAccess( connectionProvider ); } else { final MultiTenantConnectionProvider multiTenantConnectionProvider = registry.getService( MultiTenantConnectionProvider.class ); return new MultiTenantConnectionProviderJdbcConnectionAccess( multiTenantConnectionProvider ); } }
private HibernateOrmMappingInitiator(Metadata metadata, HibernateOrmBootstrapIntrospector introspector, SessionFactoryImplementor sessionFactoryImplementor) { super( new HibernateOrmMappingFactory( sessionFactoryImplementor ), introspector ); this.metadata = metadata; this.introspector = introspector; setMultiTenancyEnabled( !MultiTenancyStrategy.NONE.equals( sessionFactoryImplementor.getSessionFactoryOptions().getMultiTenancyStrategy() ) ); }
@Override protected void additionalProperties(Properties properties) { properties.setProperty(AvailableSettings.HBM2DDL_AUTO, "none"); properties.setProperty(AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.SCHEMA.name()); properties.setProperty(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, TenantContext.TenantIdentifierResolver.class.getName()); properties.put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, MultiTenantConnectionProvider.INSTANCE); }
@Override public Connection obtainConnection() throws SQLException { return !settings.getMultiTenancyStrategy().requiresMultiTenantConnectionProvider() ? serviceRegistry.getService( ConnectionProvider.class ).getConnection() : serviceRegistry.getService( MultiTenantConnectionProvider.class ).getAnyConnection(); }
this.multitenancyEnabled = !MultiTenancyStrategy.NONE.equals( multitenancyStrategy );
@Override public ConnectionProvider initiateService(Map configurationValues, ServiceRegistryImplementor registry) { final MultiTenancyStrategy strategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configurationValues ); if ( strategy == MultiTenancyStrategy.DATABASE || strategy == MultiTenancyStrategy.SCHEMA ) {
@Override @SuppressWarnings( {"unchecked"}) public MultiTenantConnectionProvider initiateService(Map configurationValues, ServiceRegistryImplementor registry) { final MultiTenancyStrategy strategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configurationValues ); if ( !strategy.requiresMultiTenantConnectionProvider() ) {
public static MultiTenancyStrategy determineMultiTenancyStrategy(Map properties) { final Object strategy = properties.get( Environment.MULTI_TENANT ); if ( strategy == null ) { return MultiTenancyStrategy.NONE; } if ( MultiTenancyStrategy.class.isInstance( strategy ) ) { return (MultiTenancyStrategy) strategy; } final String strategyName = strategy.toString(); try { return MultiTenancyStrategy.valueOf( strategyName.toUpperCase() ); } catch ( RuntimeException e ) { LOG.warn( "Unknown multi tenancy strategy [ " +strategyName +" ], using MultiTenancyStrategy.NONE." ); return MultiTenancyStrategy.NONE; } } }
@Override protected void additionalProperties(Properties properties) { properties.setProperty(AvailableSettings.HBM2DDL_AUTO, "none"); properties.setProperty(AvailableSettings.SHOW_SQL, "true"); properties.setProperty(AvailableSettings.MULTI_TENANT, MultiTenancyStrategy.DATABASE.name()); properties.put(AvailableSettings.MULTI_TENANT_CONNECTION_PROVIDER, MultiTenantConnectionProvider.INSTANCE); properties.setProperty(AvailableSettings.MULTI_TENANT_IDENTIFIER_RESOLVER, TenantContext.TenantIdentifierResolver.class.getName()); }
@Override public void releaseConnection(Connection connection) throws SQLException { if ( !settings.getMultiTenancyStrategy().requiresMultiTenantConnectionProvider() ) { serviceRegistry.getService( ConnectionProvider.class ).closeConnection( connection ); } else { serviceRegistry.getService( MultiTenantConnectionProvider.class ).releaseAnyConnection( connection ); } }
this.initializeLazyStateOutsideTransactions = cfgService.getSetting( ENABLE_LAZY_LOAD_NO_TRANS, BOOLEAN, false ); this.multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configurationSettings ); this.currentTenantIdentifierResolver = strategySelector.resolveStrategy( CurrentTenantIdentifierResolver.class,
private JdbcConnectionAccess buildJdbcConnectionAccess(Map configValues, ServiceRegistryImplementor registry) { final MultiTenancyStrategy multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configValues ); if ( !multiTenancyStrategy.requiresMultiTenantConnectionProvider() ) { ConnectionProvider connectionProvider = registry.getService( ConnectionProvider.class ); return new ConnectionProviderJdbcConnectionAccess( connectionProvider ); } else { final MultiTenantConnectionProvider multiTenantConnectionProvider = registry.getService( MultiTenantConnectionProvider.class ); return new MultiTenantConnectionProviderJdbcConnectionAccess( multiTenantConnectionProvider ); } }
public static MultiTenancyStrategy determineMultiTenancyStrategy(Map properties) { final Object strategy = properties.get( Environment.MULTI_TENANT ); if ( strategy == null ) { return MultiTenancyStrategy.NONE; } if ( MultiTenancyStrategy.class.isInstance( strategy ) ) { return (MultiTenancyStrategy) strategy; } final String strategyName = strategy.toString(); try { return MultiTenancyStrategy.valueOf( strategyName.toUpperCase() ); } catch ( RuntimeException e ) { LOG.warn( "Unknown multi tenancy strategy [ " +strategyName +" ], using MultiTenancyStrategy.NONE." ); return MultiTenancyStrategy.NONE; } } }
/** * Configures the Hibernate JPA service with multi-tenant support enabled. * @param builder * @return */ @PersistenceContext @Primary @Bean public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) { Map<String, Object> props = new HashMap<>(); props.put("hibernate.multiTenancy", MultiTenancyStrategy.DATABASE.name()); props.put("hibernate.multi_tenant_connection_provider", dsProvider); props.put("hibernate.tenant_identifier_resolver", tenantResolver); LocalContainerEntityManagerFactoryBean result = builder.dataSource(dataSource()) .persistenceUnit(MultiTenantConstants.TENANT_KEY) .properties(props) .packages("demo").build(); result.setJpaVendorAdapter(jpaVendorAdapter()); return result; }
@Override public JdbcConnectionAccess getJdbcConnectionAccess() { // See class-level JavaDocs for a discussion of the concurrent-access safety of this method if ( jdbcConnectionAccess == null ) { if ( !factory.getSettings().getMultiTenancyStrategy().requiresMultiTenantConnectionProvider() ) { jdbcConnectionAccess = new NonContextualJdbcConnectionAccess( getEventListenerManager(), factory.getServiceRegistry().getService( ConnectionProvider.class ) ); } else { jdbcConnectionAccess = new ContextualJdbcConnectionAccess( getTenantIdentifier(), getEventListenerManager(), factory.getServiceRegistry().getService( MultiTenantConnectionProvider.class ) ); } } return jdbcConnectionAccess; }
this.multiTenancyStrategy = MultiTenancyStrategy.determineMultiTenancyStrategy( configService.getSettings() );