package br.com.citframework.integracao;
import java.sql.Connection;
import br.com.citframework.excecao.PersistenceException;
/**
* Controlador de comportamento de conex�es que n�o posuem transa��o
*
* @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a>
* @since 25/08/2014
*
*/
public interface ConnectionControler extends AutoCloseable {
/**
* Coloca uma conex�o em estado {@code read-only}, n�o pode ser transacional, n�o executa DML de altera��o
*
* @param readOnly
* @throws PersistenceException
* @since 01/09/2014
* @see Connection#setReadOnly(boolean)
*/
void setReadOnly(final boolean readOnly) throws PersistenceException;
/**
* Verifica se a conex�o � ou n�o apenas leitura
*
* @return {@code true}, caso a conex�o seja read only. {@code false}, caso contr�rio
* @throws PersistenceException
* @since 01/09/2014
*/
boolean isReadOnly() throws PersistenceException;;
/**
* Recupera o alias da base de dados. Normalmente, o resource JNDI do pool
*
* @return {@link String}
*/
String getDataBaseAlias();
/**
* Seta o alias da base de dados. Normalmente, o resource JNDI do pool
*
* @param dataBaseAlias
* alias da base de dados
*/
void setDataBaseAlias(final String dataBaseAlias);
/**
* Retorna a conex�o relacionada ao Transaction Controler
*
* <p>
* {@code IMPORTANTE}: esta trasa��o pode n�o estar com a transa��o iniciada ({@code {@link Connection#getAutoCommit()} == false}). Voc� deve chamar {@link #start()} caso
* queira comportamento transacional
* <p>
*
* @return {@link Connection}
*/
Connection getConnection() throws PersistenceException;
/**
* Commita e fecha a transa��o
*
* @throws PersistenceException
* caso algum problema ao fechar a transa��o aconte�a, como {@link Connection} j� fechada
* @see {@link Connection#close()}
*/
@Override
void close() throws PersistenceException;
/**
* Commit e fecha a conex�o sem levantar excec�es
*
* @return {@code true}, caso obtenha sucesso em fechar a conex�o. {@code false}, caso contr�rio
* @see {@link #close()}
*/
boolean closeQuietly();
}