A melhor maneira de Implementar

6 respostas
TFAGUNDES6

Opa…

Sempre trabalhei com uma implementação de Hibernate já pronta, então quando era necessario usar o BD era só instanciar esse objeto já pronto e acionar algum metodo dele.
Bom o problema é o seguinte, estou implementando uma aplicação de grande porte do zero usando ejs e tals…
mais estou com duvida da melhor maneira de implementar o hibernate.
Tenho um exemplo funcional mais não sei se ele é profissional…rsrsrs

Segue exemplo da minha factory de configuração.
Em alguns outros projetos que eu pesquisei, foram implementados varias coisas dentro dessa factory.
Seria bom deixar o hibernate trabalhar o a gente, implementando da melhor forma ?

private static final SessionFactory sessionFactory;
	private static final ThreadLocal<Session> threadLocal = new ThreadLocal<Session>(); 
	
	

	static{
		try{
			sessionFactory = new org.hibernate.cfg.Configuration().configure("hibernate.cfg.xml").buildSessionFactory();
			
		}catch (Exception e) {
			throw  new ExceptionInInitializerError(e);
		}
	}
	
	public static Session getInstace(){

		session = (Session) threadLocal.get();
		session = sessionFactory.openSession();
		threadLocal.set(session);
		
		return session;
	}

E esse é meu DAO

public Categoria getCategoria(Integer id)throws Exception{
		session = ConnectionLivrariaFactory.getInstace();
		Transaction tx = null;
		Categoria categoria = null;
		
		try{
			tx = session.beginTransaction();
			categoria =  (Categoria)session.get(Categoria.class, id);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			log.error("Erro ao tentar resgatar a categoria");
			tx.rollback();
		}
		return categoria;
	}

Já tenho em mente em criar um DAO bem generico para facilitar…

hibernate.cfg.xml

<session-factory>
	
		<property name="hibernate.connection.driver_class" >org.gjt.mm.mysql.Driver</property>
		<property name="hibernate.connection.url">jdbc:mysql://localhost/livraria</property>
		<property name="hibernate.connection.username">root</property>
		<property name="hibernate.connection.password">gi</property>
		<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

Isso funciona mais não sei se da melhor forma.

Além disso tmb quero utilizar um pool de conexão com o c3po, mais estou confuso em quais propriedades adicionar
ao meu arquivo de configuração(hibernate.cfg.xml).

Bom se alguém poder me ajudar com qualquer infomação eu agradeço !!

Valeu…Abraços

6 Respostas

V

Utilizo o hibernate + spring em uma aplicacao de grande porte, foi a melhor solucao que achei, pois so o hibernate nao achei uma solucao interessante para mtas tabelas.
Tenho uma classe que chamo de GenericDao com ela consigo fazer qualquer coisa, insert, update, select, etc… para qualquer tabela.

  1. Sua aplicacao é desktop ou web ?
  2. Se web, qual servidor vc utiliza ?
TFAGUNDES6

Primeiramente valeu pela atenção cara.

Então a aplicação é web.
Sempre trabalhei com tomcat mais vou ter que implementar ela com EJBs e usar o JBoss, e pelo visto não vou poder mudar isso
a não se eu provar e comprovar que o Spring é melhor e mais produtivo que EJBs…

Valeu …até…

V

O seguinte, voce nao precisa parar de utilizar ejb para utilizar spring, utilize apenas na camada com o banco, vc pode ate utilizar jndi para pegar a conexao e pool com o banco.
Com certeza seu codigo vai ficar bem mais claro e mais coeso.

flw…

Jedi_FeniX

Vi que “setou” o arquivo de configuração do hibernate. Eu poderia fazer várias configurações desta maneira?
Por exemplo usar vários bancos para uma mesma aplicação?

TFAGUNDES6

Vou ter que fazer isso uma hora ou outra e pelo que eu li dah sim !!!

Jedi_FeniX

Este teu exemplo não estou está funcionando aqui..... as minhas classes estão desta maneira, como no exemplo na página do hibernate

HibernateUtils:
private static final SessionFactory SESSION_FACTORY;
    static{
        try{
            SESSION_FACTORY = new Configuration().configure().buildSessionFactory();
        } catch(Throwable e) {
            System.err.println("Initial Session Factory creation failed " + e);
            throw new ExceptionInInitializerError(e);
        }
    }

    public static SessionFactory getSessionFactory(){
        return SESSION_FACTORY;
    }
HibernateListener:
public class HibernateListener implements ServletContextListener{

    public void contextInitialized(ServletContextEvent sce) {
        HibernateUtils.getSessionFactory();
    }

    public void contextDestroyed(ServletContextEvent sce) {
        HibernateUtils.getSessionFactory().close();
    }
}
A minha dúvida agora é como eu posso chamar a sessão do hibernate? Dentro de uma classe qualquer.
Criado 5 de fevereiro de 2009
Ultima resposta 5 de fev. de 2009
Respostas 6
Participantes 3