Class AbstractMultiTenantConnectionProvider
- java.lang.Object
-
- org.hibernate.engine.jdbc.connections.spi.AbstractMultiTenantConnectionProvider
-
- All Implemented Interfaces:
java.io.Serializable
,MultiTenantConnectionProvider
,Service
,Wrapped
public abstract class AbstractMultiTenantConnectionProvider extends java.lang.Object implements MultiTenantConnectionProvider
Basic support forMultiTenantConnectionProvider
implementations using individualConnectionProvider
instances per tenant behind the scenes.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description AbstractMultiTenantConnectionProvider()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete 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).protected abstract ConnectionProvider
getAnyConnectionProvider()
java.sql.Connection
getConnection(java.lang.String tenantIdentifier)
Obtains a connection for Hibernate use according to the underlying strategy of this provider.boolean
isUnwrappableAs(java.lang.Class unwrapType)
Can this wrapped service be unwrapped as the indicated type?void
releaseAnyConnection(java.sql.Connection connection)
Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()
void
releaseConnection(java.lang.String tenantIdentifier, java.sql.Connection connection)
Release a connection from Hibernate use.protected abstract ConnectionProvider
selectConnectionProvider(java.lang.String tenantIdentifier)
boolean
supportsAggressiveRelease()
Does this connection provider support aggressive release of JDBC connections and re-acquisition of those connections (if need be) later?<T> T
unwrap(java.lang.Class<T> unwrapType)
Unproxy the service proxy
-
-
-
Method Detail
-
getAnyConnectionProvider
protected abstract ConnectionProvider getAnyConnectionProvider()
-
selectConnectionProvider
protected abstract ConnectionProvider selectConnectionProvider(java.lang.String tenantIdentifier)
-
getAnyConnection
public java.sql.Connection getAnyConnection() throws java.sql.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
- Returns:
- The database metadata.
- Throws:
java.sql.SQLException
- Indicates a problem opening a connection
-
releaseAnyConnection
public void releaseAnyConnection(java.sql.Connection connection) throws java.sql.SQLException
Description copied from interface:MultiTenantConnectionProvider
Release a connection obtained fromMultiTenantConnectionProvider.getAnyConnection()
- Specified by:
releaseAnyConnection
in interfaceMultiTenantConnectionProvider
- Parameters:
connection
- The JDBC connection to release- Throws:
java.sql.SQLException
- Indicates a problem closing the connection
-
getConnection
public java.sql.Connection getConnection(java.lang.String tenantIdentifier) throws java.sql.SQLException
Description copied from interface:MultiTenantConnectionProvider
Obtains a connection for Hibernate use according to the underlying strategy of this provider.- Specified by:
getConnection
in interfaceMultiTenantConnectionProvider
- 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 connection
-
releaseConnection
public void releaseConnection(java.lang.String tenantIdentifier, java.sql.Connection connection) throws java.sql.SQLException
Description copied from interface:MultiTenantConnectionProvider
Release a connection from Hibernate use.- Specified by:
releaseConnection
in interfaceMultiTenantConnectionProvider
- Parameters:
tenantIdentifier
- The identifier of the tenant.connection
- The JDBC connection to release- Throws:
java.sql.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 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.- Specified by:
supportsAggressiveRelease
in interfaceMultiTenantConnectionProvider
- Returns:
true
if aggressive releasing is supported;false
otherwise.
-
isUnwrappableAs
public boolean isUnwrappableAs(java.lang.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.
-
-