使用 Rapidclipse 的 C3p0 的连接泄漏问题
Connection leak Issue with C3p0 With Rapidclipse
我们使用 RapidclipseX 创建了一个应用程序,并使用 PostgreSQL 作为数据库。下面是我的初始设置 peristance.xml.
property name="hibernate.hbm2ddl.auto" value="none" />
<property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE" />
<property name="hibernate.c3p0.max_size" value="50000" />
<property name="hibernate.c3p0.idle_test_period" value="300" />
<property name="hibernate.c3p0.max_statements" value="100" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.c3p0.min_size" value="1" />
<property name="hibernate.default_schema" value="canavans" />
<property name="rap.queryCache.mode" value="ENABLE_SELECTIVE" />
<property name="hibernate.archive.autodetection" value="" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.c3p0.timeout" value="3000" />
<property name="hibernate.transaction.auto_close_session" value="false" />
<property name="hibernate.javax.cache.uri" value="classpath:ehcache.xml" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jcache.JCacheRegionFactory" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="hibernate.generate_statistics" value="false" />
<property name="hibernate.auto_quote_keyword" value="true" />
<property name="hibernate.globally_quoted_identifiers" value="true" />
当我们开始生产时,我们开始收到一个错误:“获取测试——池已经用完了。”
然后我添加了这两行:
<property name="hibernate.c3p0.unreturnedConnectionTimeout" value="120" />
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces" value="true" />
一段时间以来,它解决了我们的问题。但是现在,在我们导入旧数据库之后,我们开始得到一个新的错误:
2020-11-25 16:44:11 DEBUG DefaultConnectionTester:207 - Testing a Connection in response to an Exception:
org.postgresql.util.PSQLException: This connection has been closed.
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:299)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269)
2020-11-25 16:44:11 DEBUG NewPooledConnection:207 - com.mchange.v2.c3p0.impl.NewPooledConnection@614f3f61 invalidated by Exception.
当我 google 解决这个问题时,我发现:我实现的 Maxed out 问题的解决方案(那两行)可能是新异常的问题。
我也发现了连接泄漏问题。我试图在 DAO 中关闭 entityManager,但是当我添加任何 JPA-SQL 查询并加载 Java 文件时,这些行消失了。
请帮助我如何一劳永逸地解决这个问题。有什么有效的方法可以做到这一点?我们必须一次又一次地重新启动我们的应用程序。
非常感谢您提供的任何帮助。
问题出在 Rapidclipse X 初始框架版本上。这个问题在Framework 10+
中Rapidclipse X.0.4的最新Framework解决了
XWS-1881 - 刷新具有多个 StreamResources 的页面导致池大小稳定增加。我们通过将 EntityManager 的延迟初始化添加到每个请求的会话策略来解决这个问题。这意味着 EntityManager 仅按需创建,而不是在对服务器应用程序发出的每个请求时创建。这应该会提高框架的整体性能
我们使用 RapidclipseX 创建了一个应用程序,并使用 PostgreSQL 作为数据库。下面是我的初始设置 peristance.xml.
property name="hibernate.hbm2ddl.auto" value="none" />
<property name="javax.persistence.sharedCache.mode" value="ENABLE_SELECTIVE" />
<property name="hibernate.c3p0.max_size" value="50000" />
<property name="hibernate.c3p0.idle_test_period" value="300" />
<property name="hibernate.c3p0.max_statements" value="100" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect" />
<property name="hibernate.cache.use_query_cache" value="true" />
<property name="hibernate.c3p0.min_size" value="1" />
<property name="hibernate.default_schema" value="canavans" />
<property name="rap.queryCache.mode" value="ENABLE_SELECTIVE" />
<property name="hibernate.archive.autodetection" value="" />
<property name="hibernate.cache.use_second_level_cache" value="true" />
<property name="hibernate.c3p0.timeout" value="3000" />
<property name="hibernate.transaction.auto_close_session" value="false" />
<property name="hibernate.javax.cache.uri" value="classpath:ehcache.xml" />
<property name="hibernate.show_sql" value="false" />
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jcache.JCacheRegionFactory" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="hibernate.generate_statistics" value="false" />
<property name="hibernate.auto_quote_keyword" value="true" />
<property name="hibernate.globally_quoted_identifiers" value="true" />
当我们开始生产时,我们开始收到一个错误:“获取测试——池已经用完了。”
然后我添加了这两行:
<property name="hibernate.c3p0.unreturnedConnectionTimeout" value="120" />
<property name="hibernate.c3p0.debugUnreturnedConnectionStackTraces" value="true" />
一段时间以来,它解决了我们的问题。但是现在,在我们导入旧数据库之后,我们开始得到一个新的错误:
2020-11-25 16:44:11 DEBUG DefaultConnectionTester:207 - Testing a Connection in response to an Exception:
org.postgresql.util.PSQLException: This connection has been closed.
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.handleAndClearWarnings(SqlExceptionHelper.java:299)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.logAndClearWarnings(SqlExceptionHelper.java:269)
2020-11-25 16:44:11 DEBUG NewPooledConnection:207 - com.mchange.v2.c3p0.impl.NewPooledConnection@614f3f61 invalidated by Exception.
当我 google 解决这个问题时,我发现:我实现的 Maxed out 问题的解决方案(那两行)可能是新异常的问题。
我也发现了连接泄漏问题。我试图在 DAO 中关闭 entityManager,但是当我添加任何 JPA-SQL 查询并加载 Java 文件时,这些行消失了。
请帮助我如何一劳永逸地解决这个问题。有什么有效的方法可以做到这一点?我们必须一次又一次地重新启动我们的应用程序。
非常感谢您提供的任何帮助。
问题出在 Rapidclipse X 初始框架版本上。这个问题在Framework 10+
中Rapidclipse X.0.4的最新Framework解决了XWS-1881 - 刷新具有多个 StreamResources 的页面导致池大小稳定增加。我们通过将 EntityManager 的延迟初始化添加到每个请求的会话策略来解决这个问题。这意味着 EntityManager 仅按需创建,而不是在对服务器应用程序发出的每个请求时创建。这应该会提高框架的整体性能