在升级到 Oracle JDBC 瘦驱动程序导致SQLException: Unexpected exception while enlisting XAConnection
(WebLogic Server 10.0,oracle 版本)中,我们收到下面列出的错误。
我们确实遵循了 Oracle 的建议
- 更改 weblogic 中的全局超时,即对于 JDBC 连接池,将其设置
XASetTransactionTimeout
为true
和XATransactionTimeout
为零 当此参数设置为零时,XAResource 会话超时将设置为全局事务超时。因此需要修改 WLS 的超时时间 如果问题仍然存在,可以通过设置来避免
KeepXAConnTillTxComplete="true"
。数据库产品版本:Oracle9i 企业版 9.2.0.5.0 版 - 具有分区、OLAP 和 Oracle 数据挖掘选项的生产 JServer 9.2.0.5.0 版 - 生产
JDBC 驱动程序名称:Oracle JDBC 驱动程序
JDBC 驱动程序版本:11.1.0.7.0 -生产
我们知道一种选择是不使用 XA 连接,但在我们的情况下这是不可能的。我们肯定需要使用 XA 连接。
java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAResource.XAER_PROTO start() failed on resource 'serviceDataSource': XAER_PROTO : Routine was invoked in an inproper context
oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1101)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:237)
at weblogic.jdbc.wrapper.VendorXAResource.start(VendorXAResource.java:50)
at weblogic.jdbc.jta.DataSource.start(DataSource.java:696)
at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1183)
at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1116)
at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:275)
at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:508)
at weblogic.transaction.internal.ServerTransactionImpl.enlistResource(ServerTransactionImpl.java:435)
at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1407)
at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1331)
at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:426)
at weblogic.jdbc.jta.DataSource.connect(DataSource.java:383)
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:339)