不支持XA事務(wù)
[12/13/07 10:09:05:171 CST] 000002d6 RegisteredRes E WTRN0078E: An attempt by the transaction manager to call
start on a transactional resource has resulted in an error. The error code was XAER_RMERR. The exception stack trace
follows: oracle.jdbc.xa.OracleXAException
at oracle.jdbc.xa.OracleXAResource.checkError(OracleXAResource.java:1223)
at oracle.jdbc.xa.client.OracleXAResource.start(OracleXAResource.java:318)
at com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.start(WSRdbXaResourceImpl.java:1324)
at com.ibm.ejs.j2c.XATransactionWrapper.start(XATransactionWrapper.java:1467)
at com.ibm.ws.Transaction.JTA.JTAResourceBase.start(JTAResourceBase.java:141)
at com.ibm.ws.Transaction.JTA.RegisteredResources.startRes(RegisteredResources.java:1103)
at com.ibm.ws.Transaction.JTA.RegisteredResources.enlistResource(RegisteredResources.java:525)
at com.ibm.ws.Transaction.JTA.TransactionImpl.enlistResource(TransactionImpl.java:3219)
at com.ibm.ws.Transaction.JTA.TranManagerSet.enlist(TranManagerSet.java:396)
at com.ibm.ejs.j2c.XATransactionWrapper.enlist(XATransactionWrapper.java:693)
at com.ibm.ejs.j2c.ConnectionManager.lazyEnlist(ConnectionManager.java:1747)
at com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.lazyEnlist(WSRdbManagedConnectionImpl.java:2112)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.beginTransactionIfNecessary(WSJdbcConnection.java:600)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:2014)
at com.ibm.ws.rsadapter.jdbc.WSJdbcConnection.prepareStatement(WSJdbcConnection.java:1969)
at org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:497)
at org.hibernate.jdbc.AbstractBatcher.prepareSelectStatement(AbstractBatcher.java:123)
at org.hibernate.id.SequenceGenerator.generate(SequenceGenerator.java:73)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId
(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient
(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.performSaveOrUpdate
(DefaultSaveOrUpdateEventListener.java:98)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate
(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl.java:507)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:499)
at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java:495)
at org.springframework.orm.hibernate3.HibernateTemplate$16.doInHibernate(HibernateTemplate.java:684)
at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
at org.springframework.orm.hibernate3.HibernateTemplate.saveOrUpdate(HibernateTemplate.java:681)
at com.mangocity.pay.log.dao.PayLogDaoImpl.save(PayLogDaoImpl.java:16)
該錯(cuò)誤是因?yàn)槭聞?wù)管理程序不能將事務(wù)轉(zhuǎn)換為XA事務(wù)。Oracle 明確的返回錯(cuò)誤 XAER_RMERR ,錯(cuò)誤代碼編號(hào)為 65535。 ORA-65535
不是一個(gè)有效錯(cuò)誤代碼,并且 XAER_RMERR 實(shí)質(zhì)上意味著 XA 發(fā)生了某些錯(cuò)誤。這說(shuō)明您的 Oracle 數(shù)據(jù)庫(kù)沒(méi)有被配置為支持 XA 事
務(wù)。因此,當(dāng) WebSphere Application Server 事務(wù)管理程序命令 Oracle 事務(wù)管理程序參與這個(gè) XA 事務(wù)時(shí),Oracle 拒絕該命令
并拋出這個(gè)異常。解決方法是運(yùn)行 Oracle 安裝中包含的兩個(gè)腳本。這很可能需要通過(guò)您的 Oracle DBA 來(lái)執(zhí)行,您必須以 SYSOPER
或 SYSDBA 身份登錄到 Oracle,以擁有足夠的權(quán)限來(lái)運(yùn)行這些腳本。這些腳本是:directory: <ORACLE_HOME>\javavm\install、
file: initxa.sql、file: initjvm.sql、initxa.sql 腳本配置 XA 數(shù)據(jù)庫(kù)。一旦它成功運(yùn)行,您的數(shù)據(jù)庫(kù)就被配置為 XA。該腳本
在您第一次運(yùn)行的時(shí)候可能成功。不幸的是由于一些數(shù)據(jù)庫(kù)的內(nèi)存空間太小,該腳本也可能無(wú)法成功運(yùn)行。為修改該問(wèn)題,運(yùn)行
initjvm.sql 腳本。它可能也會(huì)運(yùn)行失敗,但是在失敗時(shí),該腳本會(huì)說(shuō)明哪個(gè)參數(shù)需要調(diào)整。參數(shù)被保存在該文件中:directory:
<ORACLE_HOME>\database,file: init<DATABASE_SID>.ora,這個(gè)表說(shuō)明了有兩個(gè)參數(shù)的值特別需要增大。對(duì)于特定的數(shù)據(jù)庫(kù)配置可
能需要調(diào)整不同的參數(shù)。
Oracle Initialization Values
Parameter Name Minimum Value
java_pool_size 12000000
shared_pool_size 24000000
一旦 initjvm.sql 運(yùn)行成功,則 initxa.sql 就應(yīng)該也可以成功運(yùn)行。Oracle 數(shù)據(jù)庫(kù)需要重新啟動(dòng),以使修改生效。您可以重新啟
動(dòng) WebSphere Studio 測(cè)試服務(wù)器并重新嘗試運(yùn)行該范例。
posted on 2008-06-27 16:37 oliver.kang 閱讀(1424) 評(píng)論(0) 編輯 收藏 所屬分類: 數(shù)據(jù)庫(kù)