Posts Tagged ‘Banco de dados’

Definindo Role de Conexão ao Banco de Dados com JDBC

sexta-feira, abril 9th, 2010

Uma rapidinha, pois demorei a encontrar:

Para definir a role na conexão com o Banco de Dados utilize um Properties

Properties prop = new Properties();
prop.put("user", "login_bd");
prop.put("password", "senha_bd");
prop.put("roleName", "role_bd");

Connection conn = DriverManager.getConnection("jdbc:firebirdsql:127.0.01:banco", prop);

conn.setAutoCommit(false);            
conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);

Simples assim! Note que roleName é case sensitive eu apanhei um monte até descobrir.

Hibernate sem XML (ufa!)

quarta-feira, abril 22nd, 2009

Opa, eu nunca me dei bem com XML… não sei se é trauma da época que trabalhava com html(abre tag, fecha tag, abre tag…) ou se é algum outro tipo de bloqueio.

E no caso usando hibernate+Annotations achei muito chato ficar alterando este XML para mapear as classes. Além de engessar caso eu queira configurar um nova conexão em tempo de execução.

Isto é mais um exemplo… futuramente (eu ando prometendo muitas coisas :| ) posto aqui um projeto utilizando ele.

No caso aqui eu uso duas classes Banco e BancoProjeto, como são vários projetos herdo e personalizo de acordo com a necessidade de cada projeto.

Primeira classe: Banco

package br.com.theos.admin.database;

import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;

public class Banco {

    protected static Banco instancia;

    private Session session;
    private Transaction transaction;
    private AnnotationConfiguration cfg;

    public synchronized static Banco getInstancia() {
        if (instancia == null) {
            instancia = new Banco();
        }
        return instancia;
    }

    public Banco() {
    	super();

    	cfg = new AnnotationConfiguration();
    }

    public void setProperty(String key, String value) {
        	cfg.setProperty(key, value);
    }

    @SuppressWarnings("unchecked")
    public void addMappedClass(Class persistenceClass) {
    	cfg.addAnnotatedClass(persistenceClass);
    }  

    public Session getSession() {
    	if (session == null) {
    		session = cfg.buildSessionFactory().openSession();
    	}

    	return session;
    }

    public void startTransaction() {
    	transaction = session.beginTransaction();
    }

    public void commitTransaction() {
    	transaction.commit();
    }

    public void rollbackTransaction() {
    	transaction.rollback();
    }
}

Ela apenas está preparada para receber as configurações e serviços básicos. É necessário herdá-la para que seja possível a conexão.

Segunda classe: BancoProjeto

package br.com.theos.server.database;

import br.com.theos.admin.database.Banco;
import br.com.theos.server.database.entities.Class1;
import br.com.theos.server.database.entities.Class2;
import br.com.theos.server.database.entities.Class3;

public class BancoProjeto extends Banco {

	public BancoProjeto(String database) {
		super();

		loadBuild(database);
		loadMappedClass();
	}

	public synchronized static Banco getInstancia(String database) {
        	if (instancia == null) {
            		instancia = new BancoProjeto(database);
        	}       

        	return instancia;
    	}

	private void loadBuild(String database) {
		setProperty("hibernate.dialect", "org.hibernate.dialect.FirebirdDialect");
		setProperty("hibernate.connection.driver_class", "org.firebirdsql.jdbc.FBDriver");
		setProperty("hibernate.connection.url", "jdbc:firebirdsql:localhost/3050:"+database);
		setProperty("hibernate.connection.username", "sysdba");
		setProperty("hibernate.connection.password", "masterkey");
		setProperty("hibernate.show_sql", "false");
                /*
                 * Para apagar e recriar: "create-drop"
                 * Para não fazer nada:  "validate"
                 * Para somente atualizar: "update"
                 */
		setProperty("hibernate.hbm2ddl.auto", "validate");
	}

	private void loadMappedClass() {
		addMappedClass(Class1.class);
		addMappedClass(Class2.class);
		addMappedClass(Class3.class);
	}
}

Pronto! Agora abandonamos o persistence.xml e o hibernate.cfg.xml.

Isto vai dar uma dinamicidade melhor ao seu projeto.