Interface MultiTenantConnectionProvider
-
- All Known Implementing Classes:
AbstractDataSourceBasedMultiTenantConnectionProviderImpl
,AbstractMultiTenantConnectionProvider
,DataSourceBasedMultiTenantConnectionProviderImpl
public interface MultiTenantConnectionProvider extends Service, Wrapped
A specialized Connection provider contract used when the application is using multi-tenancy support requiring tenant aware connections.
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description java.sql.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).java.sql.Connection
getConnection(java.lang.String tenantIdentifier)
Obtains a connection for Hibernate use according to the underlying strategy of this provider.void
releaseAnyConnection(java.sql.Connection connection)
Release a connection obtained fromgetAnyConnection()
void
releaseConnection(java.lang.String tenantIdentifier, java.sql.Connection connection)
Release a connection from Hibernate use.boolean
supportsAggressiveRelease()
Does this connection provider support aggressive release of JDBC connections and re-acquisition of those connections (if need be) later?-
Methods inherited from interface org.hibernate.service.spi.Wrapped
isUnwrappableAs, unwrap
-
-
-
-
Method Detail
-
getAnyConnection
java.sql.Connection getAnyConnection() throws java.sql.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:
java.sql.SQLException
- Indicates a problem opening a connection
-
releaseAnyConnection
void releaseAnyConnection(java.sql.Connection connection) throws java.sql.SQLException
Release a connection obtained fromgetAnyConnection()
- Parameters:
connection
- The JDBC connection to release- Throws:
java.sql.SQLException
- Indicates a problem closing the connection
-
getConnection
java.sql.Connection getConnection(java.lang.String tenantIdentifier) throws java.sql.SQLException
Obtains a connection for Hibernate 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:
java.sql.SQLException
- Indicates a problem opening a connectionHibernateException
- Indicates a problem otherwise obtaining a connection.
-
releaseConnection
void releaseConnection(java.lang.String tenantIdentifier, java.sql.Connection connection) throws java.sql.SQLException
Release a connection from Hibernate use.- Parameters:
connection
- The JDBC connection to releasetenantIdentifier
- The identifier of the tenant.- Throws:
java.sql.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 re-acquisition of those connections (if need be) later? This is used in conjunction withAvailableSettings.RELEASE_CONNECTIONS
to aggressively release JDBC connections. However, the configured ConnectionProvider 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.
-
-