Boa noite!
Criei um WebService utilizando a ide Eclipse, hibernate, json, mysql.
Instalei no cliente e ficou funcionando muito bem. Do nada ele para de funcionar, não da erro, porem parece que não consegue ler o banco, visto que não traz nada.
Ai é só eu parar o tomcat, reiniciar e tudo volta a funcionar. Passa um tempo e da problema novamente.
Alguem já passou por isso, saberia me dizer onde procurar o problema?
Olá. Bom dia.
Tenho um Webservice assim num cliente rodando a mais de um ano e não tenho problema com relação a isto.
Vou tentar te ajudar!
Vamos observar primeiramente a sua conexão com o banco de dados. Como ela é feita dentro da sua classe de serviços? (try/catch/finally)
Bom dia!
Obrigado pela ajuda.
Segue abaixo um código de exemplo.
public List<AvisosMobileVO> getAvisos(ConfiguracaoMobileVO config){
List<AvisosMobileVO> listAvisos = new ArrayList<>();
AvisosMobileVO aviso;
VendedorMobileVO vendedor;
EntityManager em;
AcessoDB acessoDb = new AcessoDB();
Calendar dataFiltro = Calendar.getInstance();
dataFiltro.add(java.util.Calendar.DAY_OF_MONTH, -10);
try {
em = acessoDb.conectar();
Query query = em.createQuery("SELECT a FROM AvisosMobileVO a WHERE a.dataAviso > :dataAv"
+ " AND (a.vendedor.id = :idVendedor OR a.vendedor is null)");
query.setParameter("dataAv", dataFiltro.getTime());
query.setParameter("idVendedor", config.getVendedorPadrao().getId());
List<AvisosMobileVO> listAvisosERP = query.getResultList();
for(int i = 0; i < listAvisosERP.size(); i ++){
aviso = new AvisosMobileVO();
aviso.setId(listAvisosERP.get(i).getId());
aviso.setDataAviso(listAvisosERP.get(i).getDataAviso());
aviso.setTexto(listAvisosERP.get(i).getTexto().replaceAll("\t", "").replaceAll("\r\n", "").replaceAll("\n", "").trim());
aviso.setVisualizado("N");
vendedor = new VendedorMobileVO();
vendedor.setId(listAvisosERP.get(i).getVendedor().getId());
aviso.setVendedor(vendedor);
listAvisos.add(aviso);
}
return listAvisos;
}catch(Exception e){
e.printStackTrace();
return new ArrayList<>();
}finally {
acessoDb.desconectar();
}
}
public class AcessoDB {
private static EntityManagerFactory factory;
private EntityManager em;
static {
try {
factory = Persistence.createEntityManagerFactory("banco");
} catch (RuntimeException ex) {
ex.printStackTrace();
}
}
public EntityManager conectar() throws Exception {
em = factory.createEntityManager();
return em;
}
public void desconectar() {
if (em != null && em.isOpen()) {
em.close();
}
}
public void beginTrans(){
if(em != null){
if(!em.getTransaction().isActive()){
em.getTransaction().begin();
}
}
}
public void commitTrans(){
if(em != null){
if(em.getTransaction().isActive()){
em.getTransaction().commit();
}
}
}
public void rollbackTrans(){
if(em != null){
if(em.getTransaction().isActive()){
em.getTransaction().rollback();
}
}
}
}
Outra coisa que esqueci de mencionar. Neste mesmo Tomcat, esta rodando um sistema que fica funcionando normalmente. Somente o WebService para de funcionar.
Este é o erro que ele passa a dar depois que para de funcioanar.
org.hibernate.exception.JDBCConnectionException: could not execute query
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1389)
org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1317)
org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:255)