Skip to content

Commit 6dff09b

Browse files
committed
Do not require a default datasource definition when using a MultiTenantConnectionProvider
1 parent 4ff1ea8 commit 6dff09b

File tree

2 files changed

+19
-2
lines changed

2 files changed

+19
-2
lines changed

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/FastBootHibernatePersistenceProvider.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import io.quarkus.hibernate.orm.runtime.config.DatabaseOrmCompatibilityVersion;
3737
import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationRuntimeDescriptor;
3838
import io.quarkus.hibernate.orm.runtime.integration.HibernateOrmIntegrationRuntimeInitListener;
39+
import io.quarkus.hibernate.orm.runtime.migration.MultiTenancyStrategy;
3940
import io.quarkus.hibernate.orm.runtime.recording.PrevalidatedQuarkusMetadata;
4041
import io.quarkus.hibernate.orm.runtime.recording.RecordedState;
4142

@@ -222,7 +223,8 @@ private RuntimeSettings buildRuntimeSettings(String persistenceUnitName, Recorde
222223
Optional<String> dataSourceName = recordedState.getBuildTimeSettings().getSource().getDataSource();
223224
if (dataSourceName.isPresent()) {
224225
// Inject the datasource
225-
injectDataSource(persistenceUnitName, dataSourceName.get(), runtimeSettingsBuilder);
226+
injectDataSource(persistenceUnitName, dataSourceName.get(), recordedState.getMultiTenancyStrategy(),
227+
runtimeSettingsBuilder);
226228
}
227229

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

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

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

417+
if (multiTenancyStrategy != null && multiTenancyStrategy != MultiTenancyStrategy.NONE
418+
&& multiTenancyStrategy != MultiTenancyStrategy.DISCRIMINATOR) {
419+
// Nothing to do: the datasource retrieval will be handled dynamically
420+
// by an implementation of TenantConnectionResolver -- for instance
421+
// io.quarkus.hibernate.orm.runtime.tenant.DataSourceTenantConnectionResolver.
422+
// In the case of database multi-tenancy, that connection resolver
423+
// might not even use the assigned datasource.
424+
return;
425+
}
426+
413427
DataSource dataSource;
414428
try {
415429
// ClientProxy.unwrap is necessary to trigger exceptions on inactive datasources

extensions/hibernate-orm/runtime/src/main/java/io/quarkus/hibernate/orm/runtime/boot/FastBootMetadataBuilder.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,9 @@ private MergedSettings mergeSettings(QuarkusPersistenceUnitDefinition puDefiniti
248248

249249
if (multiTenancyStrategy != null && multiTenancyStrategy != MultiTenancyStrategy.NONE
250250
&& multiTenancyStrategy != MultiTenancyStrategy.DISCRIMINATOR) {
251+
// Note: the counterpart of this code, but for single-tenancy (injecting the datasource),
252+
// can be found in io.quarkus.hibernate.orm.runtime.FastBootHibernatePersistenceProvider.injectDataSource
253+
251254
// We need to initialize the multi tenant connection provider
252255
// on static init as it is used in MetadataBuildingOptionsImpl
253256
// to determine if multi-tenancy is enabled.

0 commit comments

Comments
 (0)