package br.com.citframework.integracao; import java.sql.Connection; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * Provider/pool de conex�es apenas read only ({@code {@link Connection#setReadOnly(boolean)} == true}), mantendo apenas uma por usu�rio e senha ou JNDI * * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @since 20/08/2014 * */ public final class ConnectionReadOnlyProvider { private ConnectionReadOnlyProvider() {} // static only private static final Map<String, Connection> connections = new ConcurrentHashMap<>(); /** * Recupera uma {@link Connection} {@code READ ONLY} de um recurso JNDI e atribui a um pool local * * @param jndiName * nome do recurso publicado na JNDI * @return {@link Connection} * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @throws Exception * @since 20/08/2014 * @see ConnectionProvider#getConnectionFromJNDI(String, Boolean) */ public static Connection getConnection(final String jndiName) throws Exception { Connection connection = connections.get(jndiName); if (connection == null || connection.isClosed()) { connection = ConnectionProvider.getConnectionFromJNDI(jndiName, Boolean.TRUE); connections.put(jndiName, connection); } return connection; } /** * Recupera uma conex�o de acordo com oas par�metros informados * * @param clazz * classe do driver para conex�o * @param url * url de conex�o * @param user * usu�rio para conex�o * @param password * senha do usu�rio para conex�o * @return {@link Connection} * @throws Exception * @author bruno.ribeiro - <a href="mailto:bruno.ribeiro@centrait.com.br">bruno.ribeiro@centrait.com.br</a> * @since 20/08/2014 * @see ConnectionProvider#getConnection(String, String, String, String) */ public static Connection getConnection(final String clazz, final String url, final String user, final String password) throws Exception { final String identifier = constructIdentifier(clazz, url, user); Connection connection = connections.get(identifier); if (connection == null || connection.isClosed()) { connection = ConnectionProvider.getConnection(clazz, url, user, password, Boolean.TRUE); connections.put(identifier, connection); } return connection; } private static String constructIdentifier(final String clazz, final String url, final String user) { final StringBuilder identifier = new StringBuilder(); identifier.append(clazz).append(":").append(url).append(":").append(user); return identifier.toString(); } }