If you are working on Java Persistence API JPA on tomcat or any other web server this would be happening if you have multiple threads going off for connections.
The rule of thumb shall be to have one EntityManagerFactory and get EntityManagers out of it. Hence we would have one factory but multiple products that would take care of closing and managing them selves.
What are the signs:
1. Do you instantiate Persistence.createEntityManagerFactory(“name”) from multiple places?
2. What do you see on Process when you run
ps -aux | grep tomcat
Do you see multiple instances
If either or both of the above have yes, then here is the solution.
The first thing have single instance of ManagerFactory
package com.enderase.persistence;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
/**
* Singlton implementation for EntityManagerFactory
*
* @author Kaleb Woldearegay<kaleb@gullele.com>
*/
public class HibernateUtil {
private static final EntityManagerFactory entityManagerFactory;
static {
try {
entityManagerFactory = Persistence.createEntityManagerFactory("jpa");
} catch (Throwable exception) {
//log your error here
throw new ExceptionInInitializerError(exception);
}
}
public static EntityManagerFactory getEntityManager() {
return entityManagerFactory;
}
}
Then make sure you are taking care of the instances of the EntityManagers that are created from the factory using
EntityManagerFactory entityManagerFactory = HibernateUtil.getEntityManager();
EntityManager em = entityManagerFactory.createEntityManager();
Make sure to close them appropriately after using them
This should pretty much take care of the problem