Boa tarde.
Caros, estou passando por um probleminha chaaaaaaato com o vraptor + spring. A princípio na minha aplicação, estou usando o Transaction Manager do spring, sem C3P0 nem nada. Depois de um tempo usando a aplicação ela para de funcionar e começa a dar “Too many connections” na hora de abrir as sessões do hibernate.
Tentei colocar o C3P0 para gerenciar as conexões, mas mesmo assim não funciona e o mesmo problema permanece, só que agora a mensagem do c3p0 “pool is already maxed out”, ou seja, basicamente a mesma coisa do primeiro caso.
Estou usando uma classe ComponentFactory para criar as sessões para o spring:
package br.com.mailing.component;
import java.lang.reflect.Method;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import net.vidageek.mirror.dsl.Mirror;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.orm.hibernate3.SessionFactoryUtils;
import br.com.caelum.vraptor.ioc.Component;
import br.com.caelum.vraptor.ioc.ComponentFactory;
import br.com.caelum.vraptor.ioc.RequestScoped;
import br.com.caelum.vraptor.proxy.MethodInvocation;
import br.com.caelum.vraptor.proxy.Proxifier;
import br.com.caelum.vraptor.proxy.SuperMethod;
@Component
public class CriadorDeSession implements ComponentFactory<Session> {
private final SessionFactory factory;
private final Proxifier proxifier;
private Session session;
public CriadorDeSession(SessionFactory factory, Proxifier proxifier) {
this.factory = factory;
this.proxifier = proxifier;
}
@PostConstruct
public void abre() {
this.session = proxifier.proxify(Session.class,
new MethodInvocation<Session>() {
public Object intercept(Session proxy, Method method,
Object[] args, SuperMethod superMethod) {
Session sessionDoSpring = SessionFactoryUtils
.doGetSession(factory, true);
return new Mirror().on(sessionDoSpring).invoke()
.method(method).withArgs(args);
}
});
}
public Session getInstance() {
return this.session;
}
@PreDestroy
public void fecha() {
this.session.close();
}
}
É como se ele abrisse as conexões mas não fechasse ou não devolvesse para o pool. Alguém sabe o que se passa? Obrigado.
