db, desenvolvimento, java, padroes

Java Acesso a Banco

Baixe o driver JDBC para o java acessar o banco.

Postgres:
http://jdbc.postgresql.org/download.html

MySQL:
http://www.mysql.com/downloads/connector/j/

Firebird:
http://www.firebirdsql.org/en/jdbc-driver/

Aplicações desktop, sem conceito de multi-usuário:

– Acrescente o jar do JDBC no buildpath do eclipse (o eclipse ignora o classpath do sistema!!)

– Para descobrir o nome completo da classe de driver, abra o jar do JDBC e encontre a classe correta (sem o .class).
Postgres: org.postgresql.Driver
MySQL: com.mysql.jdbc.Driver
Firebird: org.firebirdsql.jdbc.FBDriver

– Cada banco tem uma identificação como: postgresql, mysql, oracle, sqlserver, firebirdsql, etc…

String driver = "NOME_DA_CLASSE_DE_DRIVER";
String server = "IDENTIFICACAO_DO_BANCO";
String host = "IP_SERVIDOR_DO_BANCO";
String port = "PORTA_DO_SERVIDOR_DO_BANCO";
String database = "NOME_DO_BANCO";
String user = "NOME_DO_USUARIO";
String passwd = "SENHA_DO_USUARIO";
String query = "QUERY";

Class.forName(driver);
Connection con = DriverManager.getConnection("jdbc:" + server + "://" + host + ":" + port + "/" + database, user, passwd);
PreparedStatement pstmt = con.prepareStatement(query);
ResultSet rs = pstmt.executeQuery();

Aplicações distribuídas:

– Copie a jar do JDBC na pasta WebContent/WEB-INF/lib

Também é válido copiar bibliotecas para $CATALINA_HOME/lib.

Porém isso conduz a problemas de jar-hell se houverem multiplas aplicações no tomcat com diferentes versões da mesma biblioteca.

Há ainda transtorno para novos desenvolvedores e/ou novas máquinas de produção: vão precisar jogar em seus próprios servidores uma cópia dessas bibliotecas.

Melhor se cada deploy for o mais completo possível, carregando suas próprias dependências.

– Defina os parâmetros de gerência de conexões que o pool deverá seguir em context.xml. Este arquivo deverá estar localizado em Web-Content/META-INF.

<?xml version="1.0"?>

<Context docBase="NOME_DO_PROJETO" path="/PATH_RELATIVO_DO_PROJETO">

	<Resource name="NOME_DO_DATASOURCE" auth="Container"
		type="javax.sql.DataSource" maxActive="50" maxIdle="5" maxWait="500"
		username="NOME_DO_USUARIO_DO_BANCO" password="SENHA_DO_USUARIO_DO_BANCO"
                driverClassName="NOME_DA_CLASSE_DE_DRIVER"
		url="jdbc:IDENTIFICACAO_DO_BANCO://IP_SERVIDOR_DO_BANCO:PORTA_DO_SERVIDOR_DO_BANCO/NOME_DO_BANCO"/>
		
</Context>

– Adicione um ServiceLocator, que irá buscar a conexão de um pool gerenciado pelo servidor de aplicação:

package service;

import java.sql.Connection;
import java.sql.SQLException;

import javax.sql.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class ServiceLocator {
	
	private ServiceLocator() {		
	}
	
	public static Connection getConnection(String dataSouce) throws NamingException, SQLException, NullPointerException {
		Connection result = null;
		InitialContext initialContext;
		Context context;
		DataSource dataSource;
			
		initialContext = new InitialContext();
		context = (Context) initialContext.lookup("java:comp/env");
		dataSource = (DataSource) context.lookup(dataSouce);
		result = dataSource.getConnection();
			
		if (result == null) {
			throw new NullPointerException("Conexão nula para: " + dataSouce);
		}
		return result;
	}

}

Diferente da versão desktop, não é responsabilidade dos objetos de acesso a dados invocarem Class.forName(driver);.

O servidor de aplicação é quem fará isso automaticamente quando estiver no ar.

A obtenção do objeto de conexão ficará assim:

Connection con = ServiceLocator.getConnection("NOME_DO_DATASOURCE");
Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s