Bom, tenho uma aplicação que estava rodando em um determinado servidor.
Por motivos de pessimo suporte e demora na resposta, decidi por trocar de servidor.
O problema é que agora recebo esse erro em qualquer operação que vá ao banco de dados:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: User s7teccom_adm already has more than ‘max_user_connections’ active connections
O problema é meio óbvio…estou ultrapassando o limite de conexões simultaneas do banco de dados, o problema é que não sei onde estou errando.
Segue algumas classes:
hibernate.cfg
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<--Dados para conexão com banco-->
<property name="hibernate.connection.pool_size">10</property>
<property name="show_sql">false</property>
<property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
<property name="hibernate.current_session_context_class">thread</property>
<mapping class="br.com.jm.beans.Usuario"/>
<mapping class="br.com.jm.beans.Perfil"/>
...
</session-factory>
</hibernate-configuration>
HibernateUtil
package br.com.jm.config;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;
public class HibernateUtil{
private static HibernateUtil me;
private static SessionFactory sessionFactory;
private static ServiceRegistry serviceRegistry;
public Session getSession() {
Session toReturn;
if(sessionFactory==null){
try {
Configuration configuration = new Configuration();
configuration.configure();
serviceRegistry = new ServiceRegistryBuilder().applySettings(
configuration.getProperties()).buildServiceRegistry();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
} catch (Throwable ex) {
System.err.println("Failed to create sessionFactory object." + ex);
throw new ExceptionInInitializerError(ex);
}
}
toReturn = sessionFactory.openSession();
toReturn.beginTransaction();
return toReturn;
}
public static HibernateUtil getInstance() {
if (me== null){
me = new HibernateUtil();
}
return me;
}
}
UsuarioDAO
package br.com.jm.dao;
import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.exception.ConstraintViolationException;
import br.com.jm.beans.Setor;
import br.com.jm.beans.Usuario;
public class UsuarioDAO{
Session session;
public UsuarioDAO(Session session){
this.session = session;
}
public Usuario validateLogin(Usuario user){
Query query = session.createQuery("from Usuario usu where usu.login = ? and usu.senha = ?");
query.setString(0, user.getLogin());
query.setString(1, user.getSenha());
Usuario usuario = (Usuario) query.uniqueResult();
session.flush();
return usuario;
}
}
UsuarioFactory
package br.com.jm.factory;
import java.util.List;
import org.hibernate.Session;
import org.hibernate.exception.ConstraintViolationException;
import br.com.jm.actions.UsuarioAction;
import br.com.jm.beans.Setor;
import br.com.jm.beans.Usuario;
import br.com.jm.dao.GenericDAO;
import br.com.jm.dao.PerfilDAO;
import br.com.jm.dao.SetorDAO;
import br.com.jm.dao.UsuarioDAO;
public class UsuarioFactory extends GenericDAO{
private Session session = getSession();
private UsuarioDAO udao = new UsuarioDAO(session);
private SetorDAO sdao = new SetorDAO(session);
private PerfilDAO pdao = new PerfilDAO(session);
private LogFileFactory lFac = new LogFileFactory();
public Usuario login(Usuario user){
Usuario usuario = udao.validateLogin(user);
session.disconnect();
session.close();
return usuario;
}
}
Não sei ao certo onde estou errando…não sei se devo reaproveitar conexões anteriores, ou se devo fechar todas as que uso (isso aparentemente ja estou fazendo).
Quem puder ajudar, ficarei grato.