package br.com.citframework.integracao; import java.sql.Connection; import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; import br.com.citframework.excecao.ConnectionException; import br.com.citframework.excecao.PersistenceException; import br.com.citframework.util.Constantes; /** * Implementa��o b�sica de {@link ConnectionControler} * * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @since 25/08/2014 * */ public class ConnectionControlerImpl implements ConnectionControler { private static final Logger LOGGER = Logger.getLogger(ConnectionControlerImpl.class.getName()); private Boolean readOnly = false; protected Connection connection; protected String dataBaseAlias = Constantes.getValue("DATABASE_ALIAS"); protected static final String CLOSE = "Close"; private static final String READONLY = "ReadOnly"; public ConnectionControlerImpl(final String dataBaseAlias) { this(dataBaseAlias, false); } public ConnectionControlerImpl(final String dataBaseAlias, final Boolean readOnly) { this.dataBaseAlias = dataBaseAlias; this.readOnly = readOnly; } @Override public void setReadOnly(final boolean readOnly) throws PersistenceException { this.doConnectionValidation(READONLY); try { connection.setReadOnly(readOnly); } catch (final SQLException e) { LOGGER.log(Level.WARNING, e.getMessage(), e); } } @Override public boolean isReadOnly() throws PersistenceException { this.doConnectionValidation(READONLY); boolean isReadOnly = false; try { isReadOnly = connection.isReadOnly(); } catch (final SQLException e) { LOGGER.log(Level.WARNING, e.getMessage(), e); } return isReadOnly; } @Override public String getDataBaseAlias() { return dataBaseAlias; } @Override public void setDataBaseAlias(final String dataBaseAlias) { this.dataBaseAlias = dataBaseAlias; } @Override public Connection getConnection() throws ConnectionException { try { if (connection == null || connection.isClosed()) { connection = ConnectionProvider.getConnection(this.getDataBaseAlias(), readOnly); } } catch (final Exception e) { LOGGER.log(Level.WARNING, e.getMessage(), e); } return connection; } @Override public void close() throws PersistenceException { this.doConnectionValidation(CLOSE); try { connection.close(); } catch (final SQLException e) { LOGGER.log(Level.WARNING, "CITFramework -> Close operation Failed: " + e.getMessage(), e); } } @Override public boolean closeQuietly() { try { this.close(); return true; } catch (final PersistenceException e) { LOGGER.log(Level.WARNING, e.getMessage(), e); return false; } } /** * Realiza valida��es para a {@link Connection} de acordo com o necess�rio * * @param operation * nome da opera��o, apenas para log * @throws PersistenceException * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @since 25/08/2014 */ protected void doConnectionValidation(final String operation) throws PersistenceException { try { if (connection == null || connection.isClosed()) { throw new IllegalStateException(String.format("'%s' operation failed: connection is null or closed,", operation)); } } catch (final SQLException e) { final String message = "Problema ao realizar valida��o de conex�o: " + e.getMessage(); LOGGER.log(Level.WARNING, message, e); throw new PersistenceException(message); } } }