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 of MultiTenantConnectionProvider based on DataSources.
See Also:
  • Constructor Details

    • AbstractDataSourceBasedMultiTenantConnectionProviderImpl

      public AbstractDataSourceBasedMultiTenantConnectionProviderImpl()
  • Method Details

    • 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 interface MultiTenantConnectionProvider<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 from MultiTenantConnectionProvider.getAnyConnection()
      Specified by:
      releaseAnyConnection in interface MultiTenantConnectionProvider<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 interface MultiTenantConnectionProvider<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 interface MultiTenantConnectionProvider<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 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 interface MultiTenantConnectionProvider<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 interface Wrapped
      Parameters:
      unwrapType - The type to check.
      Returns:
      True/false.
    • unwrap

      public <T> T unwrap(Class<T> unwrapType)
      Description copied from interface: Wrapped
      Unproxy the service proxy
      Specified by:
      unwrap in interface Wrapped
      Parameters:
      unwrapType - The java type as which to unwrap this instance.
      Returns:
      The unwrapped reference