Skip to content

Commit bddc144

Browse files
committed
slight improvements to instantiation of MultiTenantConnectionProvider + doc
1 parent 141d31a commit bddc144

File tree

3 files changed

+23
-17
lines changed

3 files changed

+23
-17
lines changed

hibernate-core/src/main/java/org/hibernate/cfg/MultiTenancySettings.java

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@
1313
public interface MultiTenancySettings {
1414

1515
/**
16-
* Specifies a {@link MultiTenantConnectionProvider}
17-
* to use. Since {@code MultiTenantConnectionProvider} is also a service, it may be configured
16+
* Specifies a {@link MultiTenantConnectionProvider} to use, either:
17+
* <ul>
18+
* <li>an instance of {@code MultiTenantConnectionProvider},
19+
* <li>a {@link Class} representing a class that implements {@code MultiTenantConnectionProvider}, or
20+
* <li>the name of a class that implements {@code MultiTenantConnectionProvider}.
21+
* </ul>
22+
*
23+
* Since {@code MultiTenantConnectionProvider} is also a service, it may be configured
1824
* directly via the {@link org.hibernate.boot.registry.StandardServiceRegistryBuilder}.
1925
*
2026
* @since 4.1

hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/ConnectionProviderInitiator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@ private static Class<? extends ConnectionProvider> connectionProviderClass(Class
118118
throw new ConnectionProviderConfigurationException( "Class '" + providerClass.getName()
119119
+ "' does not implement 'ConnectionProvider'" );
120120
}
121-
@SuppressWarnings("unchecked")
121+
@SuppressWarnings("unchecked") // Safe, we just checked
122122
final var connectionProviderClass = (Class<? extends ConnectionProvider>) providerClass;
123123
return connectionProviderClass;
124124
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/connections/internal/MultiTenantConnectionProviderInitiator.java

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,13 @@
1010
import org.hibernate.boot.registry.classloading.spi.ClassLoaderService;
1111
import org.hibernate.boot.registry.classloading.spi.ClassLoadingException;
1212
import org.hibernate.cfg.JdbcSettings;
13+
import org.hibernate.engine.jdbc.connections.spi.ConnectionProviderConfigurationException;
1314
import org.hibernate.engine.jdbc.connections.spi.DataSourceBasedMultiTenantConnectionProviderImpl;
1415
import org.hibernate.engine.jdbc.connections.spi.MultiTenantConnectionProvider;
1516
import org.hibernate.resource.beans.internal.Helper;
1617
import org.hibernate.service.spi.ServiceException;
1718
import org.hibernate.service.spi.ServiceRegistryImplementor;
1819

19-
import org.jboss.logging.Logger;
20-
2120
import static org.hibernate.cfg.MultiTenancySettings.MULTI_TENANT_CONNECTION_PROVIDER;
2221

2322
/**
@@ -26,7 +25,6 @@
2625
* @author Steve Ebersole
2726
*/
2827
public class MultiTenantConnectionProviderInitiator implements StandardServiceInitiator<MultiTenantConnectionProvider<?>> {
29-
private static final Logger log = Logger.getLogger( MultiTenantConnectionProviderInitiator.class );
3028

3129
/**
3230
* Singleton access
@@ -64,23 +62,26 @@ else if ( configValue instanceof MultiTenantConnectionProvider<?> multiTenantCon
6462
return multiTenantConnectionProvider;
6563
}
6664
else {
67-
final var implClass = multiTenantConnectionProviderClass( registry, configValue );
65+
final var providerClass = providerClass( registry, configValue );
6866
try {
69-
return implClass.newInstance();
67+
return providerClass.newInstance();
7068
}
7169
catch (Exception e) {
72-
log.warn( "Unable to instantiate specified class [" + implClass.getName() + "]", e );
73-
throw new ServiceException( "Unable to instantiate specified multi-tenant connection provider [" + implClass.getName() + "]" );
70+
throw new ServiceException( "Unable to instantiate specified multi-tenant connection provider [" + providerClass.getName() + "]", e );
7471
}
7572
}
7673
}
7774

78-
private static Class<MultiTenantConnectionProvider<?>> multiTenantConnectionProviderClass(
75+
private static Class<? extends MultiTenantConnectionProvider<?>> providerClass(
7976
ServiceRegistryImplementor registry, Object configValue) {
80-
if ( configValue instanceof Class ) {
81-
@SuppressWarnings("unchecked")
82-
final var clazz = (Class<MultiTenantConnectionProvider<?>>) configValue;
83-
return clazz;
77+
if ( configValue instanceof Class<?> configType ) {
78+
if ( !MultiTenantConnectionProvider.class.isAssignableFrom( configType ) ) {
79+
throw new ConnectionProviderConfigurationException( "Class '" + configType.getName()
80+
+ "' does not implement 'MultiTenantConnectionProvider'" );
81+
}
82+
@SuppressWarnings("unchecked") // Safe, we just checked
83+
final var providerClass = (Class<? extends MultiTenantConnectionProvider<?>>) configType;
84+
return providerClass;
8485
}
8586
else {
8687
final String className = configValue.toString();
@@ -89,8 +90,7 @@ private static Class<MultiTenantConnectionProvider<?>> multiTenantConnectionProv
8990
return classLoaderService.classForName( className );
9091
}
9192
catch (ClassLoadingException cle) {
92-
log.warn( "Unable to locate specified class [" + className + "]", cle );
93-
throw new ServiceException( "Unable to locate specified multi-tenant connection provider [" + className + "]" );
93+
throw new ServiceException( "Unable to locate specified multi-tenant connection provider [" + className + "]", cle );
9494
}
9595
}
9696
}

0 commit comments

Comments
 (0)