2011-08-23 81 views
3

这是我的代码(这是JAX-RS + JPA):为什么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

发生错误时,代码中会发生什么?你保证到达em.close()行吗?你是否偶尔会看到异常,或许是在其他地方发现的?

把你整理好的代码放在finally块中,这样它们才能保证运行。

有关说明,请参见this link

+0

链接解释了一切,非常感谢! – yegor256

0

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

+0

我很感谢你关于JPA和连接池的信息,但是我的设计究竟发生了什么错误以及如何解决这个问题呢? – yegor256