Bom dia pra vcs,
Comecei a pouco tempo a estudar o framework Hibernate e estou com algumas dúvidas simples.
Qual a melhor forma de se utilizar o Hibernate?
Digo, minha aplicação constantemente da estouto de numero de conexoes e creio q esse erro seja porq estou usando o Hibernate de forma indevida.
Quais são os passos para se fazer Update, Select e Insert?
Atualmente eu uso dessa forma:
//[Select]===========================================
daoFactory = new DAOFactory();
Usuario d = daoFactory.getUsuarioDAO().procura(id);
daoFactory.close();
//[Update]==========================================
daoFactory = new DAOFactory();
daoFactory.beginTransaction();
daoFactory.getUsuarioDAO().adiciona(user);
daoFactory.commit();
daoFactory.close();
//[Insert]==========================================
daoFactory = new DAOFactory();
daoFactory.beginTransaction();
daoFactory.getUsuarioDAO().atualiza(d);
daoFactory.commit();
daoFactory.close();
Cenário:
Aplicação J2EE (Servlets/Hibernate/JPA)
Servlet fica recebendo informacoes e gravando no banco de dados.
Banco de Dados Oracle XE.
Dúvidas:
Estou usando o hibernate de forma correta?
O que normalmente causa estouro de conexoes com o banco de dados ?
Tem como monitorar o pool de conexoes do Hibernate?
public class DAOFactory {
private final Session session;
private Transaction transaction;
public DAOFactory() {
session = HibernateUtil.getSession();
}
public void beginTransaction() {
this.transaction = this.session.beginTransaction();
}
public void commit() {
this.transaction.commit();
this.transaction = null;
}
public boolean hasTransaction() {
return this.transaction != null;
}
public void rollback() {
this.transaction.rollback();
this.transaction = null;
}
public void close() {
this.session.close();
}
public UsuarioDAO getUsuarioDAO () {
return new UsuarioDAO(this.session);
}
}
Meu hibernate.xml
<property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:xe</property>
<property name="hibernate.connection.username">teste</property>
<property name="hibernate.connection.password">teste</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.show_sql">false</property>
<property name="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</property>
<property name="c3p0.acquire_increment">1</property>
<property name="c3p0.idle_test_period">100</property>
<property name="c3p0.max_size">100</property>
<property name="c3p0.max_statements">0</property>
<property name="c3p0.min_size">10</property>
<property name="c3p0.timeout">100</property>