【发布时间】:2013-01-13 04:14:43
【问题描述】:
使用 Hibernate、c3p0、Guice 和 Guice-persist,我们遇到了奇怪的问题,即事务后数据连接没有释放到池中。
好像和JpaPersistService的做法有关,把EntityManager缓存在一个threadLocal变量中:
private final ThreadLocal<EntityManager> entityManager = new ThreadLocal<EntityManager>();
我的问题是:
- 我们是否应该删除 guice-persist 并将其替换为创建一个新的 entityManager 然后在每次需要时关闭它(如建议的here)?
- 或者缓存 entityManager 是可行的方法,我们应该用其他方法解决问题?
(我们的问题:1)mysqld在经典的8h超时后终止mysql连接,因此entityManager不再可用。可以通过开启c3p0 keep-alive来解决,但由于应用程序有时会长时间不使用,我们希望避免保持无用的活动连接。 2)似乎每个EntityManager都做了一些缓存,entite在entityManager之间是不连贯的。没看怎么解决)
【问题讨论】:
标签: java hibernate jpa entitymanager guice-persist