yot*_*ain 6 jpa jta jdbc tomee
突然间,我连续得到以下错误的选择查询.
Unable to enlist connection in transaction: enlistResource returns 'false'
Run Code Online (Sandbox Code Playgroud)
这似乎是从DBCP抛出的(https://commons.apache.org/proper/commons-dbcp/jacoco/org.apache.commons.dbcp2.managed/TransactionContext.java.html)
本质上,此代码调用javax.transaction.Transaction.enlistResource
查看API,它说"使用与目标Transaction对象关联的事务指定资源.如果资源已成功登记,则为true;否则为false."
我仍然不清楚为什么抛出这个异常.
技术堆栈:
数据源配置:
<Resource id="jdbc/myDS" type="javax.sql.DataSource">
dataSourceCreator = tomcat
jtaManaged = true
driverClassName = ${jdbc.driver}
url = ${jdbc.url}
username = ${jdbc.username}
password = ${jdbc.password}
initialSize = 5
maxActive = 100
maxIdle = 10
minIdle = 5
maxWait = 30000
validationQuery = SELECT 1
testOnBorrow = false
testOnReturn = false
testWhileIdle = true
timeBetweenEvictionRunsMillis = 1800000
numTestsPerEvictionRun = 2
minEvictableIdleTimeMillis = 1800000
accessToUnderlyingConnectionAllowed = false
</Resource>
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Unable to enlist connection in transaction: enlistResource returns 'false'.
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:218) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:198) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$000(LoggingConnectionDecorator.java:58) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:250) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:133) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection.prepareStatement(ConfiguringConnectionDecorator.java:139) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:133) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$RefCountConnection.prepareStatement(JDBCStoreManager.java:1642) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:122) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:513) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.SQLBuffer.prepareStatement(SQLBuffer.java:493) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.SelectImpl.prepareStatement(SelectImpl.java:480) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:421) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.SelectImpl.execute(SelectImpl.java:392) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.LogicalUnion$UnionSelect.execute(LogicalUnion.java:427) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:230) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.sql.LogicalUnion.execute(LogicalUnion.java:220) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.jdbc.kernel.SelectResultObjectProvider.open(SelectResultObjectProvider.java:93) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.kernel.QueryImpl$PackingResultObjectProvider.open(QueryImpl.java:2075) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.lib.rop.EagerResultList.<init>(EagerResultList.java:33) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.kernel.QueryImpl.toResult(QueryImpl.java:1257) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1013) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:869) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:800) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:541) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:274) ~[openjpa-2.4.2.jar:2.4.2]
at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:290) ~[openjpa-2.4.2.jar:2.4.2]
Run Code Online (Sandbox Code Playgroud)
刚刚遇到了同样的问题,并深入研究了我的日志文件。就在第一次出现之前
enlistResource returns 'false'
Run Code Online (Sandbox Code Playgroud)
我找到了一个
Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
Run Code Online (Sandbox Code Playgroud)
进一步检查发现
WARNING [https-jsse-nio-8443-exec-1] org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource Unable to enlist XAResource org.apache.openejb.resource.jdbc.managed.local.LocalXAResource@2ce72e5a, errorCode: 0
javax.transaction.xa.XAException: Count not turn off auto commit for a XA transaction
Run Code Online (Sandbox Code Playgroud)
所有这些让我看到了 tomee-openejb 邮件列表中的一篇旧帖子。所以我最近的tomee.xml配置如下:
<Resource id="[Resourcename]" type="javax.sql.DataSource">
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/[Databasename]
userName = [Username]
password = [Password]
</Resource>
Run Code Online (Sandbox Code Playgroud)
现在我将其更改为以下配置:
<Resource id=[Name] type="javax.sql.DataSource">
jdbcDriver = com.mysql.jdbc.Driver
jdbcUrl = jdbc:mysql://localhost:3306/[Databasename]
jtaManaged = true
username = [Username]
password = [Password]
defaultAutoCommit = false
testOnReturn = true
testWhileIdle = true
timeBetweenEvictionRunsMillis = 60
initialSize = 2
minIdle = 2
validationQuery = "select 1"
</Resource>
Run Code Online (Sandbox Code Playgroud)
祈祷它能正常工作,不会出现任何进一步的问题。如果我不再在这里更新它就会工作得很好。
更多信息:
| 归档时间: |
|
| 查看次数: |
1040 次 |
| 最近记录: |