Olá pessoal,
Estou desenvolvendo um aplicativo e quando faço muitas operações em banco, como cadastrar vários usuários ou corridas, etc… o SQL trava e o eclipse retorna o erro :
10:43:34 INFO [SessionFactoryImpl ] building session factory
10:43:34 INFO [SessionFactoryObjectFactory] Not binding factory to JNDI, no JNDI name configured
10:43:34 WARN [JDBCExceptionReporter] SQL Error: 1040, SQLState: 08004
10:43:34 ERROR [JDBCExceptionReporter] Data source rejected establishment of connection, message from server: "Too many connections"
Imagino que isso seria alguma sessão que não fechei, pois teoricamente cada operação deveria abrir e fechar uma sessão.
A minha classe fabricaDeSessao deveria abrir e fechar a sessão de acordo com o método solicitado:
[code]package br.com.sistaxi.hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.sistaxi.beans.Cliente;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.beans.Usuario;
public class FabricaDeSessao {
public Session abreSessao(Object objeto) {
AnnotationConfiguration cfg = new AnnotationConfiguration();
// cfg.addAnnotatedClass(objeto.getClass());
cfg.addAnnotatedClass(Cliente.class);
cfg.addAnnotatedClass(Usuario.class);
cfg.addAnnotatedClass(Taxi.class);
cfg.addAnnotatedClass(Corrida.class);
SessionFactory factory = cfg.buildSessionFactory();
Session session = factory.openSession();
session.beginTransaction();
return session;
}
public void fechaSessao(Session session) {
session.getTransaction().commit();
session.close();
}
}[/code]
E aqui está minha classe Dao:
[code]package br.com.sistaxi.hibernate;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;
import br.com.sistaxi.beans.Cliente;
import br.com.sistaxi.beans.Corrida;
import br.com.sistaxi.beans.Taxi;
import br.com.sistaxi.beans.Usuario;
public class Dao {
private Session session;
private String mensagem;
private FabricaDeSessao fabricaDeSessao = new FabricaDeSessao();
// private Cliente cliente = new Cliente();
private Corrida corrida = new Corrida();
private Taxi taxi = new Taxi();
public String salva(Object objeto) {
try {
session = fabricaDeSessao.abreSessao(objeto);
session.saveOrUpdate(objeto);
fabricaDeSessao.fechaSessao(session);
return "Informação salva com sucesso!";
} catch (Exception e) {
mensagem = "Erro: " + e;
return mensagem;
}
}
public boolean validaLogin(Usuario usuario) {
session = fabricaDeSessao.abreSessao(usuario);
Criteria select = session.createCriteria(usuario.getClass());
select.add(Restrictions.eq("login", usuario.getLogin()));
select.add(Restrictions.eq("senha", usuario.getSenha()));
if (select.list().isEmpty()) {
fabricaDeSessao.fechaSessao(session);
return false;
} else {
fabricaDeSessao.fechaSessao(session);
return true;
}
}
@SuppressWarnings("unchecked")
public ArrayList<Usuario> listaUsuario(Usuario usuario) {
session = fabricaDeSessao.abreSessao(usuario);
List<Usuario> lista = new ArrayList<Usuario>();
lista = session.createCriteria(Usuario.class).list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Usuario>) lista;
}
@SuppressWarnings("unchecked")
public ArrayList<Taxi> listaTaxi(Taxi taxi) {
session = fabricaDeSessao.abreSessao(taxi);
List<Taxi> lista = new ArrayList<Taxi>();
lista = session.createCriteria(Taxi.class).list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Taxi>) lista;
}
public Object getById(Object objeto, int id) {
// Usuario usuario = new Usuario();
session = fabricaDeSessao.abreSessao(objeto);
objeto = session.get(objeto.getClass(), id);
fabricaDeSessao.fechaSessao(session);
return objeto;
}
public Usuario getUsuarioByLoginSenha(Usuario usuario) {
session = fabricaDeSessao.abreSessao(usuario);
Criteria select = session.createCriteria(usuario.getClass());
select.add(Restrictions.eq("login", usuario.getLogin()));
select.add(Restrictions.eq("senha", usuario.getSenha()));
usuario = (Usuario) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return usuario;
}
public String apaga(Object objeto) {
try {
session = fabricaDeSessao.abreSessao(objeto);
session.delete(objeto);
fabricaDeSessao.fechaSessao(session);
return "Informação salva com sucesso!";
} catch (Exception e) {
mensagem = "Erro: " + e;
return mensagem;
}
}
public String atualiza(Object objeto) {
// try {
session = fabricaDeSessao.abreSessao(objeto);
session.update(objeto);
fabricaDeSessao.fechaSessao(session);
return "Informação salva com sucesso!";
// } catch (Exception e) {
// mensagem = "Erro: " + e;
// return mensagem;
// }
}
@SuppressWarnings("unchecked")
public ArrayList<Cliente> listarCliente(Cliente cliente) {
session = fabricaDeSessao.abreSessao(cliente);
List<Cliente> lista = new ArrayList<Cliente>();
lista = session.createCriteria(Cliente.class).list();
fabricaDeSessao.fechaSessao(session);
return (ArrayList<Cliente>) lista;
}
public Object getClienteByNome(Cliente cliente) {
// Usuario usuario = new Usuario();
session = fabricaDeSessao.abreSessao(cliente);
Criteria select = session.createCriteria(Cliente.class);
select.add(Restrictions.eq("nome", cliente.getNome()));
cliente = (Cliente) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return cliente;
}
@SuppressWarnings("unchecked")
public List<Corrida> getCorridasAtivas() {
session = fabricaDeSessao.abreSessao(corrida);
Criteria select = session.createCriteria(Corrida.class);
select.add(Restrictions.eq("situacao", "ativa"));
List<Corrida> lista = new ArrayList<Corrida>();
lista = select.list();
fabricaDeSessao.fechaSessao(session);
return lista;
}
public Object getCorridaById(int id) {
session = fabricaDeSessao.abreSessao(corrida);
Criteria select = session.createCriteria(Corrida.class);
select.add(Restrictions.eq("id", id));
corrida = (Corrida) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return corrida;
}
public Taxi getTaxibyRt (String rt) {
session = fabricaDeSessao.abreSessao(taxi);
Criteria select = session.createCriteria(Taxi.class);
select.add(Restrictions.eq("rt", rt));
taxi = (Taxi) select.list().get(0);
fabricaDeSessao.fechaSessao(session);
return taxi;
}[/code]
não uso hibernate.xml e sim hibernate.properties e anottations
hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
hibernate.connection.driver_class = com.mysql.jdbc.Driver
hibernate.connection.url = jdbc:mysql://localhost/sistaxi
hibernate.connection.username = root
hibernate.connection.password =1234
hibernate.show_sql = true
hibernate.format_sql = true
Agradeço desde já pelo tempo dedicado ao auxilio…
Muito Obrigado