Weblogic常見故障之二:XAER_NOTA XAException問題的解決


在weblogic執行XA操作的時候,我們會碰到如下的錯誤,后來發現是JDBC配置的問題。
主要報錯:
java.sql.SQLException: XA error: XAER_NOTA : The XID is not valid start() failed on resource

'weblogic.jdbc.jta.DataSource': XAER
_NOTA : The XID is not valid


查了一下,XAER_NOTA說明transaction branch在ResourceManager端(DB, MQ等)不存在。不存在通常由兩種可能:
1.transaction branch被timeout掉了,
2.就是這個branch壓根就沒有在ResourceManager端發起過。

對於1,可以在Weblogic的XAConnectionPool設定中Enable XA Transaction Timeout, 並對此設定一個合理的值,建議這個值比global transaction timeout大。這樣weblogic在調用xaStart()的時候,會通知RM,該branch的timeout時間,而不是使用RM自己默認的timeout(對於Oracle, 默認為60秒,但一般會在120秒的時候,tx branch才會被Oracle timeout掉)。

對於2, 一般會跟配置有關系,比如兩個XA datasource指向同一個XAConnectionPool, 或多個XAConnectionPool指向同一

個Database,

本例中原來的配置是只一個JDBC POOL:

Weblogic中XAER_NOTA XAException問題 - 踏雪無痕 - 踏雪無痕-心情空間

Weblogic中XAER_NOTA XAException問題 - 踏雪無痕 - 踏雪無痕-心情空間單子報錯如下錯。

本案例中詳細的報錯:
2009-12-30 13:50:27,219 DEBUG [IAAcctConnector] errorFlag : false
2009-12-30 13:50:27,234 ERROR [logger] Error Process = AcctCrmIbsDown
Error Node  = NO_ENTRY
InstanceId = NO_ENTRY
BUsinessId = 376042
City = taizhou
Module Type = CrmIbs_Acct_EAI
Error Code = 6291476
Error Type = 16273440
Error Msg = SqlMapIAManageAcctOssCIDAO postAcct JDBC Exception; nested exception is

org.springframework.jdbc.CannotGetJdbcConnection
Exception: Could not get JDBC connection; nested exception is java.sql.SQLException: Unexpected exception

while enlisting XAConnecti
on java.sql.SQLException: XA error: XAER_NOTA : The XID is not valid start() failed on resource

'weblogic.jdbc.jta.DataSource': XAER
_NOTA : The XID is not valid
oracle.jdbc.xa.OracleXAException
        at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:938)
        at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:244)
        at weblogic.jdbc.wrapper.VendorXAResource.start(VendorXAResource.java:50)
        at weblogic.jdbc.jta.DataSource.start(DataSource.java:629)
        at weblogic.transaction.internal.XAServerResourceInfo.start(XAServerResourceInfo.java:1140)
        at weblogic.transaction.internal.XAServerResourceInfo.xaStart(XAServerResourceInfo.java:1072)
        at weblogic.transaction.internal.XAServerResourceInfo.enlist(XAServerResourceInfo.java:240)
        at weblogic.transaction.internal.ServerTransactionImpl.enlistResource

(ServerTransactionImpl.java:463)
        at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1392)
        at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1334)
        at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:396)
        at weblogic.jdbc.jta.DataSource.connect(DataSource.java:354)
        at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:305)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:146)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:100)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:76)
        at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:178)
        at org.springframework.orm.ibatis.SqlMapClientTemplate.insert(SqlMapClientTemplate.java:309)
        at com.ctzj.eai.cn.oss.CrmIbs.account.dao.ibatis.SqlMapIAManageAcctOssCIDAO.postAcct

(SqlMapIAManageAcctOssCIDAO.java:116)
        at com.ctzj.eai.cn.oss.CrmIbs.account.task.IAAcctDBInsertAcctTask.execute

(IAAcctDBInsertAcctTask.java:71)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnectorOut.handoverTask

