【问题标题】:Why there are "too many connections" in JPA?为什么JPA中有“太多的连接”?
【发布时间】:2011-11-01 16:05:37
【问题描述】:

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

【问题讨论】:

    标签: java jpa jax-rs openjpa


    【解决方案1】:

    如果发生错误,您的代码会发生什么?你能保证到达 em.close() 行吗?您是否看到偶尔的例外情况,可能在其他地方发现?

    将整理好的代码放入 finally 块中,以保证它们能够运行。

    请参阅this link 了解说明。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您提供有关 JPA 和连接池的信息,但我的设计到底出了什么问题以及如何解决问题?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2017-11-30
      • 1970-01-01
      • 2017-11-29
      • 1970-01-01
      • 2021-04-02
      相关资源
      最近更新 更多