2013-08-19 72 views
2

我有一个简单的使用JPA(EclipseLink)的Java SE应用程序。默认情况下,我有one 'default' connection pool,允许最多32 connections何时从连接池获取/返回连接?

想我做这样的事情:

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("myPU"); 

//read 
EntityManager em = emFactory.createEntityManager(); 

TypedQuery<Entity.class> q = em.createQuery("Select e from Entity e", Entity.class); 
List<Entity> entities = q.getResultList(); 

em.close(); 

//write 
em = emFactory.createEntityManager(); 

Entity e = new Entity(); 
em.getTransaction().begin(); 
em.persist(e); 
em.getTransaction().commit(); 

em.close(); 
  • 当连接实际上是从连接池请求并且当他们再次释放?
  • 一个查询是否可以请求池中的多个连接?
  • 如果我将连接的最大数量从32设置为1,会有什么区别吗?

回答

2

好了,我不知道怎么的EclipseLink工作,但在Hibernate中你可以设置连接释放战略释放连接池后:声明,交易,entity_close,汽车。 link但是我找不到EclipseLink的这种东西,所以我认为EclipseLink发布连接策略是在entity_close之后。

所以,这将是这样的:

EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("myPU"); 

//read 
EntityManager em = emFactory.createEntityManager(); 

TypedQuery<Entity.class> q = em.createQuery("Select e from Entity e", Entity.class); 
List<Entity> entities = q.getResultList(); << TAKE FROM POOL 

em.close(); << RELEASE 

//write 
em = emFactory.createEntityManager(); 

Entity e = new Entity(); 
em.getTransaction().begin(); << TAKE FROM POOL 
em.persist(e); 
em.getTransaction().commit(); 

em.close(); << RELEASE 
+2

连接是默认在懒洋洋的EclipseLink获得的,尽管它可以被配置为好。使用默认配置,Read连接立即释放回池,所以getResultList将获取并释放连接。对于写操作,它们也会被懒惰地获得,所以提交操作将获得并释放写连接 - 我相信begin()可以让EclipseLink知道可能需要的事务,但不一定马上启动。 – Chris

相关问题