DAO レイヤーには 19 のメソッドがあり、それぞれが次のバリエーションです。
public TicketProp saveTicketProp(TicketProp prop) {
EntityManager em = this.emf.createEntityManager();
try {
em.getTransaction().begin();
prop = (TicketProp) em.merge(prop);
em.getTransaction().commit();
return prop;
} finally {
em.close();
}
}
意味: 各メソッドで、独自のトランザクションを処理し、finally ブロックで閉じます。Jersey アプリをテストしているので、JUnit テストは JerseyTest を拡張します。各テスト メソッドは、Grizzly コンテナーをインスタンス化し、テストを実行してから、コンテナーをシャットダウンします。EntityManagerFactory は、Spring によって注入されます。JPA over Hibernate を使用しています。
MySQL テスト DB への接続を監視していますが、接続は常に高くなっています。1 つのテストだけで、MySQL の "Max_used_connections" 変数を 38 まで実行します。楽しみのために、すべての em.close() 呼び出しをコメントアウトしましたが、テストではまだ 38 の接続を使用しています。
私はHibernateの組み込みの接続プールを使用しています(製品用ではありません、私は知っています)。私はまだある種のインテリジェントなプーリングを期待していました。
EntityManager の処理が間違っていますか? 他にどのように接続を閉じることができますか?