(IAAcctConnectorOut.java:139)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnectorOut.process

(IAAcctConnectorOut.java:191)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnector.doAcctOutProcess

(IAAcctConnector.java:187)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnector_xjttxc_ELOImpl.doAcctOutProcess

(IAAcctConnector_xjttxc_ELOIm
pl.java:207)
        at com.ctzj.eai.cn.oss.IAC3OssAdapter.onMessage(IAC3OssAdapter.java:86)
        at weblogic.ejb20.internal.MDListener.execute(MDListener.java:370)
        at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:262)
        at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2678)
        at weblogic.jms.client.JMSSession.execute(JMSSession.java:2598)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

        at weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1397)
        at weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist(DataSource.java:1334)
        at weblogic.jdbc.jta.DataSource.getConnection(DataSource.java:396)
        at weblogic.jdbc.jta.DataSource.connect(DataSource.java:354)
        at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:305)
        at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:146)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:100)
        at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:76)
        at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:178)
        at org.springframework.orm.ibatis.SqlMapClientTemplate.insert(SqlMapClientTemplate.java:309)
        at com.ctzj.eai.cn.oss.CrmIbs.account.dao.ibatis.SqlMapIAManageAcctOssCIDAO.postAcct

(SqlMapIAManageAcctOssCIDAO.java:116)
        at com.ctzj.eai.cn.oss.CrmIbs.account.task.IAAcctDBInsertAcctTask.execute

(IAAcctDBInsertAcctTask.java:71)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnectorOut.handoverTask

(IAAcctConnectorOut.java:139)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnectorOut.process

(IAAcctConnectorOut.java:191)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnector.doAcctOutProcess

(IAAcctConnector.java:187)
        at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnector_xjttxc_ELOImpl.doAcctOutProcess

(IAAcctConnector_xjttxc_ELOIm
pl.java:207)
        at com.ctzj.eai.cn.oss.IAC3OssAdapter.onMessage(IAC3OssAdapter.java:86)
        at weblogic.ejb20.internal.MDListener.execute(MDListener.java:370)
        at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:262)
        at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2678)
        at weblogic.jms.client.JMSSession.execute(JMSSession.java:2598)
        at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
        at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

SubSystem = 4
Cause = class org.springframework.jdbc.CannotGetJdbcConnectionException
StackTrace = at com.ctzj.eai.cn.oss.CrmIbs.account.dao.ibatis.SqlMapIAManageAcctOssCIDAO.postAcct

(SqlMapIAManageAcctOssCIDAO.java:12
0)
at com.ctzj.eai.cn.oss.CrmIbs.account.task.IAAcctDBInsertAcctTask.execute(IAAcctDBInsertAcctTask.java:71)
at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnectorOut.handoverTask

(IAAcctConnectorOut.java:139)
at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnectorOut.process(IAAcctConnectorOut.java:191)
at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnector.doAcctOutProcess(IAAcctConnector.java:187)
at com.ctzj.eai.cn.oss.CrmIbs.account.connector.IAAcctConnector_xjttxc_ELOImpl.doAcctOutProcess

(IAAcctConnector_xjttxc_ELOImpl.java:
207)
at com.ctzj.eai.cn.oss.IAC3OssAdapter.onMessage(IAC3OssAdapter.java:86)
at weblogic.ejb20.internal.MDListener.execute(MDListener.java:370)
at weblogic.ejb20.internal.MDListener.onMessage(MDListener.java:262)
at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:2678)
at weblogic.jms.client.JMSSession.execute(JMSSession.java:2598)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)


解決方法,將97_Pool clone一個為Sync97_Pool是重新配置如下,問題解決:
Weblogic中XAER_NOTA XAException問題 - 踏雪無痕 - 踏雪無痕-心情空間

Weblogic中XAER_NOTA XAException問題 - 踏雪無痕 - 踏雪無痕-心情空間

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM