Interface MultiTenantConnectionProvider<T>
-
- Type Parameters:
T
- The tenant identifier type
- All Superinterfaces:
Serializable
,Service
,Wrapped
- All Known Implementing Classes:
AbstractDataSourceBasedMultiTenantConnectionProviderImpl
,AbstractMultiTenantConnectionProvider
,DataSourceBasedMultiTenantConnectionProviderImpl
public interface MultiTenantConnectionProvider<T> extends Service, Wrapped
A specializedConnection
provider contract used when the application is using multi-tenancy support requiring tenant-aware connections.A
MultiTenantConnectionProvider
may be selected using the configuration property "hibernate.multi_tenant_connection_provider".An application usually implements its own custom
MultiTenantConnectionProvider
by subclassingAbstractMultiTenantConnectionProvider
.
-
-
Method Summary
All Methods Instance Methods Abstract 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.void
releaseAnyConnection(Connection connection)
Release a connection obtained fromgetAnyConnection()
void
releaseConnection(T tenantIdentifier, Connection connection)
Release a connection from Hibernate use.boolean
supportsAggressiveRelease()
Does this connection provider support aggressive release of JDBC connections and later re-acquisition of those connections if needed?-
Methods inherited from interface org.hibernate.service.spi.Wrapped
isUnwrappableAs, unwrap
-
-
-
-
Method Detail
-
getAnyConnection
Connection getAnyConnection() throws SQLException
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).- Returns:
- The database metadata.
- Throws:
SQLException
- Indicates a problem opening a connection
-
releaseAnyConnection
void releaseAnyConnection(Connection connection) throws SQLException
Release a connection obtained fromgetAnyConnection()
- Parameters:
connection
- The JDBC connection to release- Throws:
SQLException
- Indicates a problem closing the connection
-
getConnection
Connection getConnection(T tenantIdentifier) throws SQLException
Obtains a connection for use according to the underlying strategy of this provider.- 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 connectionHibernateException
- Indicates a problem otherwise obtaining a connection.
-
releaseConnection
void releaseConnection(T tenantIdentifier, Connection connection) throws SQLException
Release a connection from Hibernate use.- Parameters:
connection
- The JDBC connection to releasetenantIdentifier
- The identifier of the tenant.- Throws:
SQLException
- Indicates a problem closing the connectionHibernateException
- Indicates a problem otherwise releasing a connection.
-
supportsAggressiveRelease
boolean supportsAggressiveRelease()
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.
- Returns:
true
if aggressive releasing is supported;false
otherwise.
-
-