2

JPA(EclipseLink)を使用する単純なJava SEアプリケーションがあります。デフォルトでは、最大32 の接続を許可する1 つの「デフォルト」接続プールがあります。

次のようなことをするとします。

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();
  • 接続プールから接続が実際に要求されたのはいつですか? また、接続が再び解放されるのはいつですか?
  • 1 つのクエリでプールから複数の接続を要求できますか?
  • 最大接続数を 32 から 1 に設定した場合、違いはありますか?
4

1 に答える 1

2

EclipseLink がどのように機能するかはわかりませんが、Hibernate では、statement、transaction、entity_close、auto の後にプールへの接続を解放する接続解放戦略を設定できます。リンク しかし、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
于 2013-08-20T08:55:36.330 に答える