我有一个奇怪的情况,不确定这是我的错误,还是eclipselink的标准行为。请帮助理解:
更新(可能的解决方案)
更新(连接池设置)
<properties>
<property name="eclipselink.logging.level" value="FINE"/>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://127.0.0.1:3307/dbname?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true" />
<property name="javax.persistence.jdbc.user" value="root" />
<property name="javax.persistence.jdbc.password" value="*****" />
<property name="javax.persistence.jdbc.show_sql" value="true" />
<property name="eclipselink.connection-pool.default.initial" value="1" />
<property name="eclipselink.connection-pool.default.min" value="10" />
<property name="eclipselink.connection-pool.default.max" value="20" />
<property name="eclipselink.logging.timestamp" value="true"/>
<property name="eclipselink.logging.thread" value="false"/>
<property name="eclipselink.logging.exceptions" value="true"/>
<property name="eclipselink.logging.logger" value="org.eclipse.persistence.logging.CommonsLoggingSessionLog"/>
<property name="eclipselink.logging.parameters" value="true"/>
<property name="eclipselink.connection-pool.testWhileIdle" value="true"/>
<property name="eclipselink.jdbc.batch-writing" value="JDBC"/>
<property name="eclipselink.jdbc.batch-writing.size" value="250"/>
<property name="eclipselink.jdbc.write-connections.max" value="20"/>
<property name="eclipselink.jdbc.exclusive-connection.mode" value="Always"/>
<property name="eclipselink.jdbc.exclusive-connection.is-lazy" value="false"/>
<property name="eclipselink.transaction.join-existing" value="true"/>
<property name="eclipselink.query-results-cache" value="false"/>
<property name="eclipselink.refresh" value="true"/>
<property name="javax.persistence.validation.mode" value="AUTO" />
</properties>
答案 0 :(得分:0)
不是答案,但您并不孤单,是的,我可能在做错误的事情,并使用了2.6.4版 我对命名查询(SE应用程序-不在容器中)存在相同的问题。 EclipseLink ConnectionPool进入Object.wat,因为它达到“ available + used = max”。 从堆栈转储中,它看起来像“等待”中的一些其他对象,包括“ oracle.jdbc.useThreadLocalBufferCache”。 该查询在冻结第33天之前运行32次(32个EM)(因为最大值默认为32)。 我已经检查了明显的一点:所有EM已关闭,所有事务已提交或回滚。 显然,我可以对其进行更改,以便只有一个EM,但令我感到失望的是EM.close不会释放所有内容,但是我想如果外面的某个对象持有对某个对象的引用(阻止连接返回到该对象)是很棘手的。池。 就像这样: EM创建 列表=命名队列选择-无行/列表为空 EM关闭 从func返回 这里没有开始或结束事务,但是也许应该存在,所以也许我会尝试。