C3p0 iniciando várias vezes

4 respostas
brunohansen

Olá pessoal estou fazendo um projeto usando:

Tomcat
Spring
JPA
Hibernate
e C3p0

O Problema que estou tendo é que a cada requisição HTTP o C3p0 inicia novamente, deixando várias conexões perdidas. Me parece que quando eu uso um Servlet comum este problme não ocorre porém qdo uso o Spring…

Alguém ai pode me ajudar já estou ficando louco!

[]s

4 Respostas

EderBaum

Como sabe que o C3p0 está iniciando varias vezes?

Tente descrever o maior numero de detalhes possiveis. As vezes o problema pode estar em algo que vocé nem imagina.

brunohansen

EderBaum:
Como sabe que o C3p0 está iniciando varias vezes?

Tente descrever o maior numero de detalhes possiveis. As vezes o problema pode estar em algo que vocé nem imagina.

Porque a cada requisição HTTP o Tomcat imprime uma info no console dizendo: getConectionPool … initializing C3P0!

Este mesmo problema estava ocorrendo quando eu estava chamando Persistence.createEntityManagerFactory(“Teste”) dentro de um método doPost em um Servlet comum, só que ai eu coloquei um atributo private static final EntityMangerFactory fac = Persistence.createEntityManagerFactory(“Teste”) no Servlet e o problema terminou, porém quando eu passei este código para o spring voltou a dar o problema. Me parece que mesmo sendo static final o spring ta chamando o createEntityManagerFactory a cada requisição. Será que tem algum contexto no spring???

[]s

EderBaum

Pelo que vejo não é o C3p0 que está sendo inicializado a cada requisição, e sim toda inicialização do sistema de Persistência do Hibernate.

Meu palpite é que tem algo realmente errado no seu codigo.
Põem o código do Servlet aqui!!!

Facilitaria nossa vida.

brunohansen

EderBaum:
Pelo que vejo não é o C3p0 que está sendo inicializado a cada requisição, e sim toda inicialização do sistema de Persistência do Hibernate.

Meu palpite é que tem algo realmente errado no seu codigo.
Põem o código do Servlet aqui!!!

Facilitaria nossa vida.

No Servlet não da problema, dá problema no controlador do spring. Segue o código:

public class JPARepositoryFac {
	private static final EntityManagerFactory entityManagerFactory = Persistence.createEntityManagerFactory("Siplom");
		
	public static EntityManager createEntityManager() {
		return entityManagerFactory.createEntityManager();
	}
}

public abstract class BaseController <T extends Serializable> {
		
	public abstract Class <T> getControlledClass();
		
	@RequestMapping(method = RequestMethod.GET)
	public @ResponseBody ExtDataPacket retrieveAll() throws Exception {
		EntityManager entityManager = JPARepositoryFac.createEntityManager();
		
		try {			
			RepositoryIF<String, T> repositoryL = new GenericJPADAO<String, T>(entityManager, getControlledClass());			
			return ExtDataPacketFac.createSuccessPacket(repositoryL.retrieveAll());
		}catch (Exception e) {
			throw e;
		}finally {
			entityManager.close();
		}
	}

...
Criado 17 de janeiro de 2011
Ultima resposta 18 de jan. de 2011
Respostas 4
Participantes 2