Class AbstractDataSourceBasedMultiTenantConnectionProviderImpl

    • 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).
      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 from MultiTenantConnectionProvider.getAnyConnection()
      void releaseConnection​(java.lang.String tenantIdentifier, java.sql.Connection connection)
      Release a connection from Hibernate use.
      protected abstract javax.sql.DataSource selectAnyDataSource()  
      protected abstract javax.sql.DataSource selectDataSource​(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
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    • Constructor Detail

      • AbstractDataSourceBasedMultiTenantConnectionProviderImpl

        public AbstractDataSourceBasedMultiTenantConnectionProviderImpl()
    • Method Detail

      • selectAnyDataSource

        protected abstract javax.sql.DataSource selectAnyDataSource()
      • selectDataSource

        protected abstract javax.sql.DataSource selectDataSource​(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 interface MultiTenantConnectionProvider
        Returns:
        The database metadata.
        Throws:
        java.sql.SQLException - Indicates a problem opening a 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 interface MultiTenantConnectionProvider
        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 interface MultiTenantConnectionProvider
        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 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.

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

        public <T> T unwrap​(java.lang.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