Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@
import io.quarkus.hibernate.orm.runtime.config.DatabaseOrmCompatibilityVersion;
import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationRuntimeDescriptor;
import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationRuntimeInitListener;
import io.quarkus.hibernate.orm.runtime.migration.MultiTenancyStrategy;
import io.quarkus.hibernate.orm.runtime.recording.PrevalidatedQuarkusMetadata;
import io.quarkus.hibernate.orm.runtime.recording.RecordedState;

Expand Down Expand Up @@ -222,7 +223,8 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde
Optional<String> dataSourceName = recordedState.getBuildTimeSettings().getSource().getDataSource();
if (dataSourceName.isPresent()) {
// Inject the datasource
injectDataSource(persistenceUnitName, dataSourceName.get(), runtimeSettingsBuilder);
injectDataSource(persistenceUnitName, dataSourceName.get(), recordedState.getMultiTenancyStrategy(),
runtimeSettingsBuilder);
}

// Inject runtime configuration if the persistence unit was defined by Quarkus configuration
Expand Down Expand Up @@ -397,8 +399,10 @@ private void verifyProperties(Map properties) {
}

private static void injectDataSource(String persistenceUnitName, String dataSourceName,
MultiTenancyStrategy multiTenancyStrategy,
RuntimeSettings.Builder runtimeSettingsBuilder) {
// first convert
// Note: the counterpart of this code, but for multitenancy (injecting the connection provider),
// can be found in io.quarkus.hibernate.orm.runtime.boot.FastBootMetadataBuilder.mergeSettings

if (runtimeSettingsBuilder.isConfigured(AvailableSettings.URL) ||
runtimeSettingsBuilder.isConfigured(AvailableSettings.DATASOURCE) ||
Expand All @@ -410,6 +414,16 @@ private static void injectDataSource(String persistenceUnitName, String dataSour
return;
}

if (multiTenancyStrategy != null && multiTenancyStrategy != MultiTenancyStrategy.NONE
&& multiTenancyStrategy != MultiTenancyStrategy.DISCRIMINATOR) {
// Nothing to do: the datasource retrieval will be handled dynamically
// by an implementation of TenantConnectionResolver -- for instance
// io.quarkus.hibernate.orm.runtime.tenant.DataSourceTenantConnectionResolver.
// In the case of database multi-tenancy, that connection resolver
// might not even use the assigned datasource.
return;
}

DataSource dataSource;
try {
// ClientProxy.unwrap is necessary to trigger exceptions on inactive datasources
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -248,6 +248,9 @@ private MergedSettings mergeSettings(QuarkusPersistenceUnitDefinition puDefiniti

if (multiTenancyStrategy != null && multiTenancyStrategy != MultiTenancyStrategy.NONE
&& multiTenancyStrategy != MultiTenancyStrategy.DISCRIMINATOR) {
// Note: the counterpart of this code, but for single-tenancy (injecting the datasource),
// can be found in io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.injectDataSource

// We need to initialize the multi tenant connection provider
// on static init as it is used in MetadataBuildingOptionsImpl
// to determine if multi-tenancy is enabled.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ quarkus.hibernate-orm.multitenant=database
quarkus.hibernate-orm.dialect=MariaDB
quarkus.hibernate-orm.packages=io.quarkus.it.hibernate.multitenancy.fruit

# We create datasources manually, so a lack of configuration doesn't mean Quarkus should step in with defaults.
quarkus.datasource.devservices.enabled=false
# We create datasources programmatically, so we don't need the default datasource.
# This makes sure Quarkus won't create a default datasource in test/dev mode.
# This also helps reproduce https://github.com/quarkusio/quarkus/issues/29269.
quarkus.datasource.active=false

# Inventory persistence unit
quarkus.hibernate-orm."inventory".schema-management.strategy=none
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,10 @@ quarkus.hibernate-orm.multitenant=database
quarkus.hibernate-orm.dialect=MariaDB
quarkus.hibernate-orm.packages=io.quarkus.it.hibernate.multitenancy.fruit

# We create datasources manually, so a lack of configuration doesn't mean Quarkus should step in with defaults.
quarkus.datasource.devservices.enabled=false
# We create datasources programmatically, so we don't need the default datasource.
# This makes sure Quarkus won't create a default datasource in test/dev mode.
# This also helps reproduce https://github.com/quarkusio/quarkus/issues/29269.
quarkus.datasource.active=false

# Inventory persistence unit
quarkus.hibernate-orm."inventory".schema-management.strategy=none
Expand Down
Loading