Interface MultiTenantConnectionProvider

    • 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 from getAnyConnection()
      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?
    • 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 from getAnyConnection()
        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 connection
        HibernateException - 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 release
        tenantIdentifier - The identifier of the tenant.
        Throws:
        java.sql.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 re-acquisition of those connections (if need be) later?

        This is used in conjunction with AvailableSettings.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.