Fórum Hibernate X Problema de conexao #376357
26/04/2010
0
sessionFactory = new AnnotationConfiguration()
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver")
.setProperty("hibernate.connection.url","jdbc:mysql://localhost:3306/apollo")
.setProperty("hibernate.connection.username","root")
.setProperty("hibernate.connection.password","*******")
.setProperty("hibernate.hbm2dll.auto","none")
.setProperty("hibernate.show_sql","true")
.setProperty("hibernate.format_sql","true")
.setProperty("hibernate.c3p0.acquire_increment","2") .setProperty("hibernate.c3p0.idle_test_period","50")
.setProperty("hibernate.c3p0.max_size","20") //antes 1000
.setProperty("hibernate.c3p0.max_statements","100") //ULTIMA ALTERAO SAO OS VALORES DE 1000, isso porque dava um erro de processamento apos N instancia no servidor//
.setProperty("hibernate.c3p0.min_size","1")
.setProperty("hibernate.c3p0.timout","1800")
.setProperty("hibernate.c3p0.validate", "true")
.setProperty("hibernate.c3p0.maxIdleTimeExcessConnections", "10")
.setProperty("transaction.factory_class","org.hibernate.transaction.JDBCTransactionFactory")
.setProperty("current_session_context_class", "thread") ---------------------- O PROBLEMA, : --------------------- é que ao chegar nas "20" conexoes (ou 1000 como estava antes , na linha em destaque...), a conexao cai, o sistema nao vai nem a pa......... Já tentei de tudo, alguem tem uma luz??? Pra vcs falta alguma propriedade a ser configurada? Grato.
Carlos Mazzi
Curtir tópico
+ 0Posts
26/04/2010
Angelo Santos
Carlos,
Sugiro que você aumente o timeout, pois quando sua aplicação atingir o numero máximo de conexão, as conexões que ultrapassam o limite vão para um queue (fila), se o timeout estiver com um valor pequeno as conexões serão recusadas, já que as mesmas estão esperando em uma fila.
Gostei + 0
27/04/2010
Carlos Mazzi
Gostei + 0
27/04/2010
Angelo Santos
Coloque 5000 e teste.
Gostei + 0
27/04/2010
Dyego Carmo
Como que vc esta criando suas sessionfactorys... pode colar o codigo aqui ?
Gostei + 0
27/04/2010
Carlos Mazzi
private static HibernateUtil me;
private SessionFactory sessionFactory;
public HibernateUtil(){
sessionFactory = new AnnotationConfiguration()
.setProperty("hibernate.dialect", "org.hibernate.dialect.MySQLDialect")
.setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver")
.setProperty("hibernate.connection.url","jdbc:mysql://localhost:3306/apollo")
.setProperty("hibernate.connection.username","root")
.setProperty("hibernate.connection.password","*****")
.setProperty("hibernate.hbm2dll.auto","none")
.setProperty("hibernate.show_sql","true")
.setProperty("hibernate.format_sql","true")
.setProperty("hibernate.c3p0.acquire_increment","2")
.setProperty("hibernate.c3p0.idle_test_period","50")
.setProperty("hibernate.c3p0.max_size","20") .setProperty("hibernate.c3p0.max_statements","0")
.setProperty("hibernate.c3p0.min_size","1")
.setProperty("hibernate.c3p0.timout","1800") .setProperty("hibernate.c3p0.validate", "true")
.setProperty("hibernate.c3p0.maxIdleTimeExcessConnections", "10")
.setProperty("transaction.factory_class","org.hibernate.transaction.JDBCTransactionFactory")
.setProperty("current_session_context_class", "thread")
.. ... minhas classes anotadas aqui...(certinho)
.buildSessionFactory();
}
public Session getSession(){
Session toReturn = sessionFactory.openSession();
toReturn.beginTransaction();
return toReturn;
}
/*Inicia (Start) to Hibernate*/
public static HibernateUtil getInstance(){
if (me==null){
me = new HibernateUtil(); }
return(me);
}
}
----------------------------------------------------------------------------------- E a cada manipulacao dos meus DAO's , uso um GenericDAO ----------------------------------------------------------------------------------- public abstract class GenericDAO { private static final long serialVersionUID = 1L;
protected boolean atualizar; protected Session getSession() {
return HibernateUtil.getInstance().getSession();
} protected void saveOrUpdatePojo(Serializable pojo) {
Object classe = pojo.getClass().getName(); int setor = Integer.parseInt(jcUtil.getSessao("posto").toString());
int usuario = Integer.parseInt(jcUtil.getSessao("usuario").toString());
String hist; classe = classe.toString().replace("com.Bean.", ""); Session ses = getSession();
ses.saveOrUpdate(pojo);
ses.getTransaction().commit();
ses.refresh(pojo);
ses.close(); Object reg = pojo.toString(); if (isAtualizar()) {
hist = "Alterou um registro na tabela: " + classe + ". Registro: " + reg;
} else {
hist = "Inseriu um registro na tabela: " + classe + ". Registro: " + reg;
}
adicionarLog(setor, usuario, hist);
} protected <T extends Serializable> T getPojo(Class<T> classToSearch, Serializable key) {
Session ses = getSession();
Serializable toReturn = (Serializable) ses.get(classToSearch, key);
ses.getTransaction().commit();
ses.close();
return (T) toReturn;
} protected void removePojo(Serializable pojoToRemove) {
Object classe = pojoToRemove.getClass().getName();
Object reg = pojoToRemove.toString(); int setor = Integer.parseInt(jcUtil.getSessao("posto").toString());
int usuario = Integer.parseInt(jcUtil.getSessao("usuario").toString());
String hist; classe = classe.toString().replace("com.Bean.", "");
hist = "Apagou um registro na tabela: " + classe + ". Registro: " + reg;
Session ses = getSession();
ses.delete(pojoToRemove); ses.getTransaction().commit();
ses.close(); adicionarLog(setor, usuario, hist);
} protected <T extends Serializable> List<T> getPureList(Class<T> classtoCast, String query, Object... params) {
Session ses = getSession();
Query qr = ses.createQuery(query);
for (int i = 1; i <= params.length; i++) {
qr.setParameter(i, params[i - 1]);
} está ai....Dyego...Abracos
@SuppressWarnings("unchecked")
List<T> toReturn = qr.list(); ses.getTransaction().commit();
ses.close(); return toReturn;
} protected Serializable getPurePojo(String query, Object... params) {
Session ses = getSession();
Query qr = ses.createQuery(query);
for (int i = 1; i <= params.length; i++) {
qr.setParameter(i, params[i - 1]);
}
Object toReturn = qr.uniqueResult(); ses.getTransaction().commit();
ses.close(); return (Serializable) toReturn;
} protected void adicionarLog(int posto, int usuario, String historico) {
Session ses = getSession(); try {
Date data = new Date();
Calendar cal = Calendar.getInstance();
String hora = cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND); Auditoria aud = new Auditoria(posto, usuario);
aud.setAudData(data);
aud.setAudHora(hora);
aud.setAudHistorico(historico); ses.save(aud);
} finally {
ses.getTransaction().commit();
ses.close();
setAtualizar(false);
} }
protected boolean isAtualizar() {
return atualizar;
} protected void setAtualizar(boolean atualizar) {
this.atualizar = atualizar;
}
protected Object jaExiste(String classe, String clausula) {
Session ses = getSession(); try {
Query q = ses.createQuery("SELECT obj FROM "+classe+" obj WHERE "+clausula);
return q.uniqueResult();
} finally {
ses.close();
}
}
}
Gostei + 0
27/04/2010
Carlos Mazzi
Gostei + 0
29/04/2010
Dyego Carmo
session.close();
Experimente e me diga !
Gostei + 0
29/04/2010
Carlos Mazzi
Gostei + 0
30/04/2010
Dyego Carmo
Voce esta usando MySQL ?
Poderia dar um SHOW PROCESS LIST na hora que trava e colar aqui ?
Gostei + 0
04/05/2010
Carlos Mazzi
13, 'root', 'localhost:53390', 'requisicao', 'Sleep', 237, '', ''
14, 'root', 'localhost:53391', 'requisicao', 'Sleep', 160, '', ''
19, 'root', 'localhost:53405', 'requisicao', 'Sleep', 159, '', ''
20, 'root', 'localhost:53406', 'requisicao', 'Sleep', 148, '', ''
22, 'root', 'localhost:53408', 'requisicao', 'Sleep', 148, '', ''
23, 'root', 'localhost:53409', 'requisicao', 'Sleep', 147, '', ''
24, 'root', 'localhost:53410', 'requisicao', 'Sleep', 133, '', ''
25, 'root', 'localhost:53413', 'requisicao', 'Sleep', 132, '', ''
26, 'root', 'localhost:53414', 'requisicao', 'Sleep', 132, '', ''
27, 'root', 'localhost:53415', 'requisicao', 'Sleep', 132, '', ''
32, 'root', 'localhost:53434', 'quantum', 'Sleep', 0, '', ''
33, 'root', 'localhost:53435', 'quantum', 'Query', 0, '', '' aí conforme vou usando, o numero de conexoes, vai crescendo... 10, 'root', 'localhost:53375', 'requisicao', 'Sleep', 566, '', ''
13, 'root', 'localhost:53390', 'requisicao', 'Sleep', 411, '', ''
14, 'root', 'localhost:53391', 'requisicao', 'Sleep', 334, '', ''
19, 'root', 'localhost:53405', 'requisicao', 'Sleep', 333, '', ''
20, 'root', 'localhost:53406', 'requisicao', 'Sleep', 322, '', ''
22, 'root', 'localhost:53408', 'requisicao', 'Sleep', 322, '', ''
23, 'root', 'localhost:53409', 'requisicao', 'Sleep', 321, '', ''
24, 'root', 'localhost:53410', 'requisicao', 'Sleep', 307, '', ''
25, 'root', 'localhost:53413', 'requisicao', 'Sleep', 306, '', ''
26, 'root', 'localhost:53414', 'requisicao', 'Sleep', 306, '', ''
32, 'root', 'localhost:53434', 'quantum', 'Sleep', 0, '', ''
34, 'root', 'localhost:53439', 'requisicao', 'Sleep', 75, '', ''
35, 'root', 'localhost:53440', 'requisicao', 'Sleep', 34, '', ''
37, 'root', 'localhost:53445', 'requisicao', 'Sleep', 20, '', ''
39, 'root', 'localhost:53447', 'requisicao', 'Sleep', 4, '', ''
41, 'root', 'localhost:53449', 'requisicao', 'Sleep', 4, '', ''
42, 'root', 'localhost:53450', 'quantum', 'Query', 0, '', '' E ASSIM vai indo.. o problema, é que ao chegar no numero máximo de conexões , estilpulado na nossa factory(acima tem o codigo), o sistema trava tudo.
Gostei + 0
04/05/2010
Dyego Carmo
Qual a versão do Hibernate ?
Tá usando GlassFish ou Tomcat ?
Quais versoes ?
Gostei + 0
04/05/2010
Carlos Mazzi
Gostei + 0
05/05/2010
Carlos Mazzi
Gostei + 0
06/05/2010
Dyego Carmo
conforme voce vai fechando as session ele NAO FECHA a conexao , prq se alguem pedir mais uma conexao ele nao precisa abrir , apenas passa...
quando dá o timeout ele fecha :)
Gostei + 0
06/05/2010
Carlos Mazzi
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)