2013-08-19 7 views
2

JPA (EclipseLink)를 사용하는 간단한 Java SE 응용 프로그램이 있습니다. 기본적으로 one 'default' connection pool32 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에서 얻을 수있다. 기본 구성을 사용하면 읽기 연결이 즉시 풀로 해제되므로 getResultList는 연결을 얻거나 해제합니다. 쓰기를 위해서, 그것들은 느슨하게 얻어지기 때문에, 커밋 작업은 쓰기 연결을 획득하고 해제 할 것입니다. begin()은 트랜잭션이 필요할 수도 있음을 Eclipse가 알 수있게하지만 반드시 시작하지는 않을 것이라고 생각합니다. – Chris

관련 문제