Interface MultiTenantConnectionProvider<T>

    • 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 from getAnyConnection()
        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 connection
        HibernateException - 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 release
        tenantIdentifier - The identifier of the tenant.
        Throws:
        SQLException - Indicates a problem closing the connection
        HibernateException - 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 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.