为什么JPA中存在“太多连接”?

时间:2011-08-23 05:37:00

标签: java jpa jax-rs openjpa

这是我的代码(它是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的连接永远不会被关闭,并且在某些时候我看到“连接太多”。这个设计有什么问题?

2 个答案:

答案 0 :(得分:2)

如果出现错误,您的代码会发生什么?你有保证到达em.close()行吗?您是否偶尔会看到其他异常情况?

将您的整理代码放在finally块中,以确保它们能够运行。

请参阅this link以获取解释。

答案 1 :(得分:0)

可能你正在使用连接池。 OpenJPA而不是为每个db调用创建新连接,这是非常昂贵的任务,从池中获取连接,一旦不再需要连接,它就会返回到池中。这主要是出于性能原因,即hibernate为此目的使用c3p0连接池库,并且还有一些来自Apache的其他名为dbcp(数据库连接池)的库也做类似的事情。