Galera minha dúvida é a seguinte: Como faço para melhorar a performance de minha conexão JPA ao banco de dados ?
Explico, criei uma classe “genérica” para realizar o DAO do meu banco de dados, mas a conexão ao banco está demorando muito, cerca de 5 a 10 segundos.
Segue o código da classe:
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import org.apache.log4j.Logger;
/**
*
* @author Leandro de Menezes da Silva
*/
public class DAO<T> {
private T pEntidade;
private EntityManager pEntityManager;
private EntityTransaction pEntityTransaction;
/**
* Construtor da classe. <p> Nota: A classe deve ser construída
* obrigatoriamente com a passagem dos dois parâmetros.
*
* @param vNewEntidade Objeto representando a entidade a ser persistida no
* banco de dados.
* @param vNewEntityManager Objeto do tipo <tt>EntityManager</tt> contendo a
* conexão estabelecida ao banco de dados.
*/
public DAO(T vNewEntidade, EntityManager vNewEntityManager) {
this.pEntidade = vNewEntidade;
this.pEntityManager = vNewEntityManager;
}
/**
* Método de persistência para inserção de registros no banco de dados.
*
* @return <tt>true</tt> caso o registro tenha sido inserido com sucesso,
* <tt>false</tt> caso contrário.
*/
public boolean insert() {
boolean blnRet = false;
if (pEntidade != null) {
try {
pEntityTransaction = pEntityManager.getTransaction();
pEntityTransaction.begin();
pEntityManager.persist(pEntidade);
pEntityTransaction.commit();
blnRet = true;
} catch (Exception ex) {
Logger log = Logger.getLogger(DAO.class);
log.fatal("Erro ao inserir o registro!\n" + ex);
pEntityTransaction.rollback();
}
}
return blnRet;
}
/**
* Método de persistência para atualização de registros no banco de dados.
*
* @return <tt>true</tt> caso o registro tenha sido inserido com sucesso,
* <tt>false</tt> caso contrário.
*/
public boolean update() {
boolean blnRet = false;
if (pEntidade != null) {
try {
pEntityTransaction = pEntityManager.getTransaction();
pEntityTransaction.begin();
pEntityManager.merge(pEntidade);
pEntityTransaction.commit();
blnRet = true;
} catch (Exception ex) {
Logger log = Logger.getLogger(DAO.class);
log.fatal("Erro ao inserir o registro!\n" + ex);
pEntityTransaction.rollback();
}
}
return blnRet;
}
/**
* Método de persistência para exclusão de registros no banco de dados.
*
* @return <tt>true</tt> caso o registro tenha sido inserido com sucesso,
* <tt>false</tt> caso contrário.
*/
public boolean delete() {
boolean blnRet = false;
if (pEntidade != null) {
try {
pEntityTransaction = pEntityManager.getTransaction();
pEntityTransaction.begin();
pEntityManager.remove(pEntidade);
pEntityTransaction.commit();
blnRet = true;
} catch (Exception ex) {
Logger log = Logger.getLogger(DAO.class);
log.fatal("Erro ao inserir o registro!\n" + ex);
System.out.println(ex.getMessage());
ex.printStackTrace();
pEntityTransaction.rollback();
}
}
return blnRet;
}
/**
* Método da persistência para seleção de registros no banco de dados.
*
* @param vstrQueryNamed Nome da Query a ser executada na persistência.
* @return Lista da entidade passada como parâmetro na instanciação da
* classe.
*/
public List<T> select(String vstrQueryNamed) {
List<T> plstObjeto = new ArrayList<>();
try {
Query qry = pEntityManager.createNamedQuery(vstrQueryNamed);
plstObjeto = qry.getResultList();
} catch (Exception ex) {
Logger log = Logger.getLogger(DAO.class);
log.fatal("Erro ao pesquisar o registro!\n" + ex);
}
return plstObjeto;
}
}
Outro problema é com relação a atualização que chegou a demorar 1 minuto para atualizar 1 registro e exclusão de registros que não consegui realizar.
Estou usando Netbeans, Java Swing e PostgreSQL 9.2
Desde já agradeço a ajuda de todos.