Hi Johan -
I had hoped to find more for you on either the hibernate or the
WebSphere site but only found one reference to this error. This problem
report suggests that a 'fix' may be available from IBM (this is a Tivoli
product but Tivoli uses WebSpere and this did happen in the same class
indicated in your trace:
com.ibm.ws.rsadapter.spi.WSRdbManagedConnection).
It also sounds like the problem was related to threads not being in
sync (..use more thread-safe functions). I think the next step in
resolving this would be to turn on tracing in WebSphere to see if the
additional information indicates why there is still an open
transaction. Here is the URL to review the description problem
description.
http://www-1.ibm.com/support/docview.wss?rs=493&context=SWK90&uid=swg1IY71886
Johan Hoogenboezem wrote:
Hi,
I'm using Derby 10.1.1.0 with derbyclient in a WebSphere 5.1 server
environment. Here's the first part of the console output that shows some
versioning info:
****************************************************************************
**Start
WebSphere Platform 5.1 [BASE 5.1.0.3 cf30412.02] [JDK 1.4.1 b0344.02]
running with process name localhost\localhost\server1 and process id 2304
Host Operating System is Windows XP, version 5.1
Java version = J2RE 1.4.1 IBM Windows 32 build cn1411-20031011 (JIT enabled:
jitc), Java Compiler = jitc, Java VM name = Classic VM
...
...
****************************************************************************
**End
I've set up a data source using org.apache.derby.jdbc.ClientXADataSource.
Hibernate is configured as follows:
****************************************************************************
**Start
hibernate.connection.datasource = java:comp/env/jdbc/DefaultDS
hibernate.transaction.factory_class=net.sf.hibernate.transaction.JTATransact
ionFactory
hibernate.transaction.manager_lookup_class=net.sf.hibernate.transaction.WebS
phereTransactionManagerLookup
hibernate.dialect=net.sf.hibernate.dialect.DB2Dialect
hibernate.connection.username=APP
hibernate.connection.password=APP
hibernate.show_sql=false
****************************************************************************
**End
I get the current session from a ThreadLocal variable, so that in the
context of the current thread, anything asking for a hibernate session will
get the same session. I'm using Stateless Session Beans and Message Driven
Beans. Specifically in this instance I'm using an MDB with WebSphere MQ as
the JMS implementation. The transaction is managed by the container and in a
finally clause inside the onMessage() method I call a closeCurrentSession()
utility method that just flushes and closes the hibernate session stored in
the ThreadLocal.
Everything works fine when using a datasource for DB2. However, when I
switch to Derby, I get this:
****************************************************************************
**Start
[9/13/05 8:23:49:819 CAT] 1e59f386 WSRdbXaResour E DSRA0304E: XAException
occurred. XAException contents and details are: The cause is :
org.apache.derby.client.am.SqlException: Error executing a
XAResource.commit(), Server returned XAER_NOTA.
[9/13/05 8:23:49:819 CAT] 1e59f386 WSRdbXaResour E DSRA0302E: XAException
occurred. Error code is: XAER_NOTA. Exception is: XAER_NOTA : Error
executing a XAResource.commit(), Server returned XAER_NOTA
[9/13/05 8:23:49:889 CAT] 1e59f386 XATransaction E J2CA0027E: An exception
occurred while invoking commit on an XA Resource Adapter from dataSource
jdbc/derby/scvwebdev, within transaction ID {XID: formatId(57415344),
gtrid_length(39), bqual_length(28),
data(0000000000000002000000044c4c40cbd49eaa1530e4b7146f080d8853876c7a7365727
66572314c4c40cbd49eaa1530e4b7146f080d8853876c7a000000048333bb35)}:
org.apache.derby.client.am.XaException: XAER_NOTA : Error executing a
XAResource.commit(), Server returned XAER_NOTA
at
org.apache.derby.client.net.NetXAResource.throwXAException(Unknown Source)
at org.apache.derby.client.net.NetXAResource.commit(Unknown Source)
at
com.ibm.ws.rsadapter.spi.WSRdbXaResourceImpl.commit(WSRdbXaResourceImpl.java
:182)
at
com.ibm.ejs.j2c.XATransactionWrapper.commit(XATransactionWrapper.java:432)
at
com.ibm.ws.Transaction.JTA.JTAXAResourceImpl.commit(JTAXAResourceImpl.java:2
42)
at
com.ibm.ws.Transaction.JTA.RegisteredResources.distributeOutcome(RegisteredR
esources.java:1044)
at
com.ibm.ws.Transaction.JTA.RegisteredResources.distributeCommit(RegisteredRe
sources.java:1555)
[snip]
[9/13/05 8:23:50:340 CAT] 1e59f386 MCWrapper E J2CA0081E: Method destroy
failed while trying to execute method destroy on ManagedConnection
[EMAIL PROTECTED] from resource
No longer available. Caught exception: com.ibm.ws.exception.WsException:
DSRA0080E: An exception was received by the Data Store Adapter. See original
exception message: Cannot call 'cleanup' on a ManagedConnection while it is
still in a transaction..
at
com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAd
apterException.java:217)
at
com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.<init>(DataStoreAd
apterException.java:171)
at
com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil
.java:208)
at
com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.cleanupTransactions(WSRd
bManagedConnectionImpl.java:2508)
at
com.ibm.ws.rsadapter.spi.WSRdbManagedConnectionImpl.destroy(WSRdbManagedConn
ectionImpl.java:1966)
at com.ibm.ejs.j2c.MCWrapper.destroy(MCWrapper.java:1327)
at
com.ibm.ejs.j2c.poolmanager.FreePool.returnToFreePool(FreePool.java:305)
at
com.ibm.ejs.j2c.poolmanager.PoolManager.release(PoolManager.java:1251)
at
com.ibm.ejs.j2c.MCWrapper.releaseToPoolManager(MCWrapper.java:1684)
at
com.ibm.ejs.j2c.XATransactionWrapper.afterCompletionCode(XATransactionWrappe
r.java:359)
at
com.ibm.ejs.j2c.XATransactionWrapper.afterCompletion(XATransactionWrapper.ja
va:300)
at
com.ibm.ws.Transaction.JTA.RegisteredSyncs.distributeAfter(RegisteredSyncs.j
ava:161)
at
com.ibm.ws.Transaction.JTA.TransactionImpl.distributeAfter(TransactionImpl.j
ava:2344)
at
com.ibm.ws.Transaction.JTA.RegisteredResources.distributeCommit(RegisteredRe
sources.java:1567)
at
com.ibm.ws.Transaction.JTA.TransactionImpl.internalCommit(TransactionImpl.ja
va:1432)
at
com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java:1012)
at
com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java:150)
at
com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java:182)
at com.ibm.ejs.csi.TranStrategy.commit(TranStrategy.java:712)
at com.ibm.ejs.csi.TranStrategy.postInvoke(TranStrategy.java:167)
at
com.ibm.ejs.csi.TransactionControlImpl.postInvoke(TransactionControlImpl.jav
a:565)
at
com.ibm.ejs.container.EJSContainer.postInvoke(EJSContainer.java:3038)
at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:102)
at com.ibm.ejs.container.MDBWrapper.onMessage(MDBWrapper.java:127)
at
com.ibm.ejs.jms.listener.ServerSession.run(ServerSession.java:372)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:672)
****************************************************************************
**End
Any help with this will be greatly appreciated. I'm in the process of
converting all my team members to Derby, so this is a real show-stopper for
us.
Regards
Johan Hoogenboezem
IZAZI Solutions (Pty) Limited | 57 6th Road | Hyde Park | Johannesburg |
South Africa
tel: + 27 11 788 0333 | mobile: +27 83 296 2360 | fax: + 27 11 788 2630
e-mail: [EMAIL PROTECTED] | web: www.izazi.com
DISCLAIMER This message is intended for the addressee only, as it contains
information that is privileged, private and confidential. If you are not the
intended recipient of this message, you are notified that any distribution,
use or copying of this communication is strictly prohibited. If you have
received this communication in error, please notify the sender immediately