这是我的代码(它是JAX-RS + JPA):
@Path("/")
public class Foo {
private static final EntityManagerFactory FACTORY =
Persistence.createEntityManagerFactory("foo");
@POST
public void save(String name) {
EntityManager em = this.FACTORY.createEntityManager();
EntityTransaction trans = em.getTransaction();
trans.begin();
MyEntity entity = new MyEntity();
em.persist(entity);
em.flush();
trans.commit();
em.close();
}
}
我正在使用OpenJPA 1.2.2。与MySQL的连接永远不会被关闭,并且在某些时候我看到“连接太多”。这个设计有什么问题?
答案 0 :(得分:2)
如果出现错误,您的代码会发生什么?你有保证到达em.close()行吗?您是否偶尔会看到其他异常情况?
将您的整理代码放在finally块中,以确保它们能够运行。
请参阅this link以获取解释。
答案 1 :(得分:0)
可能你正在使用连接池。 OpenJPA而不是为每个db调用创建新连接,这是非常昂贵的任务,从池中获取连接,一旦不再需要连接,它就会返回到池中。这主要是出于性能原因,即hibernate为此目的使用c3p0连接池库,并且还有一些来自Apache的其他名为dbcp(数据库连接池)的库也做类似的事情。