Class AbstractDataSourceBasedMultiTenantConnectionProviderImpl<T>
- java.lang.Object
-
- org.hibernate.engine.jdbc.connections.spi.AbstractDataSourceBasedMultiTenantConnectionProviderImpl<T>
-
- All Implemented Interfaces:
Serializable
,MultiTenantConnectionProvider<T>
,Service
,Wrapped
- Direct Known Subclasses:
DataSourceBasedMultiTenantConnectionProviderImpl
public abstract class AbstractDataSourceBasedMultiTenantConnectionProviderImpl<T> extends Object implements MultiTenantConnectionProvider<T>
Basic support for implementations ofMultiTenantConnectionProvider
based on DataSources.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description AbstractDataSourceBasedMultiTenantConnectionProviderImpl()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description Connection
getAnyConnection()
Allows access to the database metadata of the underlying database(s) in situations where we do not have a tenant id (like startup processing, for example).Connection
getConnection(T tenantIdentifier)
Obtains a connection for use according to the underlying strategy of this provider.boolean
isUnwrappableAs(Class<?> unwrapType)
Can this wrapped service be unwrapped as the indicated type?void
releaseAnyConnection(Connection connection)
Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()
void
releaseConnection(T tenantIdentifier, Connection connection)
Release a connection from Hibernate use.protected abstract DataSource
selectAnyDataSource()
protected abstract DataSource
selectDataSource(T tenantIdentifier)
boolean
supportsAggressiveRelease()
Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?<T> T
unwrap(Class<T> unwrapType)
Unproxy the service proxy
-
-
-
Method Detail
-
selectAnyDataSource
protected abstract DataSource selectAnyDataSource()
-
selectDataSource
protected abstract DataSource selectDataSource(T tenantIdentifier)
-
getAnyConnection
public Connection getAnyConnection() throws SQLException
Description copied from interface:MultiTenantConnectionProvider
Allows access to the database metadata of the underlying database(s) in situations where we do not have a tenant id (like startup processing, for example).- Specified by:
getAnyConnection
in interfaceMultiTenantConnectionProvider<T>
- Returns:
- The database metadata.
- Throws:
SQLException
- Indicates a problem opening a connection
-
releaseAnyConnection
public void releaseAnyConnection(Connection connection) throws SQLException
Description copied from interface:MultiTenantConnectionProvider
Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()
- Specified by:
releaseAnyConnection
in interfaceMultiTenantConnectionProvider<T>
- Parameters:
connection
- The JDBC connection to release- Throws:
SQLException
- Indicates a problem closing the connection
-
getConnection
public Connection getConnection(T tenantIdentifier) throws SQLException
Description copied from interface:MultiTenantConnectionProvider
Obtains a connection for use according to the underlying strategy of this provider.- Specified by:
getConnection
in interfaceMultiTenantConnectionProvider<T>
- Parameters:
tenantIdentifier
- The identifier of the tenant for which to get a connection- Returns:
- The obtained JDBC connection
- Throws:
SQLException
- Indicates a problem opening a connection
-
releaseConnection
public void releaseConnection(T tenantIdentifier, Connection connection) throws SQLException
Description copied from interface:MultiTenantConnectionProvider
Release a connection from Hibernate use.- Specified by:
releaseConnection
in interfaceMultiTenantConnectionProvider<T>
- Parameters:
tenantIdentifier
- The identifier of the tenant.connection
- The JDBC connection to release- Throws:
SQLException
- Indicates a problem closing the connection
-
supportsAggressiveRelease
public boolean supportsAggressiveRelease()
Description copied from interface:MultiTenantConnectionProvider
Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?This is used in conjunction with
ConnectionReleaseMode.AFTER_STATEMENT
to aggressively release JDBC connections. However, the configuredConnectionProvider
must support re-acquisition of the same underlying connection for that semantic to work.Typically, this is only true in managed environments where a container tracks connections by transaction or thread.
Note that JTA semantic depends on the fact that the underlying connection provider does support aggressive release.
- Specified by:
supportsAggressiveRelease
in interfaceMultiTenantConnectionProvider<T>
- Returns:
true
if aggressive releasing is supported;false
otherwise.
-
isUnwrappableAs
public boolean isUnwrappableAs(Class<?> unwrapType)
Description copied from interface:Wrapped
Can this wrapped service be unwrapped as the indicated type?- Specified by:
isUnwrappableAs
in interfaceWrapped
- Parameters:
unwrapType
- The type to check.- Returns:
- True/false.
-
